mfxStatus mfxSchedulerCore::StopWakeUpThread(void) { #if defined(_WIN32) || defined(_WIN64) m_bQuitWakeUpThread = true; m_timer_hw_event = 1; // we need close threads ASAP vm_event_signal(&m_hwTaskDone); // close hardware listening tools vm_thread_wait(&m_hwWakeUpThread); vm_thread_close(&m_hwWakeUpThread); //no specific path to obtain event // let close handle #if defined (MFX_VA) #if defined (MFX_D3D11_ENABLED) if (!m_pdx11event) { vm_event_destroy(&m_hwTaskDone); } else { delete m_pdx11event; m_pdx11event = 0; m_hwTaskDone.handle = 0; // handle has been obtained by UMD } #endif #endif m_bQuitWakeUpThread = false; vm_event_set_invalid(&m_hwTaskDone); vm_thread_set_invalid(&m_hwWakeUpThread); #endif // defined(_WIN32) || defined(_WIN64) return MFX_ERR_NONE; } // mfxStatus mfxSchedulerCore::StopWakeUpThread(void)
static void *vm_thread_proc(void *pv_params) { vm_thread *p_thread = (vm_thread *) pv_params; /* check error(s) */ if (NULL == pv_params) return ((void *) -1); p_thread->p_thread_func(p_thread->p_arg); vm_event_signal(&p_thread->exit_event); return ((void *) 1); } /* void *vm_thread_proc(void *pv_params) */