mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
frontends/va: Add HEVC decode slice descriptors
Adds HEVC decoded slice descriptors to the pipe interface and also to the VA frontend Reviewed-by: Ruijing Dong <ruijing.dong@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18328>
This commit is contained in:
parent
2aa4ed16e2
commit
a6e32bf15b
2 changed files with 54 additions and 0 deletions
|
|
@ -177,6 +177,12 @@ void vlVaHandlePictureParameterBufferHEVC(vlVaDriver *drv, vlVaContext *context,
|
|||
}
|
||||
context->desc.h265.pps->st_rps_bits = hevc->st_rps_bits;
|
||||
context->desc.h265.UseStRpsBits = true;
|
||||
|
||||
context->desc.h265.slice_parameter.slice_count = 0;
|
||||
context->desc.h265.slice_parameter.slice_info_present = false;
|
||||
memset(context->desc.h265.slice_parameter.slice_data_flag, 0, sizeof(context->desc.h265.slice_parameter.slice_data_flag));
|
||||
memset(context->desc.h265.slice_parameter.slice_data_offset, 0, sizeof(context->desc.h265.slice_parameter.slice_data_offset));
|
||||
memset(context->desc.h265.slice_parameter.slice_data_size, 0, sizeof(context->desc.h265.slice_parameter.slice_data_size));
|
||||
}
|
||||
|
||||
void vlVaHandleIQMatrixBufferHEVC(vlVaContext *context, vlVaBuffer *buf)
|
||||
|
|
@ -220,4 +226,31 @@ void vlVaHandleSliceParameterBufferHEVC(vlVaContext *context, vlVaBuffer *buf)
|
|||
context->desc.h265.RefPicList[i][j] = h265->RefPicList[i][j];
|
||||
}
|
||||
context->desc.h265.UseRefPicList = true;
|
||||
|
||||
const size_t max_pipe_hevc_slices = ARRAY_SIZE(context->desc.h265.slice_parameter.slice_data_offset);
|
||||
assert(context->desc.h265.slice_parameter.slice_count < max_pipe_hevc_slices);
|
||||
|
||||
context->desc.h265.slice_parameter.slice_info_present = true;
|
||||
context->desc.h265.slice_parameter.slice_data_size[context->desc.h265.slice_parameter.slice_count] = h265->slice_data_size;
|
||||
context->desc.h265.slice_parameter.slice_data_offset[context->desc.h265.slice_parameter.slice_count] = h265->slice_data_offset;
|
||||
|
||||
switch (h265->slice_data_flag) {
|
||||
case VA_SLICE_DATA_FLAG_ALL:
|
||||
context->desc.h265.slice_parameter.slice_data_flag[context->desc.h265.slice_parameter.slice_count] = PIPE_SLICE_BUFFER_PLACEMENT_TYPE_WHOLE;
|
||||
break;
|
||||
case VA_SLICE_DATA_FLAG_BEGIN:
|
||||
context->desc.h265.slice_parameter.slice_data_flag[context->desc.h265.slice_parameter.slice_count] = PIPE_SLICE_BUFFER_PLACEMENT_TYPE_BEGIN;
|
||||
break;
|
||||
case VA_SLICE_DATA_FLAG_MIDDLE:
|
||||
context->desc.h265.slice_parameter.slice_data_flag[context->desc.h265.slice_parameter.slice_count] = PIPE_SLICE_BUFFER_PLACEMENT_TYPE_MIDDLE;
|
||||
break;
|
||||
case VA_SLICE_DATA_FLAG_END:
|
||||
context->desc.h265.slice_parameter.slice_data_flag[context->desc.h265.slice_parameter.slice_count] = PIPE_SLICE_BUFFER_PLACEMENT_TYPE_END;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* assert(buf->num_elements == 1) above; */
|
||||
context->desc.h265.slice_parameter.slice_count++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,6 +131,18 @@ enum pipe_h2645_enc_rate_control_method
|
|||
PIPE_H2645_ENC_RATE_CONTROL_METHOD_VARIABLE = 0x04
|
||||
};
|
||||
|
||||
enum pipe_slice_buffer_placement_type
|
||||
{
|
||||
/* whole slice is in the buffer */
|
||||
PIPE_SLICE_BUFFER_PLACEMENT_TYPE_WHOLE = 0x0,
|
||||
/* The beginning of the slice is in the buffer but the end is not */
|
||||
PIPE_SLICE_BUFFER_PLACEMENT_TYPE_BEGIN = 0x1,
|
||||
/* Neither beginning nor end of the slice is in the buffer */
|
||||
PIPE_SLICE_BUFFER_PLACEMENT_TYPE_MIDDLE = 0x2,
|
||||
/* end of the slice is in the buffer */
|
||||
PIPE_SLICE_BUFFER_PLACEMENT_TYPE_END = 0x3,
|
||||
};
|
||||
|
||||
struct pipe_picture_desc
|
||||
{
|
||||
enum pipe_video_profile profile;
|
||||
|
|
@ -659,6 +671,15 @@ struct pipe_h265_picture_desc
|
|||
uint8_t RefPicList[2][15];
|
||||
bool UseRefPicList;
|
||||
bool UseStRpsBits;
|
||||
|
||||
struct
|
||||
{
|
||||
bool slice_info_present;
|
||||
uint32_t slice_count;
|
||||
uint32_t slice_data_size[128];
|
||||
uint32_t slice_data_offset[128];
|
||||
enum pipe_slice_buffer_placement_type slice_data_flag[128];
|
||||
} slice_parameter;
|
||||
};
|
||||
|
||||
struct pipe_mjpeg_picture_desc
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue