static gboolean gst_chop_my_data_sink_event (GstPad * pad, GstEvent * event) { GstFlowReturn ret = GST_FLOW_OK; gboolean res; GstChopMyData *chopmydata; chopmydata = GST_CHOP_MY_DATA (gst_pad_get_parent (pad)); GST_DEBUG_OBJECT (chopmydata, "event"); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_START: ret = gst_chop_my_data_process (chopmydata, TRUE); res = gst_pad_push_event (chopmydata->srcpad, event); break; case GST_EVENT_FLUSH_STOP: res = gst_pad_push_event (chopmydata->srcpad, event); break; case GST_EVENT_NEWSEGMENT: res = gst_pad_push_event (chopmydata->srcpad, event); break; case GST_EVENT_EOS: ret = gst_chop_my_data_process (chopmydata, TRUE); res = gst_pad_push_event (chopmydata->srcpad, event); break; default: res = gst_pad_push_event (chopmydata->srcpad, event); break; } gst_object_unref (chopmydata); return TRUE; }
static gboolean gst_chop_my_data_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { gboolean res; GstChopMyData *chopmydata; chopmydata = GST_CHOP_MY_DATA (parent); GST_DEBUG_OBJECT (chopmydata, "event"); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_START: res = gst_pad_push_event (chopmydata->srcpad, event); break; case GST_EVENT_FLUSH_STOP: gst_adapter_clear (chopmydata->adapter); res = gst_pad_push_event (chopmydata->srcpad, event); break; case GST_EVENT_SEGMENT: res = gst_pad_push_event (chopmydata->srcpad, event); break; case GST_EVENT_EOS: gst_chop_my_data_process (chopmydata, TRUE); res = gst_pad_push_event (chopmydata->srcpad, event); break; default: res = gst_pad_push_event (chopmydata->srcpad, event); break; } return res; }
void gst_chop_my_data_finalize (GObject * object) { GstChopMyData *chopmydata; g_return_if_fail (GST_IS_CHOP_MY_DATA (object)); chopmydata = GST_CHOP_MY_DATA (object); /* clean up object here */ G_OBJECT_CLASS (parent_class)->finalize (object); }
void gst_chop_my_data_dispose (GObject * object) { GstChopMyData *chopmydata; g_return_if_fail (GST_IS_CHOP_MY_DATA (object)); chopmydata = GST_CHOP_MY_DATA (object); /* clean up as possible. may be called multiple times */ G_OBJECT_CLASS (parent_class)->dispose (object); }
static GstFlowReturn gst_chop_my_data_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) { GstChopMyData *chopmydata; GstFlowReturn ret; chopmydata = GST_CHOP_MY_DATA (parent); GST_DEBUG_OBJECT (chopmydata, "chain"); gst_adapter_push (chopmydata->adapter, buffer); ret = gst_chop_my_data_process (chopmydata, FALSE); return ret; }
static GstStateChangeReturn gst_chop_my_data_change_state (GstElement * element, GstStateChange transition) { GstChopMyData *chopmydata; GstStateChangeReturn ret; chopmydata = GST_CHOP_MY_DATA (element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: GST_OBJECT_LOCK (chopmydata); chopmydata->adapter = gst_adapter_new (); chopmydata->rand = g_rand_new (); chopmydata->next_size = 0; GST_OBJECT_UNLOCK (chopmydata); break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_READY: GST_OBJECT_LOCK (chopmydata); g_object_unref (chopmydata->adapter); chopmydata->adapter = NULL; g_rand_free (chopmydata->rand); GST_OBJECT_UNLOCK (chopmydata); break; case GST_STATE_CHANGE_READY_TO_NULL: break; default: break; } return ret; }
static gboolean gst_chop_my_data_src_event (GstPad * pad, GstObject * parent, GstEvent * event) { gboolean res; GstChopMyData *chopmydata; chopmydata = GST_CHOP_MY_DATA (parent); GST_DEBUG_OBJECT (chopmydata, "event"); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEEK: res = gst_pad_push_event (chopmydata->sinkpad, event); break; default: res = gst_pad_push_event (chopmydata->sinkpad, event); break; } return res; }
void gst_chop_my_data_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) { GstChopMyData *chopmydata; g_return_if_fail (GST_IS_CHOP_MY_DATA (object)); chopmydata = GST_CHOP_MY_DATA (object); switch (property_id) { case PROP_MAX_SIZE: g_value_set_int (value, chopmydata->max_size); break; case PROP_MIN_SIZE: g_value_set_int (value, chopmydata->min_size); break; case PROP_STEP_SIZE: g_value_set_int (value, chopmydata->step_size); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }