diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2005-06-29 08:41:01 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2005-06-29 08:41:01 +0000 |
commit | 73480a1552c313b46737e81053250fd86b2b4085 (patch) | |
tree | ead627446c5ea76e97cdecf8e3d8d7a2d2e047e4 /libavcodec/parser.c | |
parent | c35afa2f57d88b3b9649896231b87e444db07293 (diff) | |
download | ffmpeg-73480a1552c313b46737e81053250fd86b2b4085.tar.gz |
off by 1 error bugfix
avoid adding duplicate global headers to the bitstream
Originally committed as revision 4410 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/parser.c')
-rw-r--r-- | libavcodec/parser.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libavcodec/parser.c b/libavcodec/parser.c index 88c57096d4..280bb45f57 100644 --- a/libavcodec/parser.c +++ b/libavcodec/parser.c @@ -142,13 +142,17 @@ int av_parser_parse(AVCodecParserContext *s, return index; } +/** + * + * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed + */ int av_parser_change(AVCodecParserContext *s, AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int keyframe){ if(s && s->parser->split){ - if((avctx->flags & CODEC_FLAG_GLOBAL_HEADER) && !(avctx->flags2 & CODEC_FLAG2_LOCAL_HEADER)){ + if((avctx->flags & CODEC_FLAG_GLOBAL_HEADER) || (avctx->flags2 & CODEC_FLAG2_LOCAL_HEADER)){ int i= s->parser->split(avctx, buf, buf_size); buf += i; buf_size -= i; @@ -166,7 +170,7 @@ int av_parser_change(AVCodecParserContext *s, *poutbuf= av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); memcpy(*poutbuf, avctx->extradata, avctx->extradata_size); - memcpy((*poutbuf) + avctx->extradata_size, buf, buf_size); + memcpy((*poutbuf) + avctx->extradata_size, buf, buf_size + FF_INPUT_BUFFER_PADDING_SIZE); return 1; } } @@ -456,7 +460,7 @@ static int mpegvideo_split(AVCodecContext *avctx, for(i=0; i<buf_size; i++){ state= (state<<8) | buf[i]; if(state != 0x1B3 && state != 0x1B5 && state < 0x200 && state >= 0x100) - return i-4; + return i-3; } return 0; } @@ -548,7 +552,7 @@ static int mpeg4video_split(AVCodecContext *avctx, for(i=0; i<buf_size; i++){ state= (state<<8) | buf[i]; if(state == 0x1B3 || state == 0x1B6) - return i-4; + return i-3; } return 0; } |