radeon/vce:Add support for frame_cropping_flag of VAEncSequenceParameterBufferH264
authorsuresh guttula <suresh.guttula@amd.com>
Thu, 11 Apr 2019 04:49:33 +0000 (10:19 +0530)
committerLeo Liu <leo.liu@amd.com>
Tue, 16 Apr 2019 14:15:09 +0000 (10:15 -0400)
This patch will add support for frame_cropping when the input size is not
matched with aligned size. Currently vaapi driver ignores frame cropping
values provided by client. This change will update SPS nalu with proper
cropping values.

v2: Moving default crop setting to else when enc_frame_cropping_flag is not set.

Signed-off-by: Satyajit Sahu <satyajit.sahu@amd.com>
Reviewed-by: Leo Liu <leo.liu@amd.com>
src/gallium/drivers/radeon/radeon_vce_52.c

index fc7ddc62a90b4f3795a1b16440ceecf3c396dd21..364da4dbe24a0173ba4162243c30649405c4ddb5 100644 (file)
@@ -81,8 +81,15 @@ static void get_pic_control_param(struct rvce_encoder *enc, struct pipe_h264_enc
        unsigned encNumMBsPerSlice;
        encNumMBsPerSlice = align(enc->base.width, 16) / 16;
        encNumMBsPerSlice *= align(enc->base.height, 16) / 16;
-       enc->enc_pic.pc.enc_crop_right_offset = (align(enc->base.width, 16) - enc->base.width) >> 1;
-       enc->enc_pic.pc.enc_crop_bottom_offset = (align(enc->base.height, 16) - enc->base.height) >> 1;
+       if (pic->pic_ctrl.enc_frame_cropping_flag) {
+               enc->enc_pic.pc.enc_crop_left_offset = pic->pic_ctrl.enc_frame_crop_left_offset;
+               enc->enc_pic.pc.enc_crop_right_offset = pic->pic_ctrl.enc_frame_crop_right_offset;
+               enc->enc_pic.pc.enc_crop_top_offset = pic->pic_ctrl.enc_frame_crop_top_offset;
+               enc->enc_pic.pc.enc_crop_bottom_offset = pic->pic_ctrl.enc_frame_crop_bottom_offset;
+       } else {
+               enc->enc_pic.pc.enc_crop_right_offset = (align(enc->base.width, 16) - enc->base.width) >> 1;
+               enc->enc_pic.pc.enc_crop_bottom_offset = (align(enc->base.height, 16) - enc->base.height) >> 1;
+       }
        enc->enc_pic.pc.enc_num_mbs_per_slice = encNumMBsPerSlice;
        enc->enc_pic.pc.enc_b_pic_pattern = MAX2(enc->base.max_references, 1) - 1;
        enc->enc_pic.pc.enc_number_of_reference_frames = MIN2(enc->base.max_references, 2);