interlace: Reset after changing state to READY
authorJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
Wed, 20 Oct 2021 22:31:24 +0000 (00:31 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 21 Oct 2021 10:50:17 +0000 (10:50 +0000)
Trying to reset before the pads have been deactivated races with the
streaming thread. There was also a buggy buffer clear leaving a dangling
`stored_frame` pointer around. Use `gst_interlace_reset` so this happens
properly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1039>

subprojects/gst-plugins-bad/gst/interlace/gstinterlace.c

index d40fbce..62bbf30 100644 (file)
@@ -1514,23 +1514,23 @@ static GstStateChangeReturn
 gst_interlace_change_state (GstElement * element, GstStateChange transition)
 {
   GstInterlace *interlace = GST_INTERLACE (element);
+  GstStateChangeReturn ret;
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
 
   switch (transition) {
     case GST_STATE_CHANGE_PAUSED_TO_READY:
       g_mutex_lock (&interlace->lock);
       interlace->src_fps_n = 0;
-      if (interlace->stored_frame) {
-        gst_buffer_unref (interlace->stored_frame);
-      }
       g_mutex_unlock (&interlace->lock);
-      /* why? */
-      //gst_interlace_reset (interlace);
+
+      gst_interlace_reset (interlace);
       break;
     default:
       break;
   }
 
-  return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  return ret;
 }
 
 static gboolean