radeon/vcn: use enc profile instead of pic profile

Submitted by Zhang, Boyuan on Feb. 27, 2018, 11:56 p.m.

Details

Message ID 1519775776-20645-1-git-send-email-boyuan.zhang@amd.com
State New
Headers show
Series "radeon/vcn: use enc profile instead of pic profile" ( rev: 1 ) in Mesa

Not browsing as part of any series.

Commit Message

Zhang, Boyuan Feb. 27, 2018, 11:56 p.m.
From: Boyuan Zhang <boyuan.zhang@amd.com>

Picture profile might not be set in some cases. Therefore, better to use
the profile stored in encoder base.

Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
---
 src/gallium/drivers/radeon/radeon_vcn_enc.c     |  4 ++--
 src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c | 16 ++++++++--------
 2 files changed, 10 insertions(+), 10 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc.c b/src/gallium/drivers/radeon/radeon_vcn_enc.c
index 388a333..dcc25f2 100644
--- a/src/gallium/drivers/radeon/radeon_vcn_enc.c
+++ b/src/gallium/drivers/radeon/radeon_vcn_enc.c
@@ -40,7 +40,7 @@ 
 
 static void radeon_vcn_enc_get_param(struct radeon_encoder *enc, struct pipe_picture_desc *picture)
 {
-   if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
+   if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
       struct pipe_h264_enc_picture_desc *pic = (struct pipe_h264_enc_picture_desc *)picture;
       enc->enc_pic.picture_type = pic->picture_type;
       enc->enc_pic.frame_num = pic->frame_num;
@@ -54,7 +54,7 @@  static void radeon_vcn_enc_get_param(struct radeon_encoder *enc, struct pipe_pic
       enc->enc_pic.crop_right = (align(enc->base.width, 16) - enc->base.width) / 2;
       enc->enc_pic.crop_top = 0;
       enc->enc_pic.crop_bottom = (align(enc->base.height, 16) - enc->base.height) / 2;
-   } else if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_HEVC) {
+   } else if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) {
       struct pipe_h265_enc_picture_desc *pic = (struct pipe_h265_enc_picture_desc *)picture;
       enc->enc_pic.picture_type = pic->picture_type;
       enc->enc_pic.frame_num = pic->frame_num;
diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c b/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
index 07493d8..9adf40f 100644
--- a/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
+++ b/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
@@ -341,7 +341,7 @@  static void radeon_enc_spec_misc_hevc(struct radeon_encoder *enc, struct pipe_pi
 
 static void radeon_enc_rc_session_init(struct radeon_encoder *enc, struct pipe_picture_desc *picture)
 {
-	if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
+	if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
 		struct pipe_h264_enc_picture_desc *pic = (struct pipe_h264_enc_picture_desc *)picture;
 		enc->enc_pic.rc_session_init.vbv_buffer_level = pic->rate_ctrl.vbv_buf_lv;
 		switch(pic->rate_ctrl.rate_ctrl_method) {
@@ -359,7 +359,7 @@  static void radeon_enc_rc_session_init(struct radeon_encoder *enc, struct pipe_p
 			default:
 				enc->enc_pic.rc_session_init.rate_control_method = RENCODE_RATE_CONTROL_METHOD_NONE;
 		}
-	} else if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_HEVC) {
+	} else if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) {
 		struct pipe_h265_enc_picture_desc *pic = (struct pipe_h265_enc_picture_desc *)picture;
 		enc->enc_pic.rc_session_init.vbv_buffer_level = pic->rc.vbv_buf_lv;
 		switch(pic->rc.rate_ctrl_method) {
@@ -387,7 +387,7 @@  static void radeon_enc_rc_session_init(struct radeon_encoder *enc, struct pipe_p
 
 static void radeon_enc_rc_layer_init(struct radeon_encoder *enc, struct pipe_picture_desc *picture)
 {
-	if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
+	if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
 		struct pipe_h264_enc_picture_desc *pic = (struct pipe_h264_enc_picture_desc *)picture;
 		enc->enc_pic.rc_layer_init.target_bit_rate = pic->rate_ctrl.target_bitrate;
 		enc->enc_pic.rc_layer_init.peak_bit_rate = pic->rate_ctrl.peak_bitrate;
@@ -397,7 +397,7 @@  static void radeon_enc_rc_layer_init(struct radeon_encoder *enc, struct pipe_pic
 		enc->enc_pic.rc_layer_init.avg_target_bits_per_picture = pic->rate_ctrl.target_bits_picture;
 		enc->enc_pic.rc_layer_init.peak_bits_per_picture_integer = pic->rate_ctrl.peak_bits_picture_integer;
 		enc->enc_pic.rc_layer_init.peak_bits_per_picture_fractional = pic->rate_ctrl.peak_bits_picture_fraction;
-	} else if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_HEVC) {
+	} else if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) {
 		struct pipe_h265_enc_picture_desc *pic = (struct pipe_h265_enc_picture_desc *)picture;
 		enc->enc_pic.rc_layer_init.target_bit_rate = pic->rc.target_bitrate;
 		enc->enc_pic.rc_layer_init.peak_bit_rate = pic->rc.peak_bitrate;
@@ -1113,7 +1113,7 @@  static void radeon_enc_intra_refresh(struct radeon_encoder *enc)
 
 static void radeon_enc_rc_per_pic(struct radeon_encoder *enc, struct pipe_picture_desc *picture)
 {
-	if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
+	if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
 		struct pipe_h264_enc_picture_desc *pic = (struct pipe_h264_enc_picture_desc *)picture;
 		enc->enc_pic.rc_per_pic.qp = pic->quant_i_frames;
 		enc->enc_pic.rc_per_pic.min_qp_app = 0;
@@ -1122,7 +1122,7 @@  static void radeon_enc_rc_per_pic(struct radeon_encoder *enc, struct pipe_pictur
 		enc->enc_pic.rc_per_pic.enabled_filler_data = pic->rate_ctrl.fill_data_enable;
 		enc->enc_pic.rc_per_pic.skip_frame_enable = false;
 		enc->enc_pic.rc_per_pic.enforce_hrd = pic->rate_ctrl.enforce_hrd;
-	} else if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_HEVC) {
+	} else if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) {
 		struct pipe_h265_enc_picture_desc *pic = (struct pipe_h265_enc_picture_desc *)picture;
 		enc->enc_pic.rc_per_pic.qp = pic->rc.quant_i_frames;
 		enc->enc_pic.rc_per_pic.min_qp_app = 0;
@@ -1292,12 +1292,12 @@  static void begin(struct radeon_encoder *enc, struct pipe_picture_desc *pic)
 	radeon_enc_task_info(enc, enc->need_feedback);
 	radeon_enc_op_init(enc);
 
-	if (u_reduce_video_profile(pic->profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
+	if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
 		radeon_enc_session_init(enc);
 		radeon_enc_slice_control(enc);
 		radeon_enc_spec_misc(enc);
 		radeon_enc_deblocking_filter_h264(enc);
-	} else if (u_reduce_video_profile(pic->profile) == PIPE_VIDEO_FORMAT_HEVC) {
+	} else if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) {
 		radeon_enc_session_init_hevc(enc);
 		radeon_enc_slice_control_hevc(enc);
 		radeon_enc_spec_misc_hevc(enc, pic);

Comments

Am 28.02.2018 um 00:56 schrieb boyuan.zhang@amd.com:
> From: Boyuan Zhang <boyuan.zhang@amd.com>
>
> Picture profile might not be set in some cases. Therefore, better to use
> the profile stored in encoder base.
>
> Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>

NAK, when the picture profile isn't set the picture structure isn't valid.

Please fix the case where we forget to set the picture->profile instead.

Christian.

> ---
>   src/gallium/drivers/radeon/radeon_vcn_enc.c     |  4 ++--
>   src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c | 16 ++++++++--------
>   2 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc.c b/src/gallium/drivers/radeon/radeon_vcn_enc.c
> index 388a333..dcc25f2 100644
> --- a/src/gallium/drivers/radeon/radeon_vcn_enc.c
> +++ b/src/gallium/drivers/radeon/radeon_vcn_enc.c
> @@ -40,7 +40,7 @@
>   
>   static void radeon_vcn_enc_get_param(struct radeon_encoder *enc, struct pipe_picture_desc *picture)
>   {
> -   if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
> +   if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>         struct pipe_h264_enc_picture_desc *pic = (struct pipe_h264_enc_picture_desc *)picture;
>         enc->enc_pic.picture_type = pic->picture_type;
>         enc->enc_pic.frame_num = pic->frame_num;
> @@ -54,7 +54,7 @@ static void radeon_vcn_enc_get_param(struct radeon_encoder *enc, struct pipe_pic
>         enc->enc_pic.crop_right = (align(enc->base.width, 16) - enc->base.width) / 2;
>         enc->enc_pic.crop_top = 0;
>         enc->enc_pic.crop_bottom = (align(enc->base.height, 16) - enc->base.height) / 2;
> -   } else if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_HEVC) {
> +   } else if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) {
>         struct pipe_h265_enc_picture_desc *pic = (struct pipe_h265_enc_picture_desc *)picture;
>         enc->enc_pic.picture_type = pic->picture_type;
>         enc->enc_pic.frame_num = pic->frame_num;
> diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c b/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
> index 07493d8..9adf40f 100644
> --- a/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
> +++ b/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
> @@ -341,7 +341,7 @@ static void radeon_enc_spec_misc_hevc(struct radeon_encoder *enc, struct pipe_pi
>   
>   static void radeon_enc_rc_session_init(struct radeon_encoder *enc, struct pipe_picture_desc *picture)
>   {
> -	if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
> +	if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>   		struct pipe_h264_enc_picture_desc *pic = (struct pipe_h264_enc_picture_desc *)picture;
>   		enc->enc_pic.rc_session_init.vbv_buffer_level = pic->rate_ctrl.vbv_buf_lv;
>   		switch(pic->rate_ctrl.rate_ctrl_method) {
> @@ -359,7 +359,7 @@ static void radeon_enc_rc_session_init(struct radeon_encoder *enc, struct pipe_p
>   			default:
>   				enc->enc_pic.rc_session_init.rate_control_method = RENCODE_RATE_CONTROL_METHOD_NONE;
>   		}
> -	} else if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_HEVC) {
> +	} else if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) {
>   		struct pipe_h265_enc_picture_desc *pic = (struct pipe_h265_enc_picture_desc *)picture;
>   		enc->enc_pic.rc_session_init.vbv_buffer_level = pic->rc.vbv_buf_lv;
>   		switch(pic->rc.rate_ctrl_method) {
> @@ -387,7 +387,7 @@ static void radeon_enc_rc_session_init(struct radeon_encoder *enc, struct pipe_p
>   
>   static void radeon_enc_rc_layer_init(struct radeon_encoder *enc, struct pipe_picture_desc *picture)
>   {
> -	if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
> +	if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>   		struct pipe_h264_enc_picture_desc *pic = (struct pipe_h264_enc_picture_desc *)picture;
>   		enc->enc_pic.rc_layer_init.target_bit_rate = pic->rate_ctrl.target_bitrate;
>   		enc->enc_pic.rc_layer_init.peak_bit_rate = pic->rate_ctrl.peak_bitrate;
> @@ -397,7 +397,7 @@ static void radeon_enc_rc_layer_init(struct radeon_encoder *enc, struct pipe_pic
>   		enc->enc_pic.rc_layer_init.avg_target_bits_per_picture = pic->rate_ctrl.target_bits_picture;
>   		enc->enc_pic.rc_layer_init.peak_bits_per_picture_integer = pic->rate_ctrl.peak_bits_picture_integer;
>   		enc->enc_pic.rc_layer_init.peak_bits_per_picture_fractional = pic->rate_ctrl.peak_bits_picture_fraction;
> -	} else if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_HEVC) {
> +	} else if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) {
>   		struct pipe_h265_enc_picture_desc *pic = (struct pipe_h265_enc_picture_desc *)picture;
>   		enc->enc_pic.rc_layer_init.target_bit_rate = pic->rc.target_bitrate;
>   		enc->enc_pic.rc_layer_init.peak_bit_rate = pic->rc.peak_bitrate;
> @@ -1113,7 +1113,7 @@ static void radeon_enc_intra_refresh(struct radeon_encoder *enc)
>   
>   static void radeon_enc_rc_per_pic(struct radeon_encoder *enc, struct pipe_picture_desc *picture)
>   {
> -	if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
> +	if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>   		struct pipe_h264_enc_picture_desc *pic = (struct pipe_h264_enc_picture_desc *)picture;
>   		enc->enc_pic.rc_per_pic.qp = pic->quant_i_frames;
>   		enc->enc_pic.rc_per_pic.min_qp_app = 0;
> @@ -1122,7 +1122,7 @@ static void radeon_enc_rc_per_pic(struct radeon_encoder *enc, struct pipe_pictur
>   		enc->enc_pic.rc_per_pic.enabled_filler_data = pic->rate_ctrl.fill_data_enable;
>   		enc->enc_pic.rc_per_pic.skip_frame_enable = false;
>   		enc->enc_pic.rc_per_pic.enforce_hrd = pic->rate_ctrl.enforce_hrd;
> -	} else if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_HEVC) {
> +	} else if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) {
>   		struct pipe_h265_enc_picture_desc *pic = (struct pipe_h265_enc_picture_desc *)picture;
>   		enc->enc_pic.rc_per_pic.qp = pic->rc.quant_i_frames;
>   		enc->enc_pic.rc_per_pic.min_qp_app = 0;
> @@ -1292,12 +1292,12 @@ static void begin(struct radeon_encoder *enc, struct pipe_picture_desc *pic)
>   	radeon_enc_task_info(enc, enc->need_feedback);
>   	radeon_enc_op_init(enc);
>   
> -	if (u_reduce_video_profile(pic->profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
> +	if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>   		radeon_enc_session_init(enc);
>   		radeon_enc_slice_control(enc);
>   		radeon_enc_spec_misc(enc);
>   		radeon_enc_deblocking_filter_h264(enc);
> -	} else if (u_reduce_video_profile(pic->profile) == PIPE_VIDEO_FORMAT_HEVC) {
> +	} else if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) {
>   		radeon_enc_session_init_hevc(enc);
>   		radeon_enc_slice_control_hevc(enc);
>   		radeon_enc_spec_misc_hevc(enc, pic);
Boyuan, please also make sure whether this patch along with other one 
are needed to Cc stable or not.

Regards,
Leo

On 02/28/2018 03:03 AM, Christian König wrote:
> Am 28.02.2018 um 00:56 schrieb boyuan.zhang@amd.com:
>> From: Boyuan Zhang <boyuan.zhang@amd.com>
>>
>> Picture profile might not be set in some cases. Therefore, better to use
>> the profile stored in encoder base.
>>
>> Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
>
> NAK, when the picture profile isn't set the picture structure isn't 
> valid.
>
> Please fix the case where we forget to set the picture->profile instead.
>
> Christian.
>
>> ---
>>   src/gallium/drivers/radeon/radeon_vcn_enc.c     |  4 ++--
>>   src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c | 16 ++++++++--------
>>   2 files changed, 10 insertions(+), 10 deletions(-)
>>
>> diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc.c 
>> b/src/gallium/drivers/radeon/radeon_vcn_enc.c
>> index 388a333..dcc25f2 100644
>> --- a/src/gallium/drivers/radeon/radeon_vcn_enc.c
>> +++ b/src/gallium/drivers/radeon/radeon_vcn_enc.c
>> @@ -40,7 +40,7 @@
>>     static void radeon_vcn_enc_get_param(struct radeon_encoder *enc, 
>> struct pipe_picture_desc *picture)
>>   {
>> -   if (u_reduce_video_profile(picture->profile) == 
>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>> +   if (u_reduce_video_profile(enc->base.profile) == 
>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>         struct pipe_h264_enc_picture_desc *pic = (struct 
>> pipe_h264_enc_picture_desc *)picture;
>>         enc->enc_pic.picture_type = pic->picture_type;
>>         enc->enc_pic.frame_num = pic->frame_num;
>> @@ -54,7 +54,7 @@ static void radeon_vcn_enc_get_param(struct 
>> radeon_encoder *enc, struct pipe_pic
>>         enc->enc_pic.crop_right = (align(enc->base.width, 16) - 
>> enc->base.width) / 2;
>>         enc->enc_pic.crop_top = 0;
>>         enc->enc_pic.crop_bottom = (align(enc->base.height, 16) - 
>> enc->base.height) / 2;
>> -   } else if (u_reduce_video_profile(picture->profile) == 
>> PIPE_VIDEO_FORMAT_HEVC) {
>> +   } else if (u_reduce_video_profile(enc->base.profile) == 
>> PIPE_VIDEO_FORMAT_HEVC) {
>>         struct pipe_h265_enc_picture_desc *pic = (struct 
>> pipe_h265_enc_picture_desc *)picture;
>>         enc->enc_pic.picture_type = pic->picture_type;
>>         enc->enc_pic.frame_num = pic->frame_num;
>> diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c 
>> b/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
>> index 07493d8..9adf40f 100644
>> --- a/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
>> +++ b/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
>> @@ -341,7 +341,7 @@ static void radeon_enc_spec_misc_hevc(struct 
>> radeon_encoder *enc, struct pipe_pi
>>     static void radeon_enc_rc_session_init(struct radeon_encoder 
>> *enc, struct pipe_picture_desc *picture)
>>   {
>> -    if (u_reduce_video_profile(picture->profile) == 
>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>> +    if (u_reduce_video_profile(enc->base.profile) == 
>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>           struct pipe_h264_enc_picture_desc *pic = (struct 
>> pipe_h264_enc_picture_desc *)picture;
>>           enc->enc_pic.rc_session_init.vbv_buffer_level = 
>> pic->rate_ctrl.vbv_buf_lv;
>>           switch(pic->rate_ctrl.rate_ctrl_method) {
>> @@ -359,7 +359,7 @@ static void radeon_enc_rc_session_init(struct 
>> radeon_encoder *enc, struct pipe_p
>>               default:
>> enc->enc_pic.rc_session_init.rate_control_method = 
>> RENCODE_RATE_CONTROL_METHOD_NONE;
>>           }
>> -    } else if (u_reduce_video_profile(picture->profile) == 
>> PIPE_VIDEO_FORMAT_HEVC) {
>> +    } else if (u_reduce_video_profile(enc->base.profile) == 
>> PIPE_VIDEO_FORMAT_HEVC) {
>>           struct pipe_h265_enc_picture_desc *pic = (struct 
>> pipe_h265_enc_picture_desc *)picture;
>>           enc->enc_pic.rc_session_init.vbv_buffer_level = 
>> pic->rc.vbv_buf_lv;
>>           switch(pic->rc.rate_ctrl_method) {
>> @@ -387,7 +387,7 @@ static void radeon_enc_rc_session_init(struct 
>> radeon_encoder *enc, struct pipe_p
>>     static void radeon_enc_rc_layer_init(struct radeon_encoder *enc, 
>> struct pipe_picture_desc *picture)
>>   {
>> -    if (u_reduce_video_profile(picture->profile) == 
>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>> +    if (u_reduce_video_profile(enc->base.profile) == 
>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>           struct pipe_h264_enc_picture_desc *pic = (struct 
>> pipe_h264_enc_picture_desc *)picture;
>>           enc->enc_pic.rc_layer_init.target_bit_rate = 
>> pic->rate_ctrl.target_bitrate;
>>           enc->enc_pic.rc_layer_init.peak_bit_rate = 
>> pic->rate_ctrl.peak_bitrate;
>> @@ -397,7 +397,7 @@ static void radeon_enc_rc_layer_init(struct 
>> radeon_encoder *enc, struct pipe_pic
>> enc->enc_pic.rc_layer_init.avg_target_bits_per_picture = 
>> pic->rate_ctrl.target_bits_picture;
>> enc->enc_pic.rc_layer_init.peak_bits_per_picture_integer = 
>> pic->rate_ctrl.peak_bits_picture_integer;
>> enc->enc_pic.rc_layer_init.peak_bits_per_picture_fractional = 
>> pic->rate_ctrl.peak_bits_picture_fraction;
>> -    } else if (u_reduce_video_profile(picture->profile) == 
>> PIPE_VIDEO_FORMAT_HEVC) {
>> +    } else if (u_reduce_video_profile(enc->base.profile) == 
>> PIPE_VIDEO_FORMAT_HEVC) {
>>           struct pipe_h265_enc_picture_desc *pic = (struct 
>> pipe_h265_enc_picture_desc *)picture;
>>           enc->enc_pic.rc_layer_init.target_bit_rate = 
>> pic->rc.target_bitrate;
>>           enc->enc_pic.rc_layer_init.peak_bit_rate = 
>> pic->rc.peak_bitrate;
>> @@ -1113,7 +1113,7 @@ static void radeon_enc_intra_refresh(struct 
>> radeon_encoder *enc)
>>     static void radeon_enc_rc_per_pic(struct radeon_encoder *enc, 
>> struct pipe_picture_desc *picture)
>>   {
>> -    if (u_reduce_video_profile(picture->profile) == 
>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>> +    if (u_reduce_video_profile(enc->base.profile) == 
>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>           struct pipe_h264_enc_picture_desc *pic = (struct 
>> pipe_h264_enc_picture_desc *)picture;
>>           enc->enc_pic.rc_per_pic.qp = pic->quant_i_frames;
>>           enc->enc_pic.rc_per_pic.min_qp_app = 0;
>> @@ -1122,7 +1122,7 @@ static void radeon_enc_rc_per_pic(struct 
>> radeon_encoder *enc, struct pipe_pictur
>>           enc->enc_pic.rc_per_pic.enabled_filler_data = 
>> pic->rate_ctrl.fill_data_enable;
>>           enc->enc_pic.rc_per_pic.skip_frame_enable = false;
>>           enc->enc_pic.rc_per_pic.enforce_hrd = 
>> pic->rate_ctrl.enforce_hrd;
>> -    } else if (u_reduce_video_profile(picture->profile) == 
>> PIPE_VIDEO_FORMAT_HEVC) {
>> +    } else if (u_reduce_video_profile(enc->base.profile) == 
>> PIPE_VIDEO_FORMAT_HEVC) {
>>           struct pipe_h265_enc_picture_desc *pic = (struct 
>> pipe_h265_enc_picture_desc *)picture;
>>           enc->enc_pic.rc_per_pic.qp = pic->rc.quant_i_frames;
>>           enc->enc_pic.rc_per_pic.min_qp_app = 0;
>> @@ -1292,12 +1292,12 @@ static void begin(struct radeon_encoder *enc, 
>> struct pipe_picture_desc *pic)
>>       radeon_enc_task_info(enc, enc->need_feedback);
>>       radeon_enc_op_init(enc);
>>   -    if (u_reduce_video_profile(pic->profile) == 
>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>> +    if (u_reduce_video_profile(enc->base.profile) == 
>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>           radeon_enc_session_init(enc);
>>           radeon_enc_slice_control(enc);
>>           radeon_enc_spec_misc(enc);
>>           radeon_enc_deblocking_filter_h264(enc);
>> -    } else if (u_reduce_video_profile(pic->profile) == 
>> PIPE_VIDEO_FORMAT_HEVC) {
>> +    } else if (u_reduce_video_profile(enc->base.profile) == 
>> PIPE_VIDEO_FORMAT_HEVC) {
>>           radeon_enc_session_init_hevc(enc);
>>           radeon_enc_slice_control_hevc(enc);
>>           radeon_enc_spec_misc_hevc(enc, pic);
>
On 2018-02-28 08:44 AM, Leo Liu wrote:
> Boyuan, please also make sure whether this patch along with other one 
> are needed to Cc stable or not.
>
> Regards,
> Leo

Thanks. I double checked the 18.0 and 17.3 branch, the previous hevc 
encode related patch sets are not in there yet. So seems we don't need 
to Cc stable for these patches.

Regards,
Boyuan

>
> On 02/28/2018 03:03 AM, Christian König wrote:
>> Am 28.02.2018 um 00:56 schrieb boyuan.zhang@amd.com:
>>> From: Boyuan Zhang <boyuan.zhang@amd.com>
>>>
>>> Picture profile might not be set in some cases. Therefore, better to 
>>> use
>>> the profile stored in encoder base.
>>>
>>> Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
>>
>> NAK, when the picture profile isn't set the picture structure isn't 
>> valid.
>>
>> Please fix the case where we forget to set the picture->profile instead.
>>
>> Christian.
>>
>>> ---
>>>   src/gallium/drivers/radeon/radeon_vcn_enc.c     |  4 ++--
>>>   src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c | 16 ++++++++--------
>>>   2 files changed, 10 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc.c 
>>> b/src/gallium/drivers/radeon/radeon_vcn_enc.c
>>> index 388a333..dcc25f2 100644
>>> --- a/src/gallium/drivers/radeon/radeon_vcn_enc.c
>>> +++ b/src/gallium/drivers/radeon/radeon_vcn_enc.c
>>> @@ -40,7 +40,7 @@
>>>     static void radeon_vcn_enc_get_param(struct radeon_encoder *enc, 
>>> struct pipe_picture_desc *picture)
>>>   {
>>> -   if (u_reduce_video_profile(picture->profile) == 
>>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>> +   if (u_reduce_video_profile(enc->base.profile) == 
>>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>>         struct pipe_h264_enc_picture_desc *pic = (struct 
>>> pipe_h264_enc_picture_desc *)picture;
>>>         enc->enc_pic.picture_type = pic->picture_type;
>>>         enc->enc_pic.frame_num = pic->frame_num;
>>> @@ -54,7 +54,7 @@ static void radeon_vcn_enc_get_param(struct 
>>> radeon_encoder *enc, struct pipe_pic
>>>         enc->enc_pic.crop_right = (align(enc->base.width, 16) - 
>>> enc->base.width) / 2;
>>>         enc->enc_pic.crop_top = 0;
>>>         enc->enc_pic.crop_bottom = (align(enc->base.height, 16) - 
>>> enc->base.height) / 2;
>>> -   } else if (u_reduce_video_profile(picture->profile) == 
>>> PIPE_VIDEO_FORMAT_HEVC) {
>>> +   } else if (u_reduce_video_profile(enc->base.profile) == 
>>> PIPE_VIDEO_FORMAT_HEVC) {
>>>         struct pipe_h265_enc_picture_desc *pic = (struct 
>>> pipe_h265_enc_picture_desc *)picture;
>>>         enc->enc_pic.picture_type = pic->picture_type;
>>>         enc->enc_pic.frame_num = pic->frame_num;
>>> diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c 
>>> b/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
>>> index 07493d8..9adf40f 100644
>>> --- a/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
>>> +++ b/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c
>>> @@ -341,7 +341,7 @@ static void radeon_enc_spec_misc_hevc(struct 
>>> radeon_encoder *enc, struct pipe_pi
>>>     static void radeon_enc_rc_session_init(struct radeon_encoder 
>>> *enc, struct pipe_picture_desc *picture)
>>>   {
>>> -    if (u_reduce_video_profile(picture->profile) == 
>>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>> +    if (u_reduce_video_profile(enc->base.profile) == 
>>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>>           struct pipe_h264_enc_picture_desc *pic = (struct 
>>> pipe_h264_enc_picture_desc *)picture;
>>>           enc->enc_pic.rc_session_init.vbv_buffer_level = 
>>> pic->rate_ctrl.vbv_buf_lv;
>>>           switch(pic->rate_ctrl.rate_ctrl_method) {
>>> @@ -359,7 +359,7 @@ static void radeon_enc_rc_session_init(struct 
>>> radeon_encoder *enc, struct pipe_p
>>>               default:
>>> enc->enc_pic.rc_session_init.rate_control_method = 
>>> RENCODE_RATE_CONTROL_METHOD_NONE;
>>>           }
>>> -    } else if (u_reduce_video_profile(picture->profile) == 
>>> PIPE_VIDEO_FORMAT_HEVC) {
>>> +    } else if (u_reduce_video_profile(enc->base.profile) == 
>>> PIPE_VIDEO_FORMAT_HEVC) {
>>>           struct pipe_h265_enc_picture_desc *pic = (struct 
>>> pipe_h265_enc_picture_desc *)picture;
>>>           enc->enc_pic.rc_session_init.vbv_buffer_level = 
>>> pic->rc.vbv_buf_lv;
>>>           switch(pic->rc.rate_ctrl_method) {
>>> @@ -387,7 +387,7 @@ static void radeon_enc_rc_session_init(struct 
>>> radeon_encoder *enc, struct pipe_p
>>>     static void radeon_enc_rc_layer_init(struct radeon_encoder *enc, 
>>> struct pipe_picture_desc *picture)
>>>   {
>>> -    if (u_reduce_video_profile(picture->profile) == 
>>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>> +    if (u_reduce_video_profile(enc->base.profile) == 
>>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>>           struct pipe_h264_enc_picture_desc *pic = (struct 
>>> pipe_h264_enc_picture_desc *)picture;
>>>           enc->enc_pic.rc_layer_init.target_bit_rate = 
>>> pic->rate_ctrl.target_bitrate;
>>>           enc->enc_pic.rc_layer_init.peak_bit_rate = 
>>> pic->rate_ctrl.peak_bitrate;
>>> @@ -397,7 +397,7 @@ static void radeon_enc_rc_layer_init(struct 
>>> radeon_encoder *enc, struct pipe_pic
>>> enc->enc_pic.rc_layer_init.avg_target_bits_per_picture = 
>>> pic->rate_ctrl.target_bits_picture;
>>> enc->enc_pic.rc_layer_init.peak_bits_per_picture_integer = 
>>> pic->rate_ctrl.peak_bits_picture_integer;
>>> enc->enc_pic.rc_layer_init.peak_bits_per_picture_fractional = 
>>> pic->rate_ctrl.peak_bits_picture_fraction;
>>> -    } else if (u_reduce_video_profile(picture->profile) == 
>>> PIPE_VIDEO_FORMAT_HEVC) {
>>> +    } else if (u_reduce_video_profile(enc->base.profile) == 
>>> PIPE_VIDEO_FORMAT_HEVC) {
>>>           struct pipe_h265_enc_picture_desc *pic = (struct 
>>> pipe_h265_enc_picture_desc *)picture;
>>>           enc->enc_pic.rc_layer_init.target_bit_rate = 
>>> pic->rc.target_bitrate;
>>>           enc->enc_pic.rc_layer_init.peak_bit_rate = 
>>> pic->rc.peak_bitrate;
>>> @@ -1113,7 +1113,7 @@ static void radeon_enc_intra_refresh(struct 
>>> radeon_encoder *enc)
>>>     static void radeon_enc_rc_per_pic(struct radeon_encoder *enc, 
>>> struct pipe_picture_desc *picture)
>>>   {
>>> -    if (u_reduce_video_profile(picture->profile) == 
>>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>> +    if (u_reduce_video_profile(enc->base.profile) == 
>>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>>           struct pipe_h264_enc_picture_desc *pic = (struct 
>>> pipe_h264_enc_picture_desc *)picture;
>>>           enc->enc_pic.rc_per_pic.qp = pic->quant_i_frames;
>>>           enc->enc_pic.rc_per_pic.min_qp_app = 0;
>>> @@ -1122,7 +1122,7 @@ static void radeon_enc_rc_per_pic(struct 
>>> radeon_encoder *enc, struct pipe_pictur
>>>           enc->enc_pic.rc_per_pic.enabled_filler_data = 
>>> pic->rate_ctrl.fill_data_enable;
>>>           enc->enc_pic.rc_per_pic.skip_frame_enable = false;
>>>           enc->enc_pic.rc_per_pic.enforce_hrd = 
>>> pic->rate_ctrl.enforce_hrd;
>>> -    } else if (u_reduce_video_profile(picture->profile) == 
>>> PIPE_VIDEO_FORMAT_HEVC) {
>>> +    } else if (u_reduce_video_profile(enc->base.profile) == 
>>> PIPE_VIDEO_FORMAT_HEVC) {
>>>           struct pipe_h265_enc_picture_desc *pic = (struct 
>>> pipe_h265_enc_picture_desc *)picture;
>>>           enc->enc_pic.rc_per_pic.qp = pic->rc.quant_i_frames;
>>>           enc->enc_pic.rc_per_pic.min_qp_app = 0;
>>> @@ -1292,12 +1292,12 @@ static void begin(struct radeon_encoder 
>>> *enc, struct pipe_picture_desc *pic)
>>>       radeon_enc_task_info(enc, enc->need_feedback);
>>>       radeon_enc_op_init(enc);
>>>   -    if (u_reduce_video_profile(pic->profile) == 
>>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>> +    if (u_reduce_video_profile(enc->base.profile) == 
>>> PIPE_VIDEO_FORMAT_MPEG4_AVC) {
>>>           radeon_enc_session_init(enc);
>>>           radeon_enc_slice_control(enc);
>>>           radeon_enc_spec_misc(enc);
>>>           radeon_enc_deblocking_filter_h264(enc);
>>> -    } else if (u_reduce_video_profile(pic->profile) == 
>>> PIPE_VIDEO_FORMAT_HEVC) {
>>> +    } else if (u_reduce_video_profile(enc->base.profile) == 
>>> PIPE_VIDEO_FORMAT_HEVC) {
>>>           radeon_enc_session_init_hevc(enc);
>>>           radeon_enc_slice_control_hevc(enc);
>>>           radeon_enc_spec_misc_hevc(enc, pic);
>>
>