summaryrefslogtreecommitdiff
path: root/libavcodec/vaapi_encode_h264.c
diff options
context:
space:
mode:
authorMark Thompson <sw@jkqxz.net>2017-01-04 23:05:10 +0000
committerMark Thompson <sw@jkqxz.net>2017-01-11 23:03:58 +0000
commit89725a8512721fffd190021ded2d3f5b42e20e2a (patch)
tree85a2924c63bbbcc39fec8eaa66880464e4c013a7 /libavcodec/vaapi_encode_h264.c
parenta3c3a5eac20a51d402c332cdf5220fff40a7943f (diff)
vaapi_h264: Scale log2_max_pic_order_cnt_lsb with max_b_frames
Before this change, it was possible to overflow pic_order_cnt_lsb and generate a stream with invalid POC numbering. This makes sure that the field is large enough that a single IDR B* P sequence uses fewer than half the available POC lsb values.
Diffstat (limited to 'libavcodec/vaapi_encode_h264.c')
-rw-r--r--libavcodec/vaapi_encode_h264.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
index deb99a7d2f..74e7cb1c16 100644
--- a/libavcodec/vaapi_encode_h264.c
+++ b/libavcodec/vaapi_encode_h264.c
@@ -800,6 +800,8 @@ static int vaapi_encode_h264_init_sequence_params(AVCodecContext *avctx)
vseq->seq_fields.bits.direct_8x8_inference_flag = 1;
vseq->seq_fields.bits.log2_max_frame_num_minus4 = 4;
vseq->seq_fields.bits.pic_order_cnt_type = 0;
+ vseq->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4 =
+ av_clip(av_log2(avctx->max_b_frames + 1) - 2, 0, 12);
if (avctx->width != ctx->surface_width ||
avctx->height != ctx->surface_height) {