diff options
author | longstone <zhibing.min@hotmail.com> | 2011-02-23 10:43:21 -0500 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2011-02-23 10:44:26 -0500 |
commit | 4acc94e97a9551d11ead29735e23283d71f1d4c2 (patch) | |
tree | 77b3c5c50457ac0e198fc5928a67999059206ed8 | |
parent | 22a3212e32b696028e21f00871f3cb48c044029d (diff) | |
download | ffmpeg-4acc94e97a9551d11ead29735e23283d71f1d4c2.tar.gz |
avienc: fix AVI stream index for files with >10 streams
Fixes issue 2563.
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
-rw-r--r-- | libavformat/avi.h | 1 | ||||
-rw-r--r-- | libavformat/avienc.c | 10 |
2 files changed, 9 insertions, 2 deletions
diff --git a/libavformat/avi.h b/libavformat/avi.h index f345c14760..b4e551971a 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 61af511350..e109269fa3 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;n<s->nb_streams;n++) { s->streams[n]->priv_data= av_mallocz(sizeof(AVIStream)); if(!s->streams[n]->priv_data) |