Re: [Mesa-dev] [PATCH 4/4] radeon/vce: handle newly added parameters
Am 24.06.2016 um 14:46 schrieb Ilia Mirkin: On Fri, Jun 24, 2016 at 8:39 AM, Christian Königwrote: Ilia and/or maybe other nouveau developers: You guys don't have any plans to expose the NVidia encoding functionality through the OpenMAX/VA-API state trackers in the near future don't you? Not in the near future, no. As far as I'm aware, no one's looked at the Kepler+ encoding hw block. It looks even more painful than video decoding, and we don't even have that figured out (h264 is still a fail sometimes). Yeah, I already thought so. Anyway feel free to speak up if you notice anything in the pipe interface for encoding which could turn out to be a blocker. We can still change things if we find the need to do so, but I just want to avoid that we nail something down now which absolutely doesn't work for others. Thanks, Christian. -ilia ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 4/4] radeon/vce: handle newly added parameters
On Fri, Jun 24, 2016 at 8:39 AM, Christian Königwrote: > Ilia and/or maybe other nouveau developers: You guys don't have any plans to > expose the NVidia encoding functionality through the OpenMAX/VA-API state > trackers in the near future don't you? Not in the near future, no. As far as I'm aware, no one's looked at the Kepler+ encoding hw block. It looks even more painful than video decoding, and we don't even have that figured out (h264 is still a fail sometimes). -ilia ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 4/4] radeon/vce: handle newly added parameters
On 06/24/2016 02:39 PM, Christian König wrote: +if (pic->enable_low_level_control == true) { Well using this enable_low_level_control switch to choose between two sets of hardcoded values is clearly a no go. For the motion estimation and most of the other flags I would say just try to expose the parameters we have in the hardware structure in the pipe interface as well. Only for the bit rate control I'm absolutely not sure what to do. Is that an AMD specific extension what you do there? Cause I can't really understand why you do it like this. Ilia and/or maybe other nouveau developers: You guys don't have any plans to expose the NVidia encoding functionality through the OpenMAX/VA-API state trackers in the near future don't you? Not in my plan, but maybe Ilia does want to? Regards, Christian. Am 22.06.2016 um 23:44 schrieb Boyuan Zhang: Signed-off-by: Boyuan Zhang--- src/gallium/drivers/radeon/radeon_vce_52.c | 107 + 1 file changed, 79 insertions(+), 28 deletions(-) diff --git a/src/gallium/drivers/radeon/radeon_vce_52.c b/src/gallium/drivers/radeon/radeon_vce_52.c index 56b6dd8..ac577e3 100644 --- a/src/gallium/drivers/radeon/radeon_vce_52.c +++ b/src/gallium/drivers/radeon/radeon_vce_52.c @@ -48,36 +48,65 @@ static void get_rate_control_param(struct rvce_encoder *enc, struct pipe_h264_en enc->enc_pic.rc.quant_i_frames = pic->quant_i_frames; enc->enc_pic.rc.quant_p_frames = pic->quant_p_frames; enc->enc_pic.rc.quant_b_frames = pic->quant_b_frames; +enc->enc_pic.rc.gop_size = pic->gop_size; enc->enc_pic.rc.frame_rate_num = pic->rate_ctrl.frame_rate_num; enc->enc_pic.rc.frame_rate_den = pic->rate_ctrl.frame_rate_den; enc->enc_pic.rc.max_qp = 51; -enc->enc_pic.rc.vbv_buffer_size = pic->rate_ctrl.vbv_buffer_size; -enc->enc_pic.rc.vbv_buf_lv = 0; -enc->enc_pic.rc.fill_data_enable = 0; -enc->enc_pic.rc.enforce_hrd = 0; -enc->enc_pic.rc.target_bits_picture = pic->rate_ctrl.target_bits_picture; -enc->enc_pic.rc.peak_bits_picture_integer = pic->rate_ctrl.peak_bits_picture_integer; -enc->enc_pic.rc.peak_bits_picture_fraction = pic->rate_ctrl.peak_bits_picture_fraction; +if (pic->enable_low_level_control == true) { +enc->enc_pic.rc.vbv_buffer_size = 2000; +if (pic->rate_ctrl.frame_rate_num == 0) +enc->enc_pic.rc.frame_rate_num = 30; +if (pic->rate_ctrl.frame_rate_den == 0) +enc->enc_pic.rc.frame_rate_den = 1; +enc->enc_pic.rc.vbv_buf_lv = 48; +enc->enc_pic.rc.fill_data_enable = 1; +enc->enc_pic.rc.enforce_hrd = 1; +enc->enc_pic.rc.target_bits_picture = enc->enc_pic.rc.target_bitrate / enc->enc_pic.rc.frame_rate_num; +enc->enc_pic.rc.peak_bits_picture_integer = enc->enc_pic.rc.peak_bitrate / enc->enc_pic.rc.frame_rate_num; +enc->enc_pic.rc.peak_bits_picture_fraction = 0; +} else { +enc->enc_pic.rc.vbv_buffer_size = pic->rate_ctrl.vbv_buffer_size; +enc->enc_pic.rc.vbv_buf_lv = 0; +enc->enc_pic.rc.fill_data_enable = 0; +enc->enc_pic.rc.enforce_hrd = 0; +enc->enc_pic.rc.target_bits_picture = pic->rate_ctrl.target_bits_picture; +enc->enc_pic.rc.peak_bits_picture_integer = pic->rate_ctrl.peak_bits_picture_integer; +enc->enc_pic.rc.peak_bits_picture_fraction = pic->rate_ctrl.peak_bits_picture_fraction; +} } static void get_motion_estimation_param(struct rvce_encoder *enc, struct pipe_h264_enc_picture_desc *pic) { - -enc->enc_pic.me.motion_est_quarter_pixel = 0x; -enc->enc_pic.me.enc_disable_sub_mode = 0x00fe; -enc->enc_pic.me.lsmvert = 0x; -enc->enc_pic.me.enc_en_ime_overw_dis_subm = 0x; -enc->enc_pic.me.enc_ime_overw_dis_subm_no = 0x; -enc->enc_pic.me.enc_ime2_search_range_x = 0x0001; -enc->enc_pic.me.enc_ime2_search_range_y = 0x0001; -enc->enc_pic.me.enc_ime_decimation_search = 0x0001; -enc->enc_pic.me.motion_est_half_pixel = 0x0001; -enc->enc_pic.me.enc_search_range_x = 0x0010; -enc->enc_pic.me.enc_search_range_y = 0x0010; -enc->enc_pic.me.enc_search1_range_x = 0x0010; -enc->enc_pic.me.enc_search1_range_y = 0x0010; - +if (pic->enable_low_level_control == true) { +enc->enc_pic.me.motion_est_quarter_pixel = 0x0001; +enc->enc_pic.me.enc_disable_sub_mode = 0x0078; +enc->enc_pic.me.lsmvert = 0x0002; +enc->enc_pic.me.enc_en_ime_overw_dis_subm = 0x0001; +enc->enc_pic.me.enc_ime_overw_dis_subm_no = 0x0001; +enc->enc_pic.me.enc_ime2_search_range_x = 0x0004; +enc->enc_pic.me.enc_ime2_search_range_y = 0x0004; +enc->enc_pic.me.enc_ime_decimation_search = 0x0001; +enc->enc_pic.me.motion_est_half_pixel = 0x0001; +enc->enc_pic.me.enc_search_range_x = 0x0010; +
Re: [Mesa-dev] [PATCH 4/4] radeon/vce: handle newly added parameters
+ if (pic->enable_low_level_control == true) { Well using this enable_low_level_control switch to choose between two sets of hardcoded values is clearly a no go. For the motion estimation and most of the other flags I would say just try to expose the parameters we have in the hardware structure in the pipe interface as well. Only for the bit rate control I'm absolutely not sure what to do. Is that an AMD specific extension what you do there? Cause I can't really understand why you do it like this. Ilia and/or maybe other nouveau developers: You guys don't have any plans to expose the NVidia encoding functionality through the OpenMAX/VA-API state trackers in the near future don't you? Regards, Christian. Am 22.06.2016 um 23:44 schrieb Boyuan Zhang: Signed-off-by: Boyuan Zhang--- src/gallium/drivers/radeon/radeon_vce_52.c | 107 + 1 file changed, 79 insertions(+), 28 deletions(-) diff --git a/src/gallium/drivers/radeon/radeon_vce_52.c b/src/gallium/drivers/radeon/radeon_vce_52.c index 56b6dd8..ac577e3 100644 --- a/src/gallium/drivers/radeon/radeon_vce_52.c +++ b/src/gallium/drivers/radeon/radeon_vce_52.c @@ -48,36 +48,65 @@ static void get_rate_control_param(struct rvce_encoder *enc, struct pipe_h264_en enc->enc_pic.rc.quant_i_frames = pic->quant_i_frames; enc->enc_pic.rc.quant_p_frames = pic->quant_p_frames; enc->enc_pic.rc.quant_b_frames = pic->quant_b_frames; + enc->enc_pic.rc.gop_size = pic->gop_size; enc->enc_pic.rc.frame_rate_num = pic->rate_ctrl.frame_rate_num; enc->enc_pic.rc.frame_rate_den = pic->rate_ctrl.frame_rate_den; enc->enc_pic.rc.max_qp = 51; - enc->enc_pic.rc.vbv_buffer_size = pic->rate_ctrl.vbv_buffer_size; - enc->enc_pic.rc.vbv_buf_lv = 0; - enc->enc_pic.rc.fill_data_enable = 0; - enc->enc_pic.rc.enforce_hrd = 0; - enc->enc_pic.rc.target_bits_picture = pic->rate_ctrl.target_bits_picture; - enc->enc_pic.rc.peak_bits_picture_integer = pic->rate_ctrl.peak_bits_picture_integer; - enc->enc_pic.rc.peak_bits_picture_fraction = pic->rate_ctrl.peak_bits_picture_fraction; + if (pic->enable_low_level_control == true) { + enc->enc_pic.rc.vbv_buffer_size = 2000; + if (pic->rate_ctrl.frame_rate_num == 0) + enc->enc_pic.rc.frame_rate_num = 30; + if (pic->rate_ctrl.frame_rate_den == 0) + enc->enc_pic.rc.frame_rate_den = 1; + enc->enc_pic.rc.vbv_buf_lv = 48; + enc->enc_pic.rc.fill_data_enable = 1; + enc->enc_pic.rc.enforce_hrd = 1; + enc->enc_pic.rc.target_bits_picture = enc->enc_pic.rc.target_bitrate / enc->enc_pic.rc.frame_rate_num; + enc->enc_pic.rc.peak_bits_picture_integer = enc->enc_pic.rc.peak_bitrate / enc->enc_pic.rc.frame_rate_num; + enc->enc_pic.rc.peak_bits_picture_fraction = 0; + } else { + enc->enc_pic.rc.vbv_buffer_size = pic->rate_ctrl.vbv_buffer_size; + enc->enc_pic.rc.vbv_buf_lv = 0; + enc->enc_pic.rc.fill_data_enable = 0; + enc->enc_pic.rc.enforce_hrd = 0; + enc->enc_pic.rc.target_bits_picture = pic->rate_ctrl.target_bits_picture; + enc->enc_pic.rc.peak_bits_picture_integer = pic->rate_ctrl.peak_bits_picture_integer; + enc->enc_pic.rc.peak_bits_picture_fraction = pic->rate_ctrl.peak_bits_picture_fraction; + } } static void get_motion_estimation_param(struct rvce_encoder *enc, struct pipe_h264_enc_picture_desc *pic) { - - enc->enc_pic.me.motion_est_quarter_pixel = 0x; - enc->enc_pic.me.enc_disable_sub_mode = 0x00fe; - enc->enc_pic.me.lsmvert = 0x; - enc->enc_pic.me.enc_en_ime_overw_dis_subm = 0x; - enc->enc_pic.me.enc_ime_overw_dis_subm_no = 0x; - enc->enc_pic.me.enc_ime2_search_range_x = 0x0001; - enc->enc_pic.me.enc_ime2_search_range_y = 0x0001; - enc->enc_pic.me.enc_ime_decimation_search = 0x0001; - enc->enc_pic.me.motion_est_half_pixel = 0x0001; - enc->enc_pic.me.enc_search_range_x = 0x0010; - enc->enc_pic.me.enc_search_range_y = 0x0010; - enc->enc_pic.me.enc_search1_range_x = 0x0010; - enc->enc_pic.me.enc_search1_range_y = 0x0010; - + if (pic->enable_low_level_control == true) { + enc->enc_pic.me.motion_est_quarter_pixel = 0x0001; + enc->enc_pic.me.enc_disable_sub_mode = 0x0078; + enc->enc_pic.me.lsmvert = 0x0002; + enc->enc_pic.me.enc_en_ime_overw_dis_subm = 0x0001; + enc->enc_pic.me.enc_ime_overw_dis_subm_no = 0x0001; + enc->enc_pic.me.enc_ime2_search_range_x = 0x0004; + enc->enc_pic.me.enc_ime2_search_range_y = 0x0004; +
[Mesa-dev] [PATCH 4/4] radeon/vce: handle newly added parameters
Signed-off-by: Boyuan Zhang--- src/gallium/drivers/radeon/radeon_vce_52.c | 107 + 1 file changed, 79 insertions(+), 28 deletions(-) diff --git a/src/gallium/drivers/radeon/radeon_vce_52.c b/src/gallium/drivers/radeon/radeon_vce_52.c index 56b6dd8..ac577e3 100644 --- a/src/gallium/drivers/radeon/radeon_vce_52.c +++ b/src/gallium/drivers/radeon/radeon_vce_52.c @@ -48,36 +48,65 @@ static void get_rate_control_param(struct rvce_encoder *enc, struct pipe_h264_en enc->enc_pic.rc.quant_i_frames = pic->quant_i_frames; enc->enc_pic.rc.quant_p_frames = pic->quant_p_frames; enc->enc_pic.rc.quant_b_frames = pic->quant_b_frames; + enc->enc_pic.rc.gop_size = pic->gop_size; enc->enc_pic.rc.frame_rate_num = pic->rate_ctrl.frame_rate_num; enc->enc_pic.rc.frame_rate_den = pic->rate_ctrl.frame_rate_den; enc->enc_pic.rc.max_qp = 51; - enc->enc_pic.rc.vbv_buffer_size = pic->rate_ctrl.vbv_buffer_size; - enc->enc_pic.rc.vbv_buf_lv = 0; - enc->enc_pic.rc.fill_data_enable = 0; - enc->enc_pic.rc.enforce_hrd = 0; - enc->enc_pic.rc.target_bits_picture = pic->rate_ctrl.target_bits_picture; - enc->enc_pic.rc.peak_bits_picture_integer = pic->rate_ctrl.peak_bits_picture_integer; - enc->enc_pic.rc.peak_bits_picture_fraction = pic->rate_ctrl.peak_bits_picture_fraction; + if (pic->enable_low_level_control == true) { + enc->enc_pic.rc.vbv_buffer_size = 2000; + if (pic->rate_ctrl.frame_rate_num == 0) + enc->enc_pic.rc.frame_rate_num = 30; + if (pic->rate_ctrl.frame_rate_den == 0) + enc->enc_pic.rc.frame_rate_den = 1; + enc->enc_pic.rc.vbv_buf_lv = 48; + enc->enc_pic.rc.fill_data_enable = 1; + enc->enc_pic.rc.enforce_hrd = 1; + enc->enc_pic.rc.target_bits_picture = enc->enc_pic.rc.target_bitrate / enc->enc_pic.rc.frame_rate_num; + enc->enc_pic.rc.peak_bits_picture_integer = enc->enc_pic.rc.peak_bitrate / enc->enc_pic.rc.frame_rate_num; + enc->enc_pic.rc.peak_bits_picture_fraction = 0; + } else { + enc->enc_pic.rc.vbv_buffer_size = pic->rate_ctrl.vbv_buffer_size; + enc->enc_pic.rc.vbv_buf_lv = 0; + enc->enc_pic.rc.fill_data_enable = 0; + enc->enc_pic.rc.enforce_hrd = 0; + enc->enc_pic.rc.target_bits_picture = pic->rate_ctrl.target_bits_picture; + enc->enc_pic.rc.peak_bits_picture_integer = pic->rate_ctrl.peak_bits_picture_integer; + enc->enc_pic.rc.peak_bits_picture_fraction = pic->rate_ctrl.peak_bits_picture_fraction; + } } static void get_motion_estimation_param(struct rvce_encoder *enc, struct pipe_h264_enc_picture_desc *pic) { - - enc->enc_pic.me.motion_est_quarter_pixel = 0x; - enc->enc_pic.me.enc_disable_sub_mode = 0x00fe; - enc->enc_pic.me.lsmvert = 0x; - enc->enc_pic.me.enc_en_ime_overw_dis_subm = 0x; - enc->enc_pic.me.enc_ime_overw_dis_subm_no = 0x; - enc->enc_pic.me.enc_ime2_search_range_x = 0x0001; - enc->enc_pic.me.enc_ime2_search_range_y = 0x0001; - enc->enc_pic.me.enc_ime_decimation_search = 0x0001; - enc->enc_pic.me.motion_est_half_pixel = 0x0001; - enc->enc_pic.me.enc_search_range_x = 0x0010; - enc->enc_pic.me.enc_search_range_y = 0x0010; - enc->enc_pic.me.enc_search1_range_x = 0x0010; - enc->enc_pic.me.enc_search1_range_y = 0x0010; - + if (pic->enable_low_level_control == true) { + enc->enc_pic.me.motion_est_quarter_pixel = 0x0001; + enc->enc_pic.me.enc_disable_sub_mode = 0x0078; + enc->enc_pic.me.lsmvert = 0x0002; + enc->enc_pic.me.enc_en_ime_overw_dis_subm = 0x0001; + enc->enc_pic.me.enc_ime_overw_dis_subm_no = 0x0001; + enc->enc_pic.me.enc_ime2_search_range_x = 0x0004; + enc->enc_pic.me.enc_ime2_search_range_y = 0x0004; + enc->enc_pic.me.enc_ime_decimation_search = 0x0001; + enc->enc_pic.me.motion_est_half_pixel = 0x0001; + enc->enc_pic.me.enc_search_range_x = 0x0010; + enc->enc_pic.me.enc_search_range_y = 0x0010; + enc->enc_pic.me.enc_search1_range_x = 0x0010; + enc->enc_pic.me.enc_search1_range_y = 0x0010; + } else { + enc->enc_pic.me.motion_est_quarter_pixel = 0x; + enc->enc_pic.me.enc_disable_sub_mode = 0x00fe; + enc->enc_pic.me.lsmvert = 0x; + enc->enc_pic.me.enc_en_ime_overw_dis_subm = 0x; + enc->enc_pic.me.enc_ime_overw_dis_subm_no = 0x; +