videoencoder/decoder: Call reset() before start() too
authorSebastian Dröge <slomo@circular-chaos.org>
Thu, 25 Jul 2013 12:25:08 +0000 (14:25 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Thu, 25 Jul 2013 12:25:31 +0000 (14:25 +0200)
gst-libs/gst/video/gstvideodecoder.c
gst-libs/gst/video/gstvideoencoder.c

index 15e41d8..37337ae 100644 (file)
@@ -2033,6 +2033,10 @@ 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;
index 891d0ab..48b6b1c 100644 (file)
@@ -1365,6 +1365,9 @@ gst_video_encoder_change_state (GstElement * element, GstStateChange transition)
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       /* Initialize device/library if needed */
+      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;
@@ -1376,9 +1379,11 @@ gst_video_encoder_change_state (GstElement * element, GstStateChange transition)
 
   switch (transition) {
     case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_video_encoder_reset (encoder, TRUE);
       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);
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
       /* close device/library if needed */