void g_omx_core_set_done (GOmxCore *core) { GST_DEBUG_OBJECT (core->object, "begin"); g_sem_up (core->done_sem); GST_DEBUG_OBJECT (core->object, "end"); }
static OMX_ERRORTYPE EventHandler (OMX_HANDLETYPE omx_handle, OMX_PTR app_data, OMX_EVENTTYPE event, OMX_U32 data_1, OMX_U32 data_2, OMX_PTR event_data) { GOmxCore *core; core = (GOmxCore *) app_data; switch (event) { case OMX_EventCmdComplete: { OMX_COMMANDTYPE cmd; cmd = (OMX_COMMANDTYPE) data_1; GST_DEBUG_OBJECT (core->object, "OMX_EventCmdComplete: %d", cmd); switch (cmd) { case OMX_CommandStateSet: complete_change_state (core, data_2); break; case OMX_CommandFlush: g_sem_up (core->flush_sem); break; case OMX_CommandPortDisable: case OMX_CommandPortEnable: g_sem_up (core->port_sem); default: break; } break; } case OMX_EventBufferFlag: { GST_DEBUG_OBJECT (core->object, "OMX_EventBufferFlag"); if (data_2 & OMX_BUFFERFLAG_EOS) { g_omx_core_set_done (core); } break; } case OMX_EventPortSettingsChanged: { GST_DEBUG_OBJECT (core->object, "OMX_EventPortSettingsChanged"); /** @todo only on the relevant port. */ if (core->settings_changed_cb) { core->settings_changed_cb (core); } break; } case OMX_EventError: { core->omx_error = data_1; GST_ERROR_OBJECT (core->object, "unrecoverable error: %s (0x%lx)", omx_error_to_str (data_1), data_1); /* component might leave us waiting for buffers, unblock */ g_omx_core_flush_start (core); /* unlock wait_for_state */ g_mutex_lock (core->omx_state_mutex); g_cond_signal (core->omx_state_condition); g_mutex_unlock (core->omx_state_mutex); break; } default: break; } return OMX_ErrorNone; }
void g_omx_core_set_done (GOmxCore *core) { g_sem_up (core->done_sem); }
static OMX_ERRORTYPE EventHandler (OMX_HANDLETYPE omx_handle, OMX_PTR app_data, OMX_EVENTTYPE event, OMX_U32 data_1, OMX_U32 data_2, OMX_PTR event_data) { GOmxCore *core; core = (GOmxCore *) app_data; switch (event) { case OMX_EventCmdComplete: { OMX_COMMANDTYPE cmd; cmd = (OMX_COMMANDTYPE) data_1; GST_DEBUG_OBJECT (core->object, "OMX_EventCmdComplete: %d", cmd); switch (cmd) { case OMX_CommandStateSet: complete_change_state (core, data_2); break; case OMX_CommandFlush: g_sem_up (core->flush_sem); break; case OMX_CommandPortDisable: case OMX_CommandPortEnable: g_sem_up (core->port_sem); default: break; } break; } case OMX_EventBufferFlag: { GST_DEBUG_OBJECT (core->object, "OMX_EventBufferFlag"); if (data_2 & OMX_BUFFERFLAG_EOS) { g_omx_core_set_done (core); } break; } case OMX_EventPortSettingsChanged: { GST_DEBUG_OBJECT (core->object, "OMX_EventPortSettingsChanged"); /** @todo only on the relevant port. */ if (core->settings_changed_cb) { core->settings_changed_cb (core); } break; } case OMX_EventIndexSettingChanged: { GST_DEBUG_OBJECT (core->object, "OMX_EventIndexSettingsChanged"); if (core->index_settings_changed_cb) { core->index_settings_changed_cb (core, data_1, data_2); } break; } case OMX_EventError: { core->omx_error = data_1; GST_ERROR_OBJECT (core->object, "unrecoverable error: %s (0x%lx)", g_omx_error_to_str (data_1), data_1); /* component might leave us waiting for buffers, unblock */ g_omx_core_flush_start (core); /* unlock wait_for_state */ g_mutex_lock (core->omx_state_mutex); g_cond_signal (core->omx_state_condition); g_mutex_unlock (core->omx_state_mutex); break; } #ifdef USE_OMXTICORE case OMX_TI_EventBufferRefCount: { OMX_BUFFERHEADERTYPE *omx_buffer = (OMX_BUFFERHEADERTYPE *)data_1; GOmxPort *port = get_port (core, omx_buffer->nOutputPortIndex); GST_DEBUG_OBJECT (core->object, "unref: omx_buffer=%p, pAppPrivate=%p, pBuffer=%p", omx_buffer, omx_buffer->pAppPrivate, omx_buffer->pBuffer); g_mutex_lock (core->omx_state_mutex); omx_buffer->nFlags |= GST_BUFFERFLAG_UNREF_CHECK; g_mutex_unlock (core->omx_state_mutex); g_omx_port_push_buffer (port, omx_buffer); break; } #endif default: GST_WARNING_OBJECT (core->object, "unhandled event: %d", event); break; } return OMX_ErrorNone; }