Originally committed as revision 12759 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
@@ -44,13 +44,19 @@ int ff_aac_ac3_parse(AVCodecParserContext *s1, | |||||
if((len=s->sync(s->state, s, &s->need_next_header, &s->new_frame_start))) | if((len=s->sync(s->state, s, &s->need_next_header, &s->new_frame_start))) | ||||
break; | break; | ||||
} | } | ||||
i-= s->header_size; | |||||
i-= s->header_size -1; | |||||
if(len>0){ | if(len>0){ | ||||
s->remaining_size = len + i; | s->remaining_size = len + i; | ||||
if(pc->index+i > 0 && s->new_frame_start){ | if(pc->index+i > 0 && s->new_frame_start){ | ||||
s->remaining_size -= i; // remaining_size=len | s->remaining_size -= i; // remaining_size=len | ||||
output_frame: | output_frame: | ||||
if(!s->frame_in_buffer && 0){ | |||||
s->frame_in_buffer=1; | |||||
buf+=i; | |||||
buf_size-=i; | |||||
continue; | |||||
} | |||||
ff_combine_frame(pc, i, &buf, &buf_size); | ff_combine_frame(pc, i, &buf, &buf_size); | ||||
*poutbuf = buf; | *poutbuf = buf; | ||||
*poutbuf_size = buf_size; | *poutbuf_size = buf_size; | ||||
@@ -72,6 +78,7 @@ output_frame: | |||||
return i; | return i; | ||||
} | } | ||||
s->frame_in_buffer=1; | |||||
}else{ | }else{ | ||||
break; | break; | ||||
} | } | ||||
@@ -43,6 +43,7 @@ typedef struct AACAC3ParseContext { | |||||
int need_next_header; | int need_next_header; | ||||
int new_frame_start; | int new_frame_start; | ||||
int frame_in_buffer; | |||||
} AACAC3ParseContext; | } AACAC3ParseContext; | ||||
int ff_aac_ac3_parse(AVCodecParserContext *s1, | int ff_aac_ac3_parse(AVCodecParserContext *s1, | ||||
@@ -34,7 +34,7 @@ static int aac_sync(uint64_t state, AACAC3ParseContext *hdr_info, | |||||
int size, rdb, ch, sr; | int size, rdb, ch, sr; | ||||
uint64_t tmp = be2me_64(state); | uint64_t tmp = be2me_64(state); | ||||
init_get_bits(&bits, (uint8_t *)&tmp, AAC_HEADER_SIZE * 8); | |||||
init_get_bits(&bits, ((uint8_t *)&tmp)+8-AAC_HEADER_SIZE, AAC_HEADER_SIZE * 8); | |||||
if(get_bits(&bits, 12) != 0xfff) | if(get_bits(&bits, 12) != 0xfff) | ||||
return 0; | return 0; | ||||
@@ -130,7 +130,7 @@ static int ac3_sync(uint64_t state, AACAC3ParseContext *hdr_info, | |||||
uint64_t tmp = be2me_64(state); | uint64_t tmp = be2me_64(state); | ||||
AC3HeaderInfo hdr; | AC3HeaderInfo hdr; | ||||
err = ff_ac3_parse_header((uint8_t *)&tmp, &hdr); | |||||
err = ff_ac3_parse_header(((uint8_t *)&tmp)+8-AC3_HEADER_SIZE, &hdr); | |||||
if(err < 0) | if(err < 0) | ||||
return 0; | return 0; | ||||