adaptivedemux: add utility function to get stream from pad
authorThiago Santos <thiagoss@osg.samsung.com>
Wed, 27 Jan 2016 02:43:24 +0000 (23:43 -0300)
committerThiago Santos <thiagoss@osg.samsung.com>
Thu, 4 Feb 2016 17:03:55 +0000 (14:03 -0300)
Simplifies the code a bit and avoid repeating this
common operation

gst-libs/gst/adaptivedemux/gstadaptivedemux.c
gst-libs/gst/adaptivedemux/gstadaptivedemux.h

index 91d0be56e3513fbbb2d5f3c6a74c77ba2e6708f8..c21584f6f409a48b101e52d77e364b38f82a0669 100644 (file)
@@ -1077,6 +1077,21 @@ gst_adaptive_demux_stream_new (GstAdaptiveDemux * demux, GstPad * pad)
   return stream;
 }
 
+GstAdaptiveDemuxStream *
+gst_adaptive_demux_find_stream_for_pad (GstAdaptiveDemux * demux, GstPad * pad)
+{
+  GList *iter;
+
+  for (iter = demux->streams; iter; iter = g_list_next (iter)) {
+    GstAdaptiveDemuxStream *stream = iter->data;
+    if (stream->pad == pad) {
+      return stream;
+    }
+  }
+  g_assert_not_reached ();
+  return NULL;
+}
+
 /* must be called with manifest_lock taken.
  * It will temporarily drop the manifest_lock in order to join the task.
  * It will join only the old_streams (the demux->streams are joined by
@@ -1354,26 +1369,23 @@ gst_adaptive_demux_src_event (GstPad * pad, GstObject * parent,
       return ret;
     }
     case GST_EVENT_RECONFIGURE:{
-      GList *iter;
+      GstAdaptiveDemuxStream *stream;
 
       GST_MANIFEST_LOCK (demux);
-
-      for (iter = demux->streams; iter; iter = g_list_next (iter)) {
-        GstAdaptiveDemuxStream *stream = iter->data;
-
-        if (stream->pad == pad) {
-          if (stream->last_ret == GST_FLOW_NOT_LINKED) {
-            stream->last_ret = GST_FLOW_OK;
-            stream->restart_download = TRUE;
-            stream->need_header = TRUE;
-            stream->discont = TRUE;
-            GST_DEBUG_OBJECT (stream->pad, "Restarting download loop");
-            gst_task_start (stream->download_task);
-          }
-          gst_event_unref (event);
-          GST_MANIFEST_UNLOCK (demux);
-          return TRUE;
+      stream = gst_adaptive_demux_find_stream_for_pad (demux, pad);
+
+      if (stream) {
+        if (stream->last_ret == GST_FLOW_NOT_LINKED) {
+          stream->last_ret = GST_FLOW_OK;
+          stream->restart_download = TRUE;
+          stream->need_header = TRUE;
+          stream->discont = TRUE;
+          GST_DEBUG_OBJECT (stream->pad, "Restarting download loop");
+          gst_task_start (stream->download_task);
         }
+        gst_event_unref (event);
+        GST_MANIFEST_UNLOCK (demux);
+        return TRUE;
       }
       GST_MANIFEST_UNLOCK (demux);
     }
index b5f21f05e3e196fb5b2c9a94a46cdf7a15ed392a..e7ce227833d1bcc84993984c63d7cd2353a89f0b 100644 (file)
@@ -430,6 +430,8 @@ void     gst_adaptive_demux_set_stream_struct_size (GstAdaptiveDemux * demux,
 
 GstAdaptiveDemuxStream *gst_adaptive_demux_stream_new (GstAdaptiveDemux * demux,
                                                        GstPad * pad);
+GstAdaptiveDemuxStream *gst_adaptive_demux_find_stream_for_pad (GstAdaptiveDemux * demux,
+                                                                GstPad * pad);
 void gst_adaptive_demux_stream_set_caps (GstAdaptiveDemuxStream * stream,
                                          GstCaps * caps);
 void gst_adaptive_demux_stream_set_tags (GstAdaptiveDemuxStream * stream,