static gboolean stop (GstBaseSink *gst_base) { GstOmxBaseSink *self; self = GST_OMX_BASE_SINK (gst_base); GST_LOG_OBJECT (self, "begin"); g_omx_core_finish (self->gomx); g_omx_core_deinit (self->gomx); if (self->gomx->omx_error) return GST_STATE_CHANGE_FAILURE; GST_LOG_OBJECT (self, "end"); return TRUE; }
static GstStateChangeReturn change_state (GstElement *element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstOmxBaseFilter *self; self = GST_OMX_BASE_FILTER (element); GST_LOG_OBJECT (self, "begin"); GST_INFO_OBJECT (self, "changing state %s - %s", gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)), gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition))); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: g_omx_core_init (self->gomx, self->omx_library, self->omx_component); if (self->gomx->omx_error) return GST_STATE_CHANGE_FAILURE; break; case GST_STATE_CHANGE_PAUSED_TO_READY: if (self->initialized) { g_omx_port_finish (self->in_port); g_omx_port_finish (self->out_port); } break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); if (ret == GST_STATE_CHANGE_FAILURE) return ret; switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_READY: if (self->initialized) { g_omx_core_finish (self->gomx); self->initialized = FALSE; } break; case GST_STATE_CHANGE_READY_TO_NULL: g_omx_core_deinit (self->gomx); if (self->gomx->omx_error) return GST_STATE_CHANGE_FAILURE; break; default: break; } GST_LOG_OBJECT (self, "end"); return ret; }