summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Scheutzow <mike.scheutzow@alcatel-lucent.com>2011-04-28 10:14:26 -0400
committerAnton Khirnov <anton@khirnov.net>2011-06-16 20:24:58 +0200
commitaa15e68721b15f8020da9d392954b343f195f22c (patch)
tree1cb5a5f12c55a3a633e5958e7f2f2f77ec2a6868
parent7c44d716e76cbd1c29369563a8b384addd5e7c03 (diff)
Fix decoding of mpegts streams with h264 video that does *NOT* have b frames
One of the causes of this bug is that the h264 parser defaults low_delay to 1, but the h264 codec defaults low_delay to 0. Really Ugly. After many hours of looking at this, I'm still not sure how has_b_frames is *intended* to behave, but to me the implementation appears way more complicated than it ought to be. My patch relies on the encoder to set an optional field in the SPS. This works for libx264 streams, but I'm not sure that all h264 encoders will set it. Signed-off-by: Anton Khirnov <anton@khirnov.net>
-rw-r--r--libavcodec/h264.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 78ca4141a4..0aac09754a 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -3768,7 +3768,8 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size){
init_get_bits(&s->gb, ptr, bit_length);
ff_h264_decode_seq_parameter_set(h);
- if(s->flags& CODEC_FLAG_LOW_DELAY)
+ if (s->flags& CODEC_FLAG_LOW_DELAY ||
+ (h->sps.bitstream_restriction_flag && !h->sps.num_reorder_frames))
s->low_delay=1;
if(avctx->has_b_frames < 2)