mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-28 20:53:54 +02:00
avcodec/amfenc: add 10 bit encoding in av1_amf
v2: refactored after review Signed-off-by: Evgeny Pavlov <lucenticus@gmail.com> Co-authored-by: Dmitrii Ovchinnikov <ovchinnikov.dmitrii@gmail.com> Co-authored-by: Araz Iusubov <Primeadvice@gmail.com> Signed-off-by: Dmitrii Ovchinnikov <ovchinnikov.dmitrii@gmail.com>
This commit is contained in:
parent
628762034d
commit
9f02408583
@ -746,6 +746,8 @@ int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt)
|
||||
AMF_ASSIGN_PROPERTY_INTERFACE(res, ctx->encoder, AMF_VIDEO_ENCODER_INPUT_HDR_METADATA, hdrmeta_buffer); break;
|
||||
case AV_CODEC_ID_HEVC:
|
||||
AMF_ASSIGN_PROPERTY_INTERFACE(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_INPUT_HDR_METADATA, hdrmeta_buffer); break;
|
||||
case AV_CODEC_ID_AV1:
|
||||
AMF_ASSIGN_PROPERTY_INTERFACE(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_INPUT_HDR_METADATA, hdrmeta_buffer); break;
|
||||
}
|
||||
res = amf_set_property_buffer(surface, L"av_frame_hdrmeta", hdrmeta_buffer);
|
||||
AMF_RETURN_IF_FALSE(avctx, res == AMF_OK, AVERROR_UNKNOWN, "SetProperty failed for \"av_frame_hdrmeta\" with error %d\n", res);
|
||||
|
@ -185,7 +185,9 @@ static av_cold int amf_encode_init_av1(AVCodecContext* avctx)
|
||||
AMFGuid guid;
|
||||
AMFRate framerate;
|
||||
AMFSize framesize = AMFConstructSize(avctx->width, avctx->height);
|
||||
|
||||
amf_int64 color_depth;
|
||||
amf_int64 color_profile;
|
||||
enum AVPixelFormat pix_fmt;
|
||||
|
||||
//for av1 alignment and crop
|
||||
uint32_t crop_right = 0;
|
||||
@ -235,6 +237,30 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_PROFILE, profile);
|
||||
}
|
||||
|
||||
/// Color profile
|
||||
color_profile = ff_amf_get_color_profile(avctx);
|
||||
AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_OUTPUT_COLOR_PROFILE, color_profile);
|
||||
|
||||
/// Color Depth
|
||||
pix_fmt = avctx->hw_frames_ctx ? ((AVHWFramesContext*)avctx->hw_frames_ctx->data)->sw_format
|
||||
: avctx->pix_fmt;
|
||||
color_depth = AMF_COLOR_BIT_DEPTH_8;
|
||||
if (pix_fmt == AV_PIX_FMT_P010) {
|
||||
color_depth = AMF_COLOR_BIT_DEPTH_10;
|
||||
}
|
||||
|
||||
AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_COLOR_BIT_DEPTH, color_depth);
|
||||
AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_OUTPUT_COLOR_PROFILE, color_profile);
|
||||
if (color_depth == AMF_COLOR_BIT_DEPTH_8) {
|
||||
/// Color Transfer Characteristics (AMF matches ISO/IEC)
|
||||
AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_OUTPUT_TRANSFER_CHARACTERISTIC, AMF_COLOR_TRANSFER_CHARACTERISTIC_BT709);
|
||||
/// Color Primaries (AMF matches ISO/IEC)
|
||||
AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_OUTPUT_COLOR_PRIMARIES, AMF_COLOR_PRIMARIES_BT709);
|
||||
} else {
|
||||
AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_OUTPUT_TRANSFER_CHARACTERISTIC, AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE2084);
|
||||
AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_OUTPUT_COLOR_PRIMARIES, AMF_COLOR_PRIMARIES_BT2020);
|
||||
}
|
||||
|
||||
profile_level = avctx->level;
|
||||
if (profile_level == AV_LEVEL_UNKNOWN) {
|
||||
profile_level = ctx->level;
|
||||
|
Loading…
Reference in New Issue
Block a user