Fix parser not to clobber has_b_frames when extradata is set.

Due to it in contrast to the decoder not setting up low_delay,
the code in parse_nal_units would always end up setting has_b_frames
to 1 (except when stream is explicitly marked as low delay).
Since the parser itself would create extradata, simply reopening
the parser would cause this.
estimate_timings_from_pts would cause the parser to be reopened
on the same stream.

This fixes trac issue #360.

Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
pull/2/head
Reimar Döffinger 14 years ago
parent 13e9a0fbfb
commit 31ac0ac29b
  1. 6
      libavcodec/h264_parser.c

@ -251,6 +251,12 @@ static int h264_parse(AVCodecParserContext *s,
h->got_first = 1;
if (avctx->extradata_size) {
h->s.avctx = avctx;
// must be done like in decoder, otherwise opening the parser,
// letting it create extradata and then closing and opening again
// will cause has_b_frames to be always set.
// Note that estimate_timings_from_pts does exactly this.
if (!avctx->has_b_frames)
h->s.low_delay = 1;
ff_h264_decode_extradata(h);
}
}

Loading…
Cancel
Save