Re: [Mesa-dev] [PATCH v2] st/va encode handle ntsc framerate rate control

2017-01-30 Thread Christian König

Am 30.01.2017 um 00:09 schrieb Mark Thompson:

On 29/01/17 14:22, Andy Furniss wrote:

Tested with ffmpeg and gst-vaapi. Without this bits per
frame is set way too low for fractional framerates.

v2: Mark Thompson: simplify calculation.
 Use float.

Signed-off-by: Andy Furniss 
---
  src/gallium/state_trackers/va/picture.c | 19 +--
  1 file changed, 13 insertions(+), 6 deletions(-)

Tested, LGTM.  (0.5fps works nicely now :)

Reviewed-by: Mark Thompson 


Acked-by: Christian König 




diff --git a/src/gallium/state_trackers/va/picture.c 
b/src/gallium/state_trackers/va/picture.c
index 82584ea..53bb9eb 100644
--- a/src/gallium/state_trackers/va/picture.c
+++ b/src/gallium/state_trackers/va/picture.c
@@ -119,14 +119,21 @@ getEncParamPreset(vlVaContext *context)
 context->desc.h264enc.rate_ctrl.fill_data_enable = 1;
 context->desc.h264enc.rate_ctrl.enforce_hrd = 1;
 context->desc.h264enc.enable_vui = false;
-   if (context->desc.h264enc.rate_ctrl.frame_rate_num == 0)
-  context->desc.h264enc.rate_ctrl.frame_rate_num = 30;
+   if (context->desc.h264enc.rate_ctrl.frame_rate_num == 0 ||
+   context->desc.h264enc.rate_ctrl.frame_rate_den == 0) {
+ context->desc.h264enc.rate_ctrl.frame_rate_num = 30;
+ context->desc.h264enc.rate_ctrl.frame_rate_den = 1;
+   }
 context->desc.h264enc.rate_ctrl.target_bits_picture =
-  context->desc.h264enc.rate_ctrl.target_bitrate / 
context->desc.h264enc.rate_ctrl.frame_rate_num;
+  context->desc.h264enc.rate_ctrl.target_bitrate *
+  ((float)context->desc.h264enc.rate_ctrl.frame_rate_den /
+  context->desc.h264enc.rate_ctrl.frame_rate_num);
 context->desc.h264enc.rate_ctrl.peak_bits_picture_integer =
-  context->desc.h264enc.rate_ctrl.peak_bitrate / 
context->desc.h264enc.rate_ctrl.frame_rate_num;
-   context->desc.h264enc.rate_ctrl.peak_bits_picture_fraction = 0;
+  context->desc.h264enc.rate_ctrl.peak_bitrate *
+  ((float)context->desc.h264enc.rate_ctrl.frame_rate_den /
+  context->desc.h264enc.rate_ctrl.frame_rate_num);
  
+   context->desc.h264enc.rate_ctrl.peak_bits_picture_fraction = 0;

 context->desc.h264enc.ref_pic_mode = 0x0201;
  }
  
@@ -362,7 +369,7 @@ handleVAEncSequenceParameterBufferType(vlVaDriver *drv, vlVaContext *context, vl

context->gop_coeff = VL_VA_ENC_GOP_COEFF;
 context->desc.h264enc.gop_size = h264->intra_idr_period * 
context->gop_coeff;
 context->desc.h264enc.rate_ctrl.frame_rate_num = h264->time_scale / 2;
-   context->desc.h264enc.rate_ctrl.frame_rate_den = 1;
+   context->desc.h264enc.rate_ctrl.frame_rate_den = h264->num_units_in_tick;
 return VA_STATUS_SUCCESS;
  }

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev



___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v2] st/va encode handle ntsc framerate rate control

2017-01-29 Thread Mark Thompson
On 29/01/17 14:22, Andy Furniss wrote:
> Tested with ffmpeg and gst-vaapi. Without this bits per
> frame is set way too low for fractional framerates.
> 
> v2: Mark Thompson: simplify calculation.
> Use float.
> 
> Signed-off-by: Andy Furniss 
> ---
>  src/gallium/state_trackers/va/picture.c | 19 +--
>  1 file changed, 13 insertions(+), 6 deletions(-)

Tested, LGTM.  (0.5fps works nicely now :)

Reviewed-by: Mark Thompson 

