In dump_format, print streams not associated with any program.
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>
Mon, 19 Oct 2009 02:12:10 +0000 (02:12 +0000)
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>
Mon, 19 Oct 2009 02:12:10 +0000 (02:12 +0000)
Fixes issue #1366.

Originally committed as revision 20306 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/utils.c

index 9beec720b8940a7acba3524ea1e42b5d84779c08..fc373479de0130652c61a9c8b42daca349495fc5 100644 (file)
@@ -2902,6 +2902,9 @@ void dump_format(AVFormatContext *ic,
                  int is_output)
 {
     int i;
+    uint8_t *printed = av_mallocz(ic->nb_streams);
+    if (ic->nb_streams && !printed)
+        return;
 
     av_log(NULL, AV_LOG_INFO, "%s #%d, %s, %s '%s':\n",
             is_output ? "Output" : "Input",
@@ -2940,19 +2943,25 @@ void dump_format(AVFormatContext *ic,
         av_log(NULL, AV_LOG_INFO, "\n");
     }
     if(ic->nb_programs) {
-        int j, k;
+        int j, k, total = 0;
         for(j=0; j<ic->nb_programs; j++) {
             AVMetadataTag *name = av_metadata_get(ic->programs[j]->metadata,
                                                   "name", NULL, 0);
             av_log(NULL, AV_LOG_INFO, "  Program %d %s\n", ic->programs[j]->id,
                    name ? name->value : "");
-            for(k=0; k<ic->programs[j]->nb_stream_indexes; k++)
+            for(k=0; k<ic->programs[j]->nb_stream_indexes; k++) {
                 dump_stream_format(ic, ic->programs[j]->stream_index[k], index, is_output);
-         }
-    } else {
+                printed[ic->programs[j]->stream_index[k]] = 1;
+            }
+            total += ic->programs[j]->nb_stream_indexes;
+        }
+        if (total < ic->nb_streams)
+            av_log(NULL, AV_LOG_INFO, "  No Program\n");
+    }
         for(i=0;i<ic->nb_streams;i++)
+            if (!printed[i])
             dump_stream_format(ic, i, index, is_output);
-    }
+
     if (ic->metadata) {
         AVMetadataTag *tag=NULL;
         av_log(NULL, AV_LOG_INFO, "  Metadata\n");
@@ -2960,7 +2969,7 @@ void dump_format(AVFormatContext *ic,
             av_log(NULL, AV_LOG_INFO, "    %-16s: %s\n", tag->key, tag->value);
         }
     }
-
+    av_free(printed);
 }
 
 #if LIBAVFORMAT_VERSION_MAJOR < 53