diff options
author | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2011-08-19 22:38:34 +0200 |
---|---|---|
committer | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2011-08-20 12:29:03 +0200 |
commit | 31ac0ac29b6bba744493f7d1040757a3f51b9ad7 (patch) | |
tree | 45444cf58832567fb6c613c027813ebdb3772d88 /libavcodec/h264_parser.c | |
parent | 13e9a0fbfb23081d05763d1b19bfad92381cc660 (diff) | |
download | ffmpeg-31ac0ac29b6bba744493f7d1040757a3f51b9ad7.tar.gz |
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>
Diffstat (limited to 'libavcodec/h264_parser.c')
-rw-r--r-- | libavcodec/h264_parser.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c index 27fba4b628..ad134b3f82 100644 --- a/libavcodec/h264_parser.c +++ b/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); } } |