Re: [Mesa-dev] [PATCH v2] st/va encode handle ntsc framerate rate control
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
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
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