summaryrefslogtreecommitdiffstats
path: root/libavcodec/h264_mp4toannexb_bsf.c
diff options
context:
space:
mode:
authorBenoit Fouet <benoit.fouet@free.fr>2014-07-31 15:32:14 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-07-31 15:59:47 +0200
commitbf428bb3145c4f0eef32f8ef00de0ee222b3e414 (patch)
tree43eb72f8ec78e3ec4fdd74b246fbd6248b8198e8 /libavcodec/h264_mp4toannexb_bsf.c
parentdd200c56c07bbda5212f2a598c7acd58ab402843 (diff)
downloadffmpeg-streaming-bf428bb3145c4f0eef32f8ef00de0ee222b3e414.zip
ffmpeg-streaming-bf428bb3145c4f0eef32f8ef00de0ee222b3e414.tar.gz
h264_mp4toannexb_bsf: account for consecutive IDR pictures.
If there are consecutive IDR pictures, then SPS/PPS should be prepended to all of them, not only the first one. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/h264_mp4toannexb_bsf.c')
-rw-r--r--libavcodec/h264_mp4toannexb_bsf.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/libavcodec/h264_mp4toannexb_bsf.c b/libavcodec/h264_mp4toannexb_bsf.c
index a7b4f41..a003a1d 100644
--- a/libavcodec/h264_mp4toannexb_bsf.c
+++ b/libavcodec/h264_mp4toannexb_bsf.c
@@ -179,6 +179,11 @@ static int h264_mp4toannexb_filter(AVBitStreamFilterContext *bsfc,
if (ctx->first_idr && (unit_type == 7 || unit_type == 8))
ctx->idr_sps_pps_seen = 1;
+ /* if this is a new IDR picture following an IDR picture, reset the idr flag.
+ * Just check first_mb_in_slice to be 0 as this is the simplest solution.
+ * This could be checking idr_pic_id instead, but would complexify the parsing. */
+ if (!ctx->first_idr && unit_type == 5 && (buf[1] & 0x80))
+ ctx->first_idr = 1;
/* prepend only to the first type 5 NAL unit of an IDR picture, if no sps/pps are already present */
if (ctx->first_idr && unit_type == 5 && !ctx->idr_sps_pps_seen) {
OpenPOWER on IntegriCloud