Re: [Mesa-dev] [PATCH 4/4] radeon/vce: handle newly added parameters

2016-06-24 Thread Christian König

Am 24.06.2016 um 14:46 schrieb Ilia Mirkin:

On Fri, Jun 24, 2016 at 8:39 AM, Christian König
 wrote:

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

2016-06-24 Thread Ilia Mirkin
On Fri, Jun 24, 2016 at 8:39 AM, Christian König
 wrote:
> 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

2016-06-24 Thread Samuel Pitoiset



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

2016-06-24 Thread Christian König

+   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

2016-06-22 Thread 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;
+   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;
+