static void mpegpsmux_release_pad (GstElement * element, GstPad * pad) { /* unref pad data (and codec data) */ MpegPsMux *mux = GST_MPEG_PSMUX (element); MpegPsPadData *pad_data = NULL; GST_DEBUG_OBJECT (mux, "Pad %" GST_PTR_FORMAT " being released", pad); /* Get the MpegPsPadData out of the pad */ GST_OBJECT_LOCK (pad); pad_data = (MpegPsPadData *) gst_pad_get_element_private (pad); if (G_LIKELY (pad_data)) { /* Free codec data reference if any */ if (pad_data->codec_data) { GST_DEBUG_OBJECT (element, "releasing codec_data reference"); gst_buffer_unref (pad_data->codec_data); pad_data->codec_data = NULL; } } GST_OBJECT_UNLOCK (pad); gst_collect_pads_remove_pad (mux->collect, pad); }
static GstStateChangeReturn mpegpsmux_change_state (GstElement * element, GstStateChange transition) { /* control the collect pads */ MpegPsMux *mux = GST_MPEG_PSMUX (element); GstStateChangeReturn ret; switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: gst_collect_pads_start (mux->collect); break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: break; case GST_STATE_CHANGE_PAUSED_TO_READY: gst_collect_pads_stop (mux->collect); break; case GST_STATE_CHANGE_READY_TO_NULL: break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { default: break; } return ret; }
static void gst_mpegpsmux_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { MpegPsMux *mux = GST_MPEG_PSMUX (object); switch (prop_id) { case PROP_AGGREGATE_GOPS: g_value_set_boolean (value, mux->aggregate_gops); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }