[Mesa-dev] [PATCH] st/va encode handle ntsc framerate rate control
Christian König
christian.koenig at amd.com
Fri Jan 27 08:48:51 UTC 2017
That looks correct to me, but I'm not deeply enough into the H264
encoding any more.
Adding Leo and Boyuan to comment as well.
Regards,
Christian.
Am 26.01.2017 um 19:26 schrieb Andy Furniss:
> Tested with ffmpeg and gst-vaapi. Without this bits per
> frame is set way too low.
>
> Signed-off-by: Andy Furniss <adf.lists at gmail.com>
> ---
> src/gallium/state_trackers/va/picture.c | 32 ++++++++++++++++++++++++--------
> 1 file changed, 24 insertions(+), 8 deletions(-)
>
> diff --git a/src/gallium/state_trackers/va/picture.c b/src/gallium/state_trackers/va/picture.c
> index 82584ea..a024437 100644
> --- a/src/gallium/state_trackers/va/picture.c
> +++ b/src/gallium/state_trackers/va/picture.c
> @@ -119,14 +119,30 @@ 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;
> - 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.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;
> + 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;
> + }
> + if (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.frame_rate_den + 1);
> + 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.frame_rate_den + 1);
> + } else {
> + 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.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.ref_pic_mode = 0x00000201;
> }
>
> @@ -362,7 +378,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;
> }
>
More information about the mesa-dev
mailing list