| 349 | } |
| 350 | |
| 351 | void CDX9VideoProcessor::DeviceThreadFunc() |
| 352 | { |
| 353 | HANDLE hEvts[] = { m_evInit, m_evResize, m_evReset, m_evQuit }; |
| 354 | |
| 355 | for (;;) { |
| 356 | const auto dwObject = WaitForMultipleObjects(std::size(hEvts), hEvts, FALSE, INFINITE); |
| 357 | m_hrThread = E_FAIL; |
| 358 | switch (dwObject) { |
| 359 | case WAIT_OBJECT_0: // Init |
| 360 | m_hrThread = InitInternal(false, &m_bChangeDeviceThread); |
| 361 | m_evThreadFinishJob.Set(); |
| 362 | break; |
| 363 | case WAIT_OBJECT_0 + 1: // Resize |
| 364 | ResizeInternal(); |
| 365 | m_evThreadFinishJob.Set(); |
| 366 | break; |
| 367 | case WAIT_OBJECT_0 + 2: // Reset |
| 368 | m_hrThread = ResetInternal(); |
| 369 | m_evThreadFinishJob.Set(); |
| 370 | break; |
| 371 | default: // Quit |
| 372 | return; |
| 373 | } |
| 374 | } |
| 375 | } |
| 376 | |
| 377 | HRESULT CDX9VideoProcessor::InitInternal(bool bFullCreate, bool* pChangeDevice) |
| 378 | { |