summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>2011-08-19 22:38:34 +0200
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>2011-08-20 12:29:03 +0200
commit31ac0ac29b6bba744493f7d1040757a3f51b9ad7 (patch)
tree45444cf58832567fb6c613c027813ebdb3772d88 /libavcodec
parent13e9a0fbfb23081d05763d1b19bfad92381cc660 (diff)
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')
-rw-r--r--libavcodec/h264_parser.c6
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);
}
}