static GstStateChangeReturn gst_xviddec_change_state (GstElement * element, GstStateChange transition) { GstXvidDec *dec = GST_XVIDDEC (element); GstStateChangeReturn ret; switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: if (!gst_xvid_init ()) return GST_STATE_CHANGE_FAILURE; break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); if (ret == GST_STATE_CHANGE_FAILURE) goto done; switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: gst_xviddec_flush_buffers (dec, FALSE); if (dec->handle) { gst_xviddec_unset (dec); } gst_xviddec_reset (dec); break; default: break; } done: return ret; }
static GstStateChangeReturn gst_xvidenc_change_state (GstElement * element, GstStateChange transition) { GstXvidEnc *xvidenc = GST_XVIDENC (element); GstStateChangeReturn ret; switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: if (!gst_xvid_init ()) return GST_STATE_CHANGE_FAILURE; break; case GST_STATE_CHANGE_READY_TO_PAUSED: xvidenc->delay = g_queue_new (); break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); if (ret == GST_STATE_CHANGE_FAILURE) goto done; switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: if (xvidenc->handle) { gst_xvidenc_flush_buffers (xvidenc, FALSE); xvid_encore (xvidenc->handle, XVID_ENC_DESTROY, NULL, NULL); xvidenc->handle = NULL; } g_queue_free (xvidenc->delay); xvidenc->delay = NULL; g_free (xvidenc->xframe_cache); xvidenc->xframe_cache = NULL; break; default: break; } done: return ret; }