From 047abdc944e3afe6555b5ad4fe37d5860cbfcb8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 26 Jul 2013 10:22:32 +0200 Subject: [PATCH] videodecoder/encoder: Call reset() always between start() and stop() and never outside --- gst-libs/gst/video/gstvideodecoder.c | 12 +++++------- gst-libs/gst/video/gstvideoencoder.c | 8 ++++---- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c index 37337aee82..398c039626 100644 --- a/gst-libs/gst/video/gstvideodecoder.c +++ b/gst-libs/gst/video/gstvideodecoder.c @@ -2033,13 +2033,12 @@ gst_video_decoder_change_state (GstElement * element, GstStateChange transition) goto open_failed; break; case GST_STATE_CHANGE_READY_TO_PAUSED: - GST_VIDEO_DECODER_STREAM_LOCK (decoder); - gst_video_decoder_reset (decoder, TRUE); - GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); - /* 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); + GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); break; default: break; @@ -2049,12 +2048,11 @@ gst_video_decoder_change_state (GstElement * element, GstStateChange transition) switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: - if (decoder_class->stop && !decoder_class->stop (decoder)) - goto stop_failed; - GST_VIDEO_DECODER_STREAM_LOCK (decoder); gst_video_decoder_reset (decoder, TRUE); GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); + if (decoder_class->stop && !decoder_class->stop (decoder)) + goto stop_failed; break; case GST_STATE_CHANGE_READY_TO_NULL: /* close device/library if needed */ diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index 48b6b1c916..58a6ab7a64 100644 --- a/gst-libs/gst/video/gstvideoencoder.c +++ b/gst-libs/gst/video/gstvideoencoder.c @@ -1365,11 +1365,11 @@ gst_video_encoder_change_state (GstElement * element, GstStateChange transition) 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); - if (encoder_class->start && !encoder_class->start (encoder)) - goto start_failed; break; default: break; @@ -1379,11 +1379,11 @@ gst_video_encoder_change_state (GstElement * element, GstStateChange transition) switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: - if (encoder_class->stop && !encoder_class->stop (encoder)) - goto stop_failed; GST_VIDEO_ENCODER_STREAM_LOCK (encoder); gst_video_encoder_reset (encoder, TRUE); GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); + if (encoder_class->stop && !encoder_class->stop (encoder)) + goto stop_failed; break; case GST_STATE_CHANGE_READY_TO_NULL: /* close device/library if needed */