From 87d6c265a85bfc69d21f71c87c820179f3a246f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 22 Dec 2014 11:38:20 +0100 Subject: [PATCH] video{en,de}coder: Call reset() before the start() vfunc This makes sure that the element is in the same state before start() is called the very first time and every future call after the element was used already. Also it ensure that we always have a clean state before start(), cleaned the same way in every case. --- gst-libs/gst/video/gstvideodecoder.c | 7 ++++--- gst-libs/gst/video/gstvideoencoder.c | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c index 74717baf3c..9272d0f9b0 100644 --- a/gst-libs/gst/video/gstvideodecoder.c +++ b/gst-libs/gst/video/gstvideodecoder.c @@ -2275,12 +2275,13 @@ gst_video_decoder_change_state (GstElement * element, GstStateChange transition) goto open_failed; break; case GST_STATE_CHANGE_READY_TO_PAUSED: - /* Initialize device/library if needed */ - if (decoder_class->start && !decoder_class->start (decoder)) - goto start_failed; GST_VIDEO_DECODER_STREAM_LOCK (decoder); gst_video_decoder_reset (decoder, TRUE, TRUE); GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); + + /* Initialize device/library if needed */ + if (decoder_class->start && !decoder_class->start (decoder)) + goto start_failed; break; default: break; diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index 5028ccf296..56df63374e 100644 --- a/gst-libs/gst/video/gstvideoencoder.c +++ b/gst-libs/gst/video/gstvideoencoder.c @@ -1411,12 +1411,13 @@ gst_video_encoder_change_state (GstElement * element, GstStateChange transition) goto open_failed; break; case GST_STATE_CHANGE_READY_TO_PAUSED: - /* Initialize device/library if needed */ - if (encoder_class->start && !encoder_class->start (encoder)) - goto start_failed; GST_VIDEO_ENCODER_STREAM_LOCK (encoder); gst_video_encoder_reset (encoder, TRUE); GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); + + /* Initialize device/library if needed */ + if (encoder_class->start && !encoder_class->start (encoder)) + goto start_failed; break; default: break;