diff --git a/subprojects/gst-plugins-good/gst/y4m/gsty4mencode.c b/subprojects/gst-plugins-good/gst/y4m/gsty4mencode.c index 1bd3188883..c22528c9d4 100644 --- a/subprojects/gst-plugins-good/gst/y4m/gsty4mencode.c +++ b/subprojects/gst-plugins-good/gst/y4m/gsty4mencode.c @@ -75,11 +75,8 @@ GST_DEBUG_CATEGORY (y4menc_debug); static void gst_y4m_encode_reset (GstY4mEncode * filter); -static GstStateChangeReturn gst_y4m_encode_change_state (GstElement * element, - GstStateChange transition); - -static GstFlowReturn -gst_y4m_encode_handle_frame (GstVideoEncoder * encoder, +static gboolean gst_y4m_encode_start (GstVideoEncoder * encoder); +static GstFlowReturn gst_y4m_encode_handle_frame (GstVideoEncoder * encoder, GstVideoCodecFrame * frame); static gboolean gst_y4m_encode_set_format (GstVideoEncoder * encoder, GstVideoCodecState * state); @@ -96,8 +93,6 @@ gst_y4m_encode_class_init (GstY4mEncodeClass * klass) GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstVideoEncoderClass *venc_class = GST_VIDEO_ENCODER_CLASS (klass); - element_class->change_state = GST_DEBUG_FUNCPTR (gst_y4m_encode_change_state); - gst_element_class_add_static_pad_template (element_class, &y4mencode_src_factory); gst_element_class_add_static_pad_template (element_class, @@ -107,9 +102,10 @@ gst_y4m_encode_class_init (GstY4mEncodeClass * klass) "YUV4MPEG video encoder", "Codec/Encoder/Video", "Encodes a YUV frame into the yuv4mpeg format (mjpegtools)", "Wim Taymans <wim.taymans@gmail.com>"); + + venc_class->start = gst_y4m_encode_start; venc_class->set_format = gst_y4m_encode_set_format; venc_class->handle_frame = gst_y4m_encode_handle_frame; - } static void @@ -128,6 +124,14 @@ gst_y4m_encode_reset (GstY4mEncode * filter) gst_video_info_init (&filter->info); } +static gboolean +gst_y4m_encode_start (GstVideoEncoder * encoder) +{ + gst_y4m_encode_reset (GST_Y4M_ENCODE (encoder)); + + return TRUE; +} + static gboolean gst_y4m_encode_set_format (GstVideoEncoder * encoder, GstVideoCodecState * state) @@ -207,7 +211,7 @@ gst_y4m_encode_set_format (GstVideoEncoder * encoder, gst_static_pad_template_get_caps (&y4mencode_src_factory), state); gst_video_codec_state_unref (output_state); - return TRUE; + return gst_video_encoder_negotiate (encoder); invalid_format: { @@ -387,36 +391,6 @@ not_negotiated: } } -static GstStateChangeReturn -gst_y4m_encode_change_state (GstElement * element, GstStateChange transition) -{ - GstY4mEncode *filter = GST_Y4M_ENCODE (element); - GstStateChangeReturn ret; - - switch (transition) { - case GST_STATE_CHANGE_NULL_TO_READY: - case GST_STATE_CHANGE_READY_TO_PAUSED: - break; - default: - break; - } - - ret = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, change_state, - (element, transition), GST_STATE_CHANGE_SUCCESS); - if (ret != GST_STATE_CHANGE_SUCCESS) - return ret; - - switch (transition) { - case GST_STATE_CHANGE_PAUSED_TO_READY: - gst_y4m_encode_reset (filter); - break; - default: - break; - } - - return GST_STATE_CHANGE_SUCCESS; -} - static gboolean plugin_init (GstPlugin * plugin) {