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

Christian König deathsimple at vodafone.de
Mon Jan 30 08:38:51 UTC 2017


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 <adf.lists at gmail.com>
>> ---
>>   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 <sw at jkqxz.net>

Acked-by: Christian König <christian.koenig at amd.com>

>
>> 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 = 0x00000201;
>>   }
>>   
>> @@ -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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev




More information about the mesa-dev mailing list