diff --git a/libavformat/utils.c b/libavformat/utils.c index 9beec720b8..fc373479de 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -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; jnb_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; kprograms[j]->nb_stream_indexes; k++) + for(k=0; kprograms[j]->nb_stream_indexes; k++) { dump_stream_format(ic, ic->programs[j]->stream_index[k], index, is_output); - } - } else { - for(i=0;inb_streams;i++) - dump_stream_format(ic, i, index, is_output); + 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;inb_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