encoding-profile: Recurse into nested container profiles and only add the final audio...
authorSebastian Dröge <sebastian@centricular.com>
Thu, 28 Apr 2016 08:21:47 +0000 (11:21 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 29 Apr 2016 07:12:06 +0000 (10:12 +0300)
If we e.g. have AVI with DV container with video/audio inside the DV
container, we can't handle this at this point with an encoding profile.
Instead of erroring out, flatten the container hierarchy.

https://bugzilla.gnome.org/show_bug.cgi?id=765708

gst-libs/gst/pbutils/encoding-profile.c

index 06814bb..5443996 100644 (file)
@@ -1517,6 +1517,21 @@ add_stream_to_profile (GstEncodingContainerProfile * profile,
     sprofile =
         (GstEncodingProfile *) gst_encoding_video_profile_new (caps, NULL,
         NULL, 0);
+  } else if (GST_IS_DISCOVERER_CONTAINER_INFO (sinfo)) {
+    GList *streams, *stream;
+    guint n_streams = 0;
+
+    streams =
+        gst_discoverer_container_info_get_streams (GST_DISCOVERER_CONTAINER_INFO
+        (sinfo));
+    for (stream = streams; stream; stream = stream->next) {
+      if (add_stream_to_profile (profile,
+              (GstDiscovererStreamInfo *) stream->data))
+        n_streams++;
+    }
+    gst_discoverer_stream_info_list_free (streams);
+
+    return n_streams != 0;
   } else {
     GST_WARNING ("Ignoring stream of type '%s'",
         g_type_name (G_OBJECT_TYPE (sinfo)));