frontends/va: Allow multiple NALUs in coded buffer segments
Add PIPE_VIDEO_CODEC_UNIT_LOCATION_FLAG_SINGLE_NALU to set VA_CODED_BUF_STATUS_SINGLE_NALU for each segment. Always set this flag in d3d12 to keep the old behavior. 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/30927>
This commit is contained in:
@@ -2481,6 +2481,7 @@ d3d12_video_encoder_get_feedback(struct pipe_video_codec *codec,
|
||||
{
|
||||
uint64_t unpadded_slice_size = pSubregionsMetadata[i].bSize - pSubregionsMetadata[i].bStartOffset;
|
||||
unpadded_frame_size += unpadded_slice_size;
|
||||
opt_metadata.codec_unit_metadata[opt_metadata.codec_unit_metadata_count].flags = PIPE_VIDEO_CODEC_UNIT_LOCATION_FLAG_SINGLE_NALU;
|
||||
opt_metadata.codec_unit_metadata[opt_metadata.codec_unit_metadata_count].size = unpadded_slice_size;
|
||||
opt_metadata.codec_unit_metadata[opt_metadata.codec_unit_metadata_count].offset = *output_buffer_size;
|
||||
*output_buffer_size += pSubregionsMetadata[i].bSize;
|
||||
|
||||
@@ -234,11 +234,12 @@ VAStatus vlVaMapBuffer2(VADriverContextP ctx, VABufferID buf_id,
|
||||
|
||||
curr_buf_ptr = buf->data;
|
||||
for (size_t i = 0; i < buf->extended_metadata.codec_unit_metadata_count; i++) {
|
||||
curr_buf_ptr->status |= VA_CODED_BUF_STATUS_SINGLE_NALU;
|
||||
curr_buf_ptr->size = buf->extended_metadata.codec_unit_metadata[i].size;
|
||||
curr_buf_ptr->buf = compressed_bitstream_data + buf->extended_metadata.codec_unit_metadata[i].offset;
|
||||
if (buf->extended_metadata.codec_unit_metadata[i].flags & PIPE_VIDEO_CODEC_UNIT_LOCATION_FLAG_MAX_SLICE_SIZE_OVERFLOW)
|
||||
curr_buf_ptr->status |= VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK;
|
||||
if (buf->extended_metadata.codec_unit_metadata[i].flags & PIPE_VIDEO_CODEC_UNIT_LOCATION_FLAG_SINGLE_NALU)
|
||||
curr_buf_ptr->status |= VA_CODED_BUF_STATUS_SINGLE_NALU;
|
||||
|
||||
curr_buf_ptr = curr_buf_ptr->next;
|
||||
}
|
||||
|
||||
@@ -192,6 +192,7 @@ enum codec_unit_location_flags
|
||||
PIPE_VIDEO_CODEC_UNIT_LOCATION_FLAG_NONE = 0x0,
|
||||
/* Requires PIPE_VIDEO_FEEDBACK_METADATA_TYPE_MAX_SLICE_SIZE_OVERFLOW */
|
||||
PIPE_VIDEO_CODEC_UNIT_LOCATION_FLAG_MAX_SLICE_SIZE_OVERFLOW = 0x1,
|
||||
PIPE_VIDEO_CODEC_UNIT_LOCATION_FLAG_SINGLE_NALU = 0x2,
|
||||
};
|
||||
|
||||
/* To be used with PIPE_VIDEO_CAP_ENC_SUPPORTS_FEEDBACK_METADATA
|
||||
|
||||
Reference in New Issue
Block a user