add new streams API without MAX_STREAMS limit
authorAurelien Jacobs <aurel@gnuage.org>
Wed, 6 Oct 2010 20:56:14 +0000 (20:56 +0000)
committerAurelien Jacobs <aurel@gnuage.org>
Wed, 6 Oct 2010 20:56:14 +0000 (20:56 +0000)
(disabled until next major bump)

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

libavformat/avformat.h
libavformat/utils.c

index d55a446..4a46a36 100644 (file)
@@ -672,7 +672,11 @@ typedef struct AVFormatContext {
     void *priv_data;
     ByteIOContext *pb;
     unsigned int nb_streams;
     void *priv_data;
     ByteIOContext *pb;
     unsigned int nb_streams;
+#if LIBAVFORMAT_VERSION_MAJOR < 53
     AVStream *streams[MAX_STREAMS];
     AVStream *streams[MAX_STREAMS];
+#else
+    AVStream **streams;
+#endif
     char filename[1024]; /**< input or output filename */
     /* stream info */
     int64_t timestamp;
     char filename[1024]; /**< input or output filename */
     /* stream info */
     int64_t timestamp;
index 2776a0f..73f89a0 100644 (file)
@@ -2543,11 +2543,21 @@ AVStream *av_new_stream(AVFormatContext *s, int id)
 {
     AVStream *st;
     int i;
 {
     AVStream *st;
     int i;
+#if LIBAVFORMAT_VERSION_MAJOR >= 53
+    AVStream **streams;
 
 
+    if (s->nb_streams >= INT_MAX/sizeof(*streams))
+        return NULL;
+    streams = av_realloc(s->streams, (s->nb_streams + 1) * sizeof(*streams));
+    if (!streams)
+        return NULL;
+    s->streams = streams;
+#else
     if (s->nb_streams >= MAX_STREAMS){
         av_log(s, AV_LOG_ERROR, "Too many streams\n");
         return NULL;
     }
     if (s->nb_streams >= MAX_STREAMS){
         av_log(s, AV_LOG_ERROR, "Too many streams\n");
         return NULL;
     }
+#endif
 
     st = av_mallocz(sizeof(AVStream));
     if (!st)
 
     st = av_mallocz(sizeof(AVStream));
     if (!st)