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:
David Rosca
2024-08-23 11:56:58 +02:00
committed by Marge Bot
parent 1866f4d899
commit 12f60c1cd1
3 changed files with 4 additions and 1 deletions
@@ -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;
+2 -1
View File
@@ -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;
}
+1
View File
@@ -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