lavc/aac_ac3_parser: avoid zeroing codec parameters if we haven't read a frame

This caused issues when seeking in some unusual MPEGTS files
pull/181/merge
Rodger Combs 9 years ago
parent a21a3c25dc
commit 9f5baf9085
  1. 4
      libavcodec/aac_ac3_parser.c

@ -34,6 +34,7 @@ int ff_aac_ac3_parse(AVCodecParserContext *s1,
ParseContext *pc = &s->pc; ParseContext *pc = &s->pc;
int len, i; int len, i;
int new_frame_start; int new_frame_start;
int got_frame = 0;
get_next: get_next:
i=END_NOT_FOUND; i=END_NOT_FOUND;
@ -51,6 +52,7 @@ get_next:
if(len<=0){ if(len<=0){
i=END_NOT_FOUND; i=END_NOT_FOUND;
}else{ }else{
got_frame = 1;
s->state=0; s->state=0;
i-= s->header_size -1; i-= s->header_size -1;
s->remaining_size = len; s->remaining_size = len;
@ -76,6 +78,7 @@ get_next:
if(s->codec_id) if(s->codec_id)
avctx->codec_id = s->codec_id; avctx->codec_id = s->codec_id;
if (got_frame) {
/* Due to backwards compatible HE-AAC the sample rate, channel count, /* Due to backwards compatible HE-AAC the sample rate, channel count,
and total number of samples found in an AAC ADTS header are not and total number of samples found in an AAC ADTS header are not
reliable. Bit rate is still accurate because the total frame duration in reliable. Bit rate is still accurate because the total frame duration in
@ -101,6 +104,7 @@ get_next:
} }
avctx->bit_rate = s->bit_rate; avctx->bit_rate = s->bit_rate;
}
return i; return i;
} }

Loading…
Cancel
Save