mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
frontends/va: Calculate VBV params for other layers relative to base layer
VAAPI only gives these parameters for base layer, but we need them for other layers too. Reviewed-By: Sil Vilerino <sivileri@microsoft.com> Reviewed-by: Ruijing Dong <ruijing.dong@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31148>
This commit is contained in:
parent
c56fc312a8
commit
5b157d4ad0
3 changed files with 50 additions and 20 deletions
|
|
@ -409,13 +409,23 @@ vlVaHandleVAEncMiscParameterTypeHRDAV1(vlVaContext *context, VAEncMiscParameterB
|
|||
{
|
||||
VAEncMiscParameterHRD *ms = (VAEncMiscParameterHRD *)misc->data;
|
||||
|
||||
if (ms->buffer_size) {
|
||||
context->desc.av1enc.rc[0].vbv_buffer_size = ms->buffer_size;
|
||||
context->desc.av1enc.rc[0].vbv_buf_lv = (ms->initial_buffer_fullness << 6 ) / ms->buffer_size;
|
||||
context->desc.av1enc.rc[0].vbv_buf_initial_size = ms->initial_buffer_fullness;
|
||||
/* Distinguishes from the default params set for these values in other
|
||||
* functions and app specific params passed down via HRD buffer */
|
||||
context->desc.av1enc.rc[0].app_requested_hrd_buffer = true;
|
||||
if (ms->buffer_size == 0)
|
||||
return VA_STATUS_ERROR_INVALID_PARAMETER;
|
||||
|
||||
/* Distinguishes from the default params set for these values in other
|
||||
functions and app specific params passed down via HRD buffer */
|
||||
context->desc.av1enc.rc[0].app_requested_hrd_buffer = true;
|
||||
context->desc.av1enc.rc[0].vbv_buffer_size = ms->buffer_size;
|
||||
context->desc.av1enc.rc[0].vbv_buf_lv = (ms->initial_buffer_fullness << 6) / ms->buffer_size;
|
||||
context->desc.av1enc.rc[0].vbv_buf_initial_size = ms->initial_buffer_fullness;
|
||||
|
||||
for (unsigned i = 1; i < context->desc.av1enc.seq.num_temporal_layers; i++) {
|
||||
context->desc.av1enc.rc[i].vbv_buffer_size =
|
||||
(float)ms->buffer_size / context->desc.av1enc.rc[0].peak_bitrate *
|
||||
context->desc.av1enc.rc[i].peak_bitrate;
|
||||
context->desc.av1enc.rc[i].vbv_buf_lv = context->desc.av1enc.rc[0].vbv_buf_lv;
|
||||
context->desc.av1enc.rc[i].vbv_buf_initial_size =
|
||||
(context->desc.av1enc.rc[i].vbv_buffer_size * context->desc.av1enc.rc[i].vbv_buf_lv) >> 6;
|
||||
}
|
||||
|
||||
return VA_STATUS_SUCCESS;
|
||||
|
|
|
|||
|
|
@ -840,13 +840,23 @@ vlVaHandleVAEncMiscParameterTypeHRDH264(vlVaContext *context, VAEncMiscParameter
|
|||
{
|
||||
VAEncMiscParameterHRD *ms = (VAEncMiscParameterHRD *)misc->data;
|
||||
|
||||
if (ms->buffer_size) {
|
||||
context->desc.h264enc.rate_ctrl[0].vbv_buffer_size = ms->buffer_size;
|
||||
context->desc.h264enc.rate_ctrl[0].vbv_buf_lv = (ms->initial_buffer_fullness << 6 ) / ms->buffer_size;
|
||||
context->desc.h264enc.rate_ctrl[0].vbv_buf_initial_size = ms->initial_buffer_fullness;
|
||||
/* Distinguishes from the default params set for these values in other
|
||||
if (ms->buffer_size == 0)
|
||||
return VA_STATUS_ERROR_INVALID_PARAMETER;
|
||||
|
||||
/* Distinguishes from the default params set for these values in other
|
||||
functions and app specific params passed down via HRD buffer */
|
||||
context->desc.h264enc.rate_ctrl[0].app_requested_hrd_buffer = true;
|
||||
context->desc.h264enc.rate_ctrl[0].app_requested_hrd_buffer = true;
|
||||
context->desc.h264enc.rate_ctrl[0].vbv_buffer_size = ms->buffer_size;
|
||||
context->desc.h264enc.rate_ctrl[0].vbv_buf_lv = (ms->initial_buffer_fullness << 6) / ms->buffer_size;
|
||||
context->desc.h264enc.rate_ctrl[0].vbv_buf_initial_size = ms->initial_buffer_fullness;
|
||||
|
||||
for (unsigned i = 1; i < context->desc.h264enc.seq.num_temporal_layers; i++) {
|
||||
context->desc.h264enc.rate_ctrl[i].vbv_buffer_size =
|
||||
(float)ms->buffer_size / context->desc.h264enc.rate_ctrl[0].peak_bitrate *
|
||||
context->desc.h264enc.rate_ctrl[i].peak_bitrate;
|
||||
context->desc.h264enc.rate_ctrl[i].vbv_buf_lv = context->desc.h264enc.rate_ctrl[0].vbv_buf_lv;
|
||||
context->desc.h264enc.rate_ctrl[i].vbv_buf_initial_size =
|
||||
(context->desc.h264enc.rate_ctrl[i].vbv_buffer_size * context->desc.h264enc.rate_ctrl[i].vbv_buf_lv) >> 6;
|
||||
}
|
||||
|
||||
return VA_STATUS_SUCCESS;
|
||||
|
|
|
|||
|
|
@ -1089,13 +1089,23 @@ vlVaHandleVAEncMiscParameterTypeHRDHEVC(vlVaContext *context, VAEncMiscParameter
|
|||
{
|
||||
VAEncMiscParameterHRD *ms = (VAEncMiscParameterHRD *)misc->data;
|
||||
|
||||
if (ms->buffer_size) {
|
||||
context->desc.h265enc.rc[0].vbv_buffer_size = ms->buffer_size;
|
||||
context->desc.h265enc.rc[0].vbv_buf_lv = (ms->initial_buffer_fullness << 6 ) / ms->buffer_size;
|
||||
context->desc.h265enc.rc[0].vbv_buf_initial_size = ms->initial_buffer_fullness;
|
||||
/* Distinguishes from the default params set for these values in other
|
||||
functions and app specific params passed down via HRD buffer */
|
||||
context->desc.h265enc.rc[0].app_requested_hrd_buffer = true;
|
||||
if (ms->buffer_size == 0)
|
||||
return VA_STATUS_ERROR_INVALID_PARAMETER;
|
||||
|
||||
/* Distinguishes from the default params set for these values in other
|
||||
functions and app specific params passed down via HRD buffer */
|
||||
context->desc.h265enc.rc[0].app_requested_hrd_buffer = true;
|
||||
context->desc.h265enc.rc[0].vbv_buffer_size = ms->buffer_size;
|
||||
context->desc.h265enc.rc[0].vbv_buf_lv = (ms->initial_buffer_fullness << 6) / ms->buffer_size;
|
||||
context->desc.h265enc.rc[0].vbv_buf_initial_size = ms->initial_buffer_fullness;
|
||||
|
||||
for (unsigned i = 1; i < context->desc.h265enc.seq.num_temporal_layers; i++) {
|
||||
context->desc.h265enc.rc[i].vbv_buffer_size =
|
||||
(float)ms->buffer_size / context->desc.h265enc.rc[0].peak_bitrate *
|
||||
context->desc.h265enc.rc[i].peak_bitrate;
|
||||
context->desc.h265enc.rc[i].vbv_buf_lv = context->desc.h265enc.rc[0].vbv_buf_lv;
|
||||
context->desc.h265enc.rc[i].vbv_buf_initial_size =
|
||||
(context->desc.h265enc.rc[i].vbv_buffer_size * context->desc.h265enc.rc[i].vbv_buf_lv) >> 6;
|
||||
}
|
||||
|
||||
return VA_STATUS_SUCCESS;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue