frontends/va: check hevc enc hdr sei
Decode packed header HDR sei for hevc encoding. Signed-off-by: Yinjie Yao <yinjie.yao@amd.com> Reviewed-by: Boyuan Zhang <boyuan.zhang@amd.com> Reviewed-by: Ruijing Dong <ruijing.dong@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30388>
This commit is contained in:
@@ -148,6 +148,8 @@ vlVaBeginPicture(VADriverContextP ctx, VAContextID context_id, VASurfaceID rende
|
||||
context->desc.av1enc.metadata_flags.value = 0;
|
||||
break;
|
||||
case PIPE_VIDEO_FORMAT_HEVC:
|
||||
context->desc.h265enc.metadata_flags.value = 0;
|
||||
break;
|
||||
case PIPE_VIDEO_FORMAT_MPEG4_AVC:
|
||||
default:
|
||||
break;
|
||||
|
@@ -35,6 +35,12 @@ enum HEVCNALUnitType {
|
||||
HEVC_NAL_VPS = 32,
|
||||
HEVC_NAL_SPS = 33,
|
||||
HEVC_NAL_PPS = 34,
|
||||
HEVC_NAL_PREFIX_SEI = 39,
|
||||
};
|
||||
|
||||
enum HEVCSEIPayloadType {
|
||||
MASTERING_DISPLAY_COLOUR_VOLUME = 137,
|
||||
CONTENT_LIGHT_LEVEL_INFO = 144,
|
||||
};
|
||||
|
||||
VAStatus
|
||||
@@ -680,6 +686,53 @@ static void parseEncSpsParamsH265(vlVaContext *context, struct vl_rbsp *rbsp)
|
||||
if (st_rps) FREE(st_rps);
|
||||
}
|
||||
|
||||
static void parseEncSeiPayloadH265(vlVaContext *context, struct vl_rbsp *rbsp, int payloadType, int payloadSize)
|
||||
{
|
||||
switch (payloadType) {
|
||||
case MASTERING_DISPLAY_COLOUR_VOLUME:
|
||||
context->desc.h265enc.metadata_flags.hdr_mdcv = 1;
|
||||
for (int32_t i = 0; i < 3; i++) {
|
||||
context->desc.h265enc.metadata_hdr_mdcv.primary_chromaticity_x[i] = vl_rbsp_u(rbsp, 16);
|
||||
context->desc.h265enc.metadata_hdr_mdcv.primary_chromaticity_y[i] = vl_rbsp_u(rbsp, 16);
|
||||
}
|
||||
context->desc.h265enc.metadata_hdr_mdcv.white_point_chromaticity_x = vl_rbsp_u(rbsp, 16);
|
||||
context->desc.h265enc.metadata_hdr_mdcv.white_point_chromaticity_y = vl_rbsp_u(rbsp, 16);
|
||||
context->desc.h265enc.metadata_hdr_mdcv.luminance_max = vl_rbsp_u(rbsp, 32);
|
||||
context->desc.h265enc.metadata_hdr_mdcv.luminance_min = vl_rbsp_u(rbsp, 32);
|
||||
break;
|
||||
case CONTENT_LIGHT_LEVEL_INFO:
|
||||
context->desc.h265enc.metadata_flags.hdr_cll = 1;
|
||||
context->desc.h265enc.metadata_hdr_cll.max_cll= vl_rbsp_u(rbsp, 16);
|
||||
context->desc.h265enc.metadata_hdr_cll.max_fall= vl_rbsp_u(rbsp, 16);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void parseEncSeiH265(vlVaContext *context, struct vl_rbsp *rbsp)
|
||||
{
|
||||
do {
|
||||
/* sei_message() */
|
||||
int payloadType = 0;
|
||||
int payloadSize = 0;
|
||||
|
||||
int byte = 0xFF;
|
||||
while (byte == 0xFF) {
|
||||
byte = vl_rbsp_u(rbsp, 8);
|
||||
payloadType += byte;
|
||||
}
|
||||
|
||||
byte = 0xFF;
|
||||
while (byte == 0xFF) {
|
||||
byte = vl_rbsp_u(rbsp, 8);
|
||||
payloadSize += byte;
|
||||
}
|
||||
parseEncSeiPayloadH265(context, rbsp, payloadType, payloadSize);
|
||||
|
||||
} while (vl_rbsp_more_data(rbsp));
|
||||
}
|
||||
|
||||
VAStatus
|
||||
vlVaHandleVAEncPackedHeaderDataBufferTypeHEVC(vlVaContext *context, vlVaBuffer *buf)
|
||||
{
|
||||
@@ -712,7 +765,12 @@ vlVaHandleVAEncPackedHeaderDataBufferTypeHEVC(vlVaContext *context, vlVaBuffer *
|
||||
parseEncSpsParamsH265(context, &rbsp);
|
||||
break;
|
||||
case HEVC_NAL_VPS:
|
||||
break;
|
||||
case HEVC_NAL_PPS:
|
||||
break;
|
||||
case HEVC_NAL_PREFIX_SEI:
|
||||
parseEncSeiH265(context, &rbsp);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@@ -86,7 +86,8 @@
|
||||
#define VBAQ_AUTO (1)
|
||||
|
||||
#define ENC_PACKED_HEADERS_H264 (VA_ENC_PACKED_HEADER_SEQUENCE)
|
||||
#define ENC_PACKED_HEADERS_HEVC (VA_ENC_PACKED_HEADER_SEQUENCE)
|
||||
#define ENC_PACKED_HEADERS_HEVC (VA_ENC_PACKED_HEADER_SEQUENCE | \
|
||||
VA_ENC_PACKED_HEADER_MISC)
|
||||
#define ENC_PACKED_HEADERS_AV1 (VA_ENC_PACKED_HEADER_SEQUENCE | \
|
||||
VA_ENC_PACKED_HEADER_PICTURE | \
|
||||
VA_ENC_PACKED_HEADER_MISC)
|
||||
|
@@ -889,6 +889,17 @@ struct pipe_h265_enc_picture_desc
|
||||
unsigned max_slice_bytes;
|
||||
enum pipe_video_feedback_metadata_type requested_metadata;
|
||||
bool renew_headers_on_idr;
|
||||
|
||||
union {
|
||||
struct {
|
||||
uint32_t hdr_cll:1;
|
||||
uint32_t hdr_mdcv:1;
|
||||
};
|
||||
uint32_t value;
|
||||
} metadata_flags;
|
||||
|
||||
struct pipe_enc_hdr_cll metadata_hdr_cll;
|
||||
struct pipe_enc_hdr_mdcv metadata_hdr_mdcv;
|
||||
};
|
||||
|
||||
struct pipe_av1_enc_rate_control
|
||||
|
Reference in New Issue
Block a user