comparison parser.c @ 2777:09108466b7d0 libavcodec

off by 1 error bugfix avoid adding duplicate global headers to the bitstream
author michael
date Wed, 29 Jun 2005 08:41:01 +0000
parents 1394b45a7bf4
children 45ccf6842c34
comparison
equal deleted inserted replaced
2776:930e56f92c57 2777:09108466b7d0
140 index = 0; 140 index = 0;
141 s->cur_offset += index; 141 s->cur_offset += index;
142 return index; 142 return index;
143 } 143 }
144 144
145 /**
146 *
147 * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed
148 */
145 int av_parser_change(AVCodecParserContext *s, 149 int av_parser_change(AVCodecParserContext *s,
146 AVCodecContext *avctx, 150 AVCodecContext *avctx,
147 uint8_t **poutbuf, int *poutbuf_size, 151 uint8_t **poutbuf, int *poutbuf_size,
148 const uint8_t *buf, int buf_size, int keyframe){ 152 const uint8_t *buf, int buf_size, int keyframe){
149 153
150 if(s && s->parser->split){ 154 if(s && s->parser->split){
151 if((avctx->flags & CODEC_FLAG_GLOBAL_HEADER) && !(avctx->flags2 & CODEC_FLAG2_LOCAL_HEADER)){ 155 if((avctx->flags & CODEC_FLAG_GLOBAL_HEADER) || (avctx->flags2 & CODEC_FLAG2_LOCAL_HEADER)){
152 int i= s->parser->split(avctx, buf, buf_size); 156 int i= s->parser->split(avctx, buf, buf_size);
153 buf += i; 157 buf += i;
154 buf_size -= i; 158 buf_size -= i;
155 } 159 }
156 } 160 }
164 int size= buf_size + avctx->extradata_size; 168 int size= buf_size + avctx->extradata_size;
165 *poutbuf_size= size; 169 *poutbuf_size= size;
166 *poutbuf= av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); 170 *poutbuf= av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
167 171
168 memcpy(*poutbuf, avctx->extradata, avctx->extradata_size); 172 memcpy(*poutbuf, avctx->extradata, avctx->extradata_size);
169 memcpy((*poutbuf) + avctx->extradata_size, buf, buf_size); 173 memcpy((*poutbuf) + avctx->extradata_size, buf, buf_size + FF_INPUT_BUFFER_PADDING_SIZE);
170 return 1; 174 return 1;
171 } 175 }
172 } 176 }
173 177
174 return 0; 178 return 0;
454 uint32_t state= -1; 458 uint32_t state= -1;
455 459
456 for(i=0; i<buf_size; i++){ 460 for(i=0; i<buf_size; i++){
457 state= (state<<8) | buf[i]; 461 state= (state<<8) | buf[i];
458 if(state != 0x1B3 && state != 0x1B5 && state < 0x200 && state >= 0x100) 462 if(state != 0x1B3 && state != 0x1B5 && state < 0x200 && state >= 0x100)
459 return i-4; 463 return i-3;
460 } 464 }
461 return 0; 465 return 0;
462 } 466 }
463 467
464 void ff_parse_close(AVCodecParserContext *s) 468 void ff_parse_close(AVCodecParserContext *s)
546 uint32_t state= -1; 550 uint32_t state= -1;
547 551
548 for(i=0; i<buf_size; i++){ 552 for(i=0; i<buf_size; i++){
549 state= (state<<8) | buf[i]; 553 state= (state<<8) | buf[i];
550 if(state == 0x1B3 || state == 0x1B6) 554 if(state == 0x1B3 || state == 0x1B6)
551 return i-4; 555 return i-3;
552 } 556 }
553 return 0; 557 return 0;
554 } 558 }
555 559
556 /*************************/ 560 /*************************/