From 4acc94e97a9551d11ead29735e23283d71f1d4c2 Mon Sep 17 00:00:00 2001 From: longstone Date: Wed, 23 Feb 2011 10:43:21 -0500 Subject: [PATCH] avienc: fix AVI stream index for files with >10 streams Fixes issue 2563. Signed-off-by: Ronald S. Bultje --- libavformat/avi.h | 1 + libavformat/avienc.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/libavformat/avi.h b/libavformat/avi.h index f345c14..b4e5519 100644 --- a/libavformat/avi.h +++ b/libavformat/avi.h @@ -32,6 +32,7 @@ #define AVI_MAX_RIFF_SIZE 0x40000000LL #define AVI_MASTER_INDEX_SIZE 256 +#define AVI_MAX_STREAM_COUNT 100 /* index flags */ #define AVIIF_INDEX 0x10 diff --git a/libavformat/avienc.c b/libavformat/avienc.c index 61af511..e109269 100644 --- a/libavformat/avienc.c +++ b/libavformat/avienc.c @@ -85,8 +85,8 @@ static int64_t avi_start_new_riff(AVFormatContext *s, AVIOContext *pb, static char* avi_stream2fourcc(char* tag, int index, enum AVMediaType type) { - tag[0] = '0'; - tag[1] = '0' + index; + tag[0] = '0' + index/10; + tag[1] = '0' + index%10; if (type == AVMEDIA_TYPE_VIDEO) { tag[2] = 'd'; tag[3] = 'c'; @@ -158,6 +158,12 @@ static int avi_write_header(AVFormatContext *s) int64_t list1, list2, strh, strf; AVMetadataTag *t = NULL; + if (s->nb_streams > AVI_MAX_STREAM_COUNT) { + av_log(s, AV_LOG_ERROR, "AVI does not support >%d streams\n", + AVI_MAX_STREAM_COUNT); + return -1; + } + for(n=0;nnb_streams;n++) { s->streams[n]->priv_data= av_mallocz(sizeof(AVIStream)); if(!s->streams[n]->priv_data) -- 2.7.4