playbin: Keep a reference to the playsink sinkpads
authorSebastian Dröge <sebastian@centricular.com>
Fri, 1 Aug 2014 13:00:46 +0000 (15:00 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 1 Aug 2014 13:00:46 +0000 (15:00 +0200)
Otherwise playsink might get shut down without us noticing
that our pad references are gone now.

Probably fixes https://bugzilla.gnome.org/show_bug.cgi?id=733165

gst/playback/gstplaybin2.c

index b717ac9..7b2c8cb 100644 (file)
@@ -3452,6 +3452,7 @@ no_more_pads_cb (GstElement * decodebin, GstSourceGroup * group)
       GST_DEBUG_OBJECT (playbin, "requesting new sink pad %d", combine->type);
       combine->sinkpad =
           gst_play_sink_request_pad (playbin->playsink, combine->type);
+      gst_object_ref (combine->sinkpad);
     } else if (combine->srcpad && combine->sinkpad) {
       GST_DEBUG_OBJECT (playbin, "refreshing new sink pad %d", combine->type);
       gst_play_sink_refresh_pad (playbin->playsink, combine->sinkpad,
@@ -3459,6 +3460,7 @@ no_more_pads_cb (GstElement * decodebin, GstSourceGroup * group)
     } else if (combine->sinkpad && combine->srcpad == NULL) {
       GST_DEBUG_OBJECT (playbin, "releasing sink pad %d", combine->type);
       gst_play_sink_release_pad (playbin->playsink, combine->sinkpad);
+      gst_object_unref (combine->sinkpad);
       combine->sinkpad = NULL;
     }
     if (combine->sinkpad && combine->srcpad &&
@@ -3564,6 +3566,7 @@ shutdown:
           combine->sinkpad =
               gst_play_sink_request_pad (playbin->playsink,
               GST_PLAY_SINK_TYPE_FLUSHING);
+          gst_object_ref (combine->sinkpad);
           res = gst_pad_link (combine->srcpad, combine->sinkpad);
           GST_DEBUG_OBJECT (playbin, "linked flushing, result: %d", res);
         }
@@ -5279,6 +5282,7 @@ deactivate_group (GstPlayBin * playbin, GstSourceGroup * group)
         /* release back */
         GST_LOG_OBJECT (playbin, "release sink pad");
         gst_play_sink_release_pad (playbin->playsink, combine->sinkpad);
+        gst_object_unref (combine->sinkpad);
         combine->sinkpad = NULL;
       }