On 4/9/2019 12:34 AM, Liu, Leo wrote:
> On 4/8/19 1:17 AM, Sahu, Satyajit wrote:
>> From: suresh guttula <suresh.gutt...@amd.com>
>>
>> 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.
>>
>> Signed-off-by: suresh guttula <suresh.gutt...@amd.com>
>> Signed-off-by: Satyajit Sahu <satyajit.s...@amd.com>
>> ---
>>    src/gallium/drivers/radeon/radeon_vce_52.c       | 8 ++++++--
>>    src/gallium/include/pipe/p_video_state.h         | 5 +++++
>>    src/gallium/state_trackers/va/picture_h264_enc.c | 8 ++++++++
>>    3 files changed, 19 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/gallium/drivers/radeon/radeon_vce_52.c 
>> b/src/gallium/drivers/radeon/radeon_vce_52.c
>> index fc7ddc62a90..593730756d5 100644
>> --- a/src/gallium/drivers/radeon/radeon_vce_52.c
>> +++ b/src/gallium/drivers/radeon/radeon_vce_52.c
>> @@ -81,8 +81,12 @@ 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;
> Shouldn't we need to keep this code path when the cropping info is not
> available, since VA spec says it's optional.
>
> Regards,
>
> Leo

As per H264 standard

When frame_cropping_flag is equal to 0, the values of 
frame_crop_left_offset, frame_crop_right_offset, frame_crop_top_offset, 
and frame_crop_bottom_offset shall be inferred to be equal to 0. 
(https://www.itu.int/rec/T-REC-H.264)

So I think it should be under frame_cropping_flag condition.

Regards,

Satyajit

>
>
>
>> +    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;
>> +    }
>>      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);
>> diff --git a/src/gallium/include/pipe/p_video_state.h 
>> b/src/gallium/include/pipe/p_video_state.h
>> index 05855a36e23..1369f1a8ca6 100644
>> --- a/src/gallium/include/pipe/p_video_state.h
>> +++ b/src/gallium/include/pipe/p_video_state.h
>> @@ -395,6 +395,11 @@ struct pipe_h264_enc_pic_control
>>    {
>>       unsigned enc_cabac_enable;
>>       unsigned enc_constraint_set_flags;
>> +   unsigned enc_frame_cropping_flag;
>> +   unsigned enc_frame_crop_left_offset;
>> +   unsigned enc_frame_crop_right_offset;
>> +   unsigned enc_frame_crop_top_offset;
>> +   unsigned enc_frame_crop_bottom_offset;
>>    };
>>    
>>    struct pipe_h264_enc_picture_desc
>> diff --git a/src/gallium/state_trackers/va/picture_h264_enc.c 
>> b/src/gallium/state_trackers/va/picture_h264_enc.c
>> index abfd39633de..f46b3425566 100644
>> --- a/src/gallium/state_trackers/va/picture_h264_enc.c
>> +++ b/src/gallium/state_trackers/va/picture_h264_enc.c
>> @@ -127,6 +127,14 @@ 
>> vlVaHandleVAEncSequenceParameterBufferTypeH264(vlVaDriver *drv, vlVaContext 
>> *con
>>       context->desc.h264enc.rate_ctrl.frame_rate_num = h264->time_scale / 2;
>>       context->desc.h264enc.rate_ctrl.frame_rate_den = 
>> h264->num_units_in_tick;
>>       context->desc.h264enc.pic_order_cnt_type = 
>> h264->seq_fields.bits.pic_order_cnt_type;
>> +
>> +   if (h264->frame_cropping_flag) {
>> +      context->desc.h264enc.pic_ctrl.enc_frame_cropping_flag = 
>> h264->frame_cropping_flag;
>> +      context->desc.h264enc.pic_ctrl.enc_frame_crop_left_offset = 
>> h264->frame_crop_left_offset;
>> +      context->desc.h264enc.pic_ctrl.enc_frame_crop_right_offset = 
>> h264->frame_crop_right_offset;
>> +      context->desc.h264enc.pic_ctrl.enc_frame_crop_top_offset = 
>> h264->frame_crop_top_offset;
>> +      context->desc.h264enc.pic_ctrl.enc_frame_crop_bottom_offset = 
>> h264->frame_crop_bottom_offset;
>> +   }
>>       return VA_STATUS_SUCCESS;
>>    }
>>    
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to