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