Unified · Split
| @@ -733,8 +733,6 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx, · 732 unmodified lines | ||
| 733 | 733 | vpic->pic_fields.bits.idr_pic_flag = (pic->type == PICTURE_TYPE_IDR); |
| 734 | 734 | vpic->pic_fields.bits.reference_pic_flag = (pic->type != PICTURE_TYPE_B); |
| 735 | 735 | |
| 736 | − pic->nb_slices = 1; | |
| 737 | − | |
| 738 | 736 | return 0; |
| 739 | 737 | } |
| 740 | 738 | |
| @@ -758,8 +756,7 @@ static int vaapi_encode_h264_init_slice_params(AVCodecContext *avctx, · 17 unmodified lines | ||
| 758 | 756 | sh->nal_unit_header.nal_ref_idc = pic->type != PICTURE_TYPE_B; |
| 759 | 757 | } |
| 760 | 758 | |
| 761 | − // Only one slice per frame. | |
| 762 | − sh->first_mb_in_slice = 0; | |
| 759 | + sh->first_mb_in_slice = slice->block_start; | |
| 763 | 760 | sh->slice_type = priv->slice_type; |
| 764 | 761 | |
| 765 | 762 | sh->pic_parameter_set_id = pps->pic_parameter_set_id; |
| @@ -780,8 +777,8 @@ static int vaapi_encode_h264_init_slice_params(AVCodecContext *avctx, · 14 unmodified lines | ||
| 780 | 777 | sh->slice_qp_delta = priv->fixed_qp_idr - (pps->pic_init_qp_minus26 + 26); |
| 781 | 778 | |
| 782 | 779 | |
| 783 | − vslice->macroblock_address = sh->first_mb_in_slice; | |
| 784 | − vslice->num_macroblocks = priv->mb_width * priv->mb_height; | |
| 780 | + vslice->macroblock_address = slice->block_start; | |
| 781 | + vslice->num_macroblocks = slice->block_size; | |
| 785 | 782 | |
| 786 | 783 | vslice->macroblock_info = VA_INVALID_ID; |
| 787 | 784 | |
| @@ -903,6 +900,8 @@ static const VAAPIEncodeProfile vaapi_encode_h264_profiles[] = { · 115 unmodified lines | ||
| 903 | 900 | static const VAAPIEncodeType vaapi_encode_type_h264 = { |
| 904 | 901 | .profiles = vaapi_encode_h264_profiles, |
| 905 | 902 | |
| 903 | + .flags = FLAG_SLICE_CONTROL, | |
| 904 | + | |
| 906 | 905 | .configure = &vaapi_encode_h264_configure, |
| 907 | 906 | |
| 908 | 907 | .sequence_params_size = sizeof(VAEncSequenceParameterBufferH264), |
| @@ -978,6 +977,8 @@ static av_cold int vaapi_encode_h264_init(AVCodecContext *avctx) · 69 unmodified lines | ||
| 978 | 977 | ctx->surface_width = FFALIGN(avctx->width, 16); |
| 979 | 978 | ctx->surface_height = FFALIGN(avctx->height, 16); |
| 980 | 979 | |
| 980 | + ctx->slice_block_height = ctx->slice_block_width = 16; | |
| 981 | + | |
| 981 | 982 | return ff_vaapi_encode_init(avctx); |
| 982 | 983 | } |
| 983 | 984 | |