> diff --git a/src/gallium/state_trackers/va/picture.c 
> b/src/gallium/state_trackers/va/picture.c
> index 82584ea..53bb9eb 100644
> --- a/src/gallium/state_trackers/va/picture.c
> +++ b/src/gallium/state_trackers/va/picture.c
> @@ -119,14 +119,21 @@ getEncParamPreset(vlVaContext *context)
> context->desc.h264enc.rate_ctrl.fill_data_enable = 1;
> context->desc.h264enc.rate_ctrl.enforce_hrd = 1;
> context->desc.h264enc.enable_vui = false;
> -   if (context->desc.h264enc.rate_ctrl.frame_rate_num == 0)
> -  context->desc.h264enc.rate_ctrl.frame_rate_num = 30;
> +   if (context->desc.h264enc.rate_ctrl.frame_rate_num == 0 ||
> +   context->desc.h264enc.rate_ctrl.frame_rate_den == 0) {
> + context->desc.h264enc.rate_ctrl.frame_rate_num = 30;
> + context->desc.h264enc.rate_ctrl.frame_rate_den = 1;
> +   }
> context->desc.h264enc.rate_ctrl.target_bits_picture =
> -  context->desc.h264enc.rate_ctrl.target_bitrate / 
> context->desc.h264enc.rate_ctrl.frame_rate_num;
> +  context->desc.h264enc.rate_ctrl.target_bitrate *
> +  ((float)context->desc.h264enc.rate_ctrl.frame_rate_den /
> +  context->desc.h264enc.rate_ctrl.frame_rate_num);
> context->desc.h264enc.rate_ctrl.peak_bits_picture_integer =
> -  context->desc.h264enc.rate_ctrl.peak_bitrate / 
> context->desc.h264enc.rate_ctrl.frame_rate_num;
> -   context->desc.h264enc.rate_ctrl.peak_bits_picture_fraction = 0;
> +  context->desc.h264enc.rate_ctrl.peak_bitrate *
> +  ((float)context->desc.h264enc.rate_ctrl.frame_rate_den /
> +  context->desc.h264enc.rate_ctrl.frame_rate_num);
>  
> +   context->desc.h264enc.rate_ctrl.peak_bits_picture_fraction = 0;
> context->desc.h264enc.ref_pic_mode = 0x0201;
>  }
>  
> @@ -362,7 +369,7 @@ handleVAEncSequenceParameterBufferType(vlVaDriver *drv, 
> vlVaContext *context, vl
>context->gop_coeff = VL_VA_ENC_GOP_COEFF;
> context->desc.h264enc.gop_size = h264->intra_idr_period * 
> context->gop_coeff;
> context->desc.h264enc.rate_ctrl.frame_rate_num = h264->time_scale / 2;
> -   context->desc.h264enc.rate_ctrl.frame_rate_den = 1;
> +   context->desc.h264enc.rate_ctrl.frame_rate_den = h264->num_units_in_tick;
> return VA_STATUS_SUCCESS;
>  }
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2] st/va encode handle ntsc framerate rate control

2017-01-29 Thread Andy Furniss
Tested with ffmpeg and gst-vaapi. Without this bits per
frame is set way too low for fractional framerates.

v2: Mark Thompson: simplify calculation.
Use float.

Signed-off-by: Andy Furniss 
---
 src/gallium/state_trackers/va/picture.c | 19 +--
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/gallium/state_trackers/va/picture.c 
b/src/gallium/state_trackers/va/picture.c
index 82584ea..53bb9eb 100644
--- a/src/gallium/state_trackers/va/picture.c
+++ b/src/gallium/state_trackers/va/picture.c
@@ -119,14 +119,21 @@ getEncParamPreset(vlVaContext *context)
context->desc.h264enc.rate_ctrl.fill_data_enable = 1;
context->desc.h264enc.rate_ctrl.enforce_hrd = 1;
context->desc.h264enc.enable_vui = false;
-   if (context->desc.h264enc.rate_ctrl.frame_rate_num == 0)
-  context->desc.h264enc.rate_ctrl.frame_rate_num = 30;
+   if (context->desc.h264enc.rate_ctrl.frame_rate_num == 0 ||
+   context->desc.h264enc.rate_ctrl.frame_rate_den == 0) {
+ context->desc.h264enc.rate_ctrl.frame_rate_num = 30;
+ context->desc.h264enc.rate_ctrl.frame_rate_den = 1;
+   }
context->desc.h264enc.rate_ctrl.target_bits_picture =
-  context->desc.h264enc.rate_ctrl.target_bitrate / 
context->desc.h264enc.rate_ctrl.frame_rate_num;
+  context->desc.h264enc.rate_ctrl.target_bitrate *
+  ((float)context->desc.h264enc.rate_ctrl.frame_rate_den /
+  context->desc.h264enc.rate_ctrl.frame_rate_num);
context->desc.h264enc.rate_ctrl.peak_bits_picture_integer =
-  context->desc.h264enc.rate_ctrl.peak_bitrate / 
context->desc.h264enc.rate_ctrl.frame_rate_num;
-   context->desc.h264enc.rate_ctrl.peak_bits_picture_fraction = 0;
+  context->desc.h264enc.rate_ctrl.peak_bitrate *
+  ((float)context->desc.h264enc.rate_ctrl.frame_rate_den /
+  context->desc.h264enc.rate_ctrl.frame_rate_num);
 
+   context->desc.h264enc.rate_ctrl.peak_bits_picture_fraction = 0;
context->desc.h264enc.ref_pic_mode = 0x0201;
 }
 
@@ -362,7 +369,7 @@ handleVAEncSequenceParameterBufferType(vlVaDriver *drv, 
vlVaContext *context, vl
   context->gop_coeff = VL_VA_ENC_GOP_COEFF;
context->desc.h264enc.gop_size = h264->intra_idr_period * 
context->gop_coeff;
context->desc.h264enc.rate_ctrl.frame_rate_num = h264->time_scale / 2;
-   context->desc.h264enc.rate_ctrl.frame_rate_den = 1;
+   context->desc.h264enc.rate_ctrl.frame_rate_den = h264->num_units_in_tick;
return VA_STATUS_SUCCESS;
 }
 
-- 
2.7.0

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev