static GstStateChangeReturn gst_auto_video_sink_change_state (GstElement * element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstAutoVideoSink *sink = GST_AUTO_VIDEO_SINK (element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: if (!gst_auto_video_sink_detect (sink)) return GST_STATE_CHANGE_FAILURE; break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_READY_TO_NULL: gst_auto_video_sink_reset (sink); break; default: break; } return ret; }
static void gst_auto_video_sink_init (GstAutoVideoSink * sink) { sink->pad = gst_ghost_pad_new_no_target ("sink", GST_PAD_SINK); gst_element_add_pad (GST_ELEMENT (sink), sink->pad); gst_auto_video_sink_reset (sink); /* set the default raw video caps */ sink->filter_caps = gst_static_caps_get (&raw_caps); /* mark as sink */ GST_OBJECT_FLAG_SET (sink, GST_ELEMENT_FLAG_SINK); }