[FFmpeg-devel] [PATCH] avcodec/amfenc: Fix HEVC/AV1 colorspace assumptions
Araz
primeadvice at gmail.com
Mon Sep 9 17:26:01 EEST 2024
> - 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);
> - }
> + /// Color Transfer Characteristics (AMF matches ISO/IEC)
> + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder,
AMF_VIDEO_ENCODER_AV1_OUTPUT_TRANSFER_CHARACTERISTIC,
(amf_int64)avctx->color_trc);
> + /// Color Primaries (AMF matches ISO/IEC)
> + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder,
AMF_VIDEO_ENCODER_AV1_OUTPUT_COLOR_PRIMARIES,
(amf_int64)avctx->color_primaries);
> - 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_HEVC_OUTPUT_TRANSFER_CHARACTERISTIC,
AMF_COLOR_TRANSFER_CHARACTERISTIC_BT709);
> - /// Color Primaries (AMF matches ISO/IEC)
> - AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder,
AMF_VIDEO_ENCODER_HEVC_OUTPUT_COLOR_PRIMARIES, AMF_COLOR_PRIMARIES_BT709);
> - } else {
> - AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder,
AMF_VIDEO_ENCODER_HEVC_OUTPUT_TRANSFER_CHARACTERISTIC,
AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE2084);
> - AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder,
AMF_VIDEO_ENCODER_HEVC_OUTPUT_COLOR_PRIMARIES, AMF_COLOR_PRIMARIES_BT2020);
> - }
> + /// Color Transfer Characteristics (AMF matches ISO/IEC)
> + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder,
AMF_VIDEO_ENCODER_HEVC_OUTPUT_TRANSFER_CHARACTERISTIC,
(amf_int64)avctx->color_trc);
> + /// Color Primaries (AMF matches ISO/IEC)
> + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder,
AMF_VIDEO_ENCODER_HEVC_OUTPUT_COLOR_PRIMARIES,
(amf_int64)avctx->color_primaries);
Current hardware color space converter does not support transfer
characteristics other than this:
(BT709 for 8-bit output and BT2084 for 10-bit output) so for RGB input
we need them hard-coded. If conversion is done before AMF encoder, the
encoder can accept any value as it is just fields in VUI header.
So, we will come with a separate patch which would reflect this logic.
I also answered the same on your comment to my patch:
avcodec/amfenc: Fixes the color information in the output.
More information about the ffmpeg-devel
mailing list