Make QSV stop signal reset manual

master
palana 2014-08-10 03:29:57 +02:00
parent 3fa992beed
commit b10db96dc0
2 changed files with 6 additions and 4 deletions

View File

@ -58,7 +58,7 @@ typedef IPCArray<mfxU8> ipc_pps_buff;
typedef IPCSignalledType<spspps_size> ipc_spspps_size;
#define STOP_REQUEST L"stop"
typedef IPCSignal ipc_stop;
typedef IPCSignal<true> ipc_stop;

View File

@ -83,18 +83,20 @@ private:
}
};
template <bool manual>
struct IPCSignal
{
safe_handle signal_;
bool is_signalled(DWORD timeout=0) { return WaitForSingleObject(signal_, timeout) == WAIT_OBJECT_0; }
void signal() { SetEvent(signal_); }
void reset() { ResetEvent(signal_); }
bool operator!() const { return !signal_; }
IPCSignal &operator=(IPCSignal &&other) { signal_ = std::move(other.signal_); return *this; }
IPCSignal(std::wstring name) { signal_.reset(CreateEvent(nullptr, false, false, name.c_str())); }
IPCSignal(std::wstring name) { signal_.reset(CreateEvent(nullptr, manual, false, name.c_str())); }
IPCSignal() {}
};
@ -161,7 +163,7 @@ struct IPCType
};
template <class T>
struct IPCSignalledType : IPCType<T>, IPCSignal
struct IPCSignalledType : IPCType<T>, IPCSignal<false>
{
bool operator!() const { return !memory || !signal_; }
@ -198,7 +200,7 @@ struct IPCArray
};
template <class T>
struct IPCSignalledArray : IPCArray<T>, IPCSignal
struct IPCSignalledArray : IPCArray<T>, IPCSignal<false>
{
bool operator!() const { return !memory || !signal_; }