[SCM] libav/experimental: API extension: AVProgram now has an array (stream_index) containing the indexes of the streams in AVFormatContext

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:08:34 UTC 2013


The following commit has been merged in the experimental branch:
commit 526efa105349fbae87b0d0afcd9825575524e985
Author: Nico Sabbi <nicola.sabbi at poste.it>
Date:   Sat Oct 20 08:25:13 2007 +0000

    API extension: AVProgram now has an array (stream_index) containing the indexes of the streams in AVFormatContext
    
    Originally committed as revision 10819 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index dbbb9b4..2897188 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -21,8 +21,8 @@
 #ifndef FFMPEG_AVFORMAT_H
 #define FFMPEG_AVFORMAT_H
 
-#define LIBAVFORMAT_VERSION_INT ((51<<16)+(15<<8)+0)
-#define LIBAVFORMAT_VERSION     51.15.0
+#define LIBAVFORMAT_VERSION_INT ((51<<16)+(16<<8)+0)
+#define LIBAVFORMAT_VERSION     51.16.0
 #define LIBAVFORMAT_BUILD       LIBAVFORMAT_VERSION_INT
 
 #define LIBAVFORMAT_IDENT       "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
@@ -353,6 +353,8 @@ typedef struct AVProgram {
     char           *name;          ///< Service name for DVB streams
     int            flags;
     enum AVDiscard discard;        ///< selects which program to discard and which to feed to the caller
+    unsigned int   *stream_index;
+    unsigned int   nb_stream_indexes;
 } AVProgram;
 
 #define AVFMTCTX_NOHEADER      0x0001 /**< signal that no header is present
diff --git a/libavformat/utils.c b/libavformat/utils.c
index bc32850..d1480a2 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2067,6 +2067,7 @@ void av_close_input_file(AVFormatContext *s)
     for(i=s->nb_programs-1; i>=0; i--) {
         av_freep(&s->programs[i]->provider_name);
         av_freep(&s->programs[i]->name);
+        av_freep(&s->programs[i]->stream_index);
         av_freep(&s->programs[i]);
     }
     flush_packet_queue(s);
@@ -2483,6 +2484,29 @@ fail:
     return ret;
 }
 
+void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx)
+{
+    int i, j;
+    AVProgram *program=NULL;
+    void *tmp;
+
+    for(i=0; i<ac->nb_programs; i++){
+        if(ac->programs[i]->id != progid)
+            continue;
+        program = ac->programs[i];
+        for(j=0; j<program->nb_stream_indexes; j++)
+            if(program->stream_index[j] == idx)
+                return;
+
+        tmp = av_realloc(program->stream_index, sizeof(unsigned int)*(program->nb_stream_indexes+1));
+        if(!tmp)
+            return;
+        program->stream_index = tmp;
+        program->stream_index[program->nb_stream_indexes++] = idx;
+        return;
+    }
+}
+
 /* "user interface" functions */
 static void dump_stream_format(AVFormatContext *ic, int i, int index, char *buf, int is_output)
 {
@@ -2554,6 +2578,16 @@ void dump_format(AVFormatContext *ic,
         }
         av_log(NULL, AV_LOG_INFO, "\n");
     }
+    if(ic->nb_programs) {
+        int j, k;
+        for(j=0; j<ic->nb_programs; j++) {
+            av_log(NULL, AV_LOG_INFO, "  Program %d", ic->programs[j]->id);
+            if(ic->programs[j]->name)
+                av_log(NULL, AV_LOG_INFO, " \"%s\"\n", ic->programs[j]->name);
+            for(k=0; k<ic->programs[j]->nb_stream_indexes; k++)
+                dump_stream_format(ic, ic->programs[j]->stream_index[k], index, buf, is_output);
+         }
+    } else
     for(i=0;i<ic->nb_streams;i++)
         dump_stream_format(ic, i, index, buf, is_output);
 }

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list