Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Mark Thompson <sw@jkqxz.net>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH avcodec/amfenc: 10 bit support, v4, 1/3] avcodec/amfenc: Fixes the color information in the output.
Date: Wed, 18 Oct 2023 21:48:41 +0100
Message-ID: <ab9baa02-6996-4041-968d-cb331cc68e06@jkqxz.net> (raw)
In-Reply-To: <CADnG-DQ=9O+dRF7Tuj-EOWuHPz85PFyyOVZg+7YqZcGYH74qbg@mail.gmail.com>

On 17/10/2023 19:00, Evgeny Pavlov wrote:
> On Mon, Oct 16, 2023 at 11:41 PM Mark Thompson <sw@jkqxz.net> wrote:
> ...
>>> @@ -785,6 +787,41 @@ int ff_amf_receive_packet(AVCodecContext *avctx,
>> AVPacket *avpkt)
>>>        return ret;
>>>    }
>>>
>>> +int ff_amf_get_color_profile(AVCodecContext *avctx)
>>> +{
>>> +    amf_int64 color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN;
>>
>> Can you explain what this CONVERTER_COLOR_PROFILE option is actually doing?
>>
>> You've passed the primaries and transfer function to AMF options later on,
>> but this seems to then only consider a subset of possible matrices rather
>> than just passing that through as well to write into the VUI metadata.  Why?
>>
>> (If this isn't supported by AMF then a more correct solution might be to
>> insert a metadata BSF to edit the correct values into the output stream
>> after it has been encoded.)
>>
>> When RGB surface is submitted, AMF encoder not only writes VUI header but
> also does color conversion. In this case CONVERTER_COLOR_PROFILE defines
> color conversion matrix. This conversion may happen with shaders or inside
> VCN if it is capable to do so.
> 
> These are input parameters for conversion – if conversion is involved:
> AMF_VIDEO_ENCODER_INPUT_COLOR_PROFILE – for color conversion: limited
> number of color spaces is supported.
> AMF_VIDEO_ENCODER_INPUT_TRANSFER_CHARACTERISTIC
> AMF_VIDEO_ENCODER_INPUT_COLOR_PRIMARIES
> AMF_VIDEO_ENCODER_INPUT_HDR_METADATA
> 
> These are output parameters for conversion and data for VUI:
> AMF_VIDEO_ENCODER_OUTPUT_COLOR_PROFILE – for VUI only, used if color
> conversion is done outside of AMF
> AMF_VIDEO_ENCODER_OUTPUT_TRANSFER_CHARACTERISTIC
> AMF_VIDEO_ENCODER_OUTPUT_COLOR_PRIMARIES
> AMF_VIDEO_ENCODER_OUTPUT_HDR_METADATA
> 
> It would be possible to add unsupported color matrices via editing VUI in
> the output stream but it is better to do it via a separate patch as
> supported covers most common use cases.

How does the setup you have here support the most common case, where that the user has the input in the right format and just wants the colour properties that they have set (primaries/transfer/matrix/range/chroma location) to be written directly into the encoded stream?

(In most encoders this is the only case, since ad-hoc conversion of the input like this is generally considered out-of-scope and done separately.)

>>> +    if (avctx->color_range == AVCOL_RANGE_JPEG) {
>>> +        /// Color Space for Full (JPEG) Range
>>> +        switch (avctx->colorspace) {
>>> +        case AVCOL_SPC_SMPTE170M:
>>> +            color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_601;
>>> +            break;
>>> +        case AVCOL_SPC_BT709:
>>> +            color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_709;
>>> +            break;
>>> +        case AVCOL_SPC_BT2020_NCL:
>>> +        case AVCOL_SPC_BT2020_CL:
>>> +            color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_2020;
>>> +            break;
>>> +        }
>>> +    } else {
>>> +        /// Color Space for Limited (MPEG) range
>>> +        switch (avctx->colorspace) {
>>> +        case AVCOL_SPC_SMPTE170M:
>>> +            color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_601;
>>> +            break;
>>> +        case AVCOL_SPC_BT709:
>>> +            color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_709;
>>> +            break;
>>> +        case AVCOL_SPC_BT2020_NCL:
>>> +        case AVCOL_SPC_BT2020_CL:
>>> +            color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_2020;
>>> +            break;
>>> +        }
>>> +    }
>>> +    return color_profile;
>>> +}
>>> +
>>>    const AVCodecHWConfigInternal *const ff_amfenc_hw_configs[] = {
>>>    #if CONFIG_D3D11VA
>>>        HW_CONFIG_ENCODER_FRAMES(D3D11, D3D11VA),
>>> ...
>>> +    pix_fmt = avctx->hw_frames_ctx ?
>> ((AVHWFramesContext*)avctx->hw_frames_ctx->data)->sw_format
>>> +                                    : avctx->pix_fmt;
>>> +    if (pix_fmt == AV_PIX_FMT_P010) {
>>> +        color_depth = AMF_COLOR_BIT_DEPTH_10;
>>> +    }
>>> +    AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder,
>> AMF_VIDEO_ENCODER_HEVC_COLOR_BIT_DEPTH, color_depth);
>>
>> Is this the input bit depth or the codec bit depth?  (Can they be
>> different?)
>>
> According to AMF documentation, this property "sets the number of bits in
> each pixel’s color component in the encoder’s compressed output bitstream".
> We should set up correct bit depth for encoder if we have 10-bit input

Doesn't that mean it should be set based on the profile rather than the input bit depth?

(Or, if only the input bit depth is supported then you probably want to validate above that the profile and input bit depth actually match.)

>>> +    /// 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);
>>> +

Thanks,

- Mark
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  reply	other threads:[~2023-10-18 20:48 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-07 13:41 [FFmpeg-devel] [avcodec/amfenc: 10 bit support v2 1/3] amf: Update the min version to 1.4.23.0 for AMF SDK OvchinnikovDmitrii
2022-09-07 13:41 ` [FFmpeg-devel] [avcodec/amfenc: 10 bit support v2 2/3] avcodec/amfenc: Fixes the color information in the output OvchinnikovDmitrii
2023-01-19 21:11   ` Michael Niedermayer
2022-09-07 13:41 ` [FFmpeg-devel] [avcodec/amfenc: 10 bit support v2 3/3] avcodec/amfenc: HDR metadata OvchinnikovDmitrii
2022-09-07 19:59 ` [FFmpeg-devel] [avcodec/amfenc: 10 bit support v2 1/3] amf: Update the min version to 1.4.23.0 for AMF SDK Jean-Baptiste Kempf
2022-09-07 22:54 ` Dmitrii Ovchinnikov
2022-10-25 15:56 ` Dmitrii Ovchinnikov
2023-07-26 11:39 ` [FFmpeg-devel] [PATCH avcodec/amfenc:, 10, bit, support, v3, 1/3] avcodec/amfenc: Fixes the color information in the output Evgeny Pavlov
2023-07-26 11:39   ` [FFmpeg-devel] [PATCH avcodec/amfenc:, 10, bit, support, v3, 2/3] avcodec/amfenc: HDR metadata Evgeny Pavlov
2023-07-26 11:39   ` [FFmpeg-devel] [PATCH avcodec/amfenc:, 10, bit, support, v3, 3/3] avcodec/amfenc: add 10 bit encoding in av1_amf Evgeny Pavlov
2023-10-03 18:02   ` [FFmpeg-devel] [PATCH avcodec/amfenc:, 10, bit, support, v3, 1/3] avcodec/amfenc: Fixes the color information in the output Michael Niedermayer
2023-10-09  9:52   ` [FFmpeg-devel] [PATCH avcodec/amfenc: 10 bit support, v4, " Evgeny Pavlov
2023-10-09  9:52     ` [FFmpeg-devel] [PATCH 10 bit support, v4, 2/3] avcodec/amfenc: HDR metadata Evgeny Pavlov
2023-10-09  9:52     ` [FFmpeg-devel] [PATCH 10 bit support, v4, 3/3] avcodec/amfenc: add 10 bit encoding in av1_amf Evgeny Pavlov
2023-10-16 21:41     ` [FFmpeg-devel] [PATCH avcodec/amfenc: 10 bit support, v4, 1/3] avcodec/amfenc: Fixes the color information in the output Mark Thompson
2023-10-17 18:00       ` Evgeny Pavlov
2023-10-18 20:48         ` Mark Thompson [this message]
2023-10-20 13:41           ` Evgeny Pavlov
2023-10-23 13:45     ` [FFmpeg-devel] [PATCH avcodec/amfenc: 10-bit support, v5, " Evgeny Pavlov
2023-10-23 13:46     ` [FFmpeg-devel] [PATCH avcodec/amfenc: 10-bit support, v5, 2/3] avcodec/amfenc: HDR metadata Evgeny Pavlov
2023-10-23 13:46     ` [FFmpeg-devel] [PATCH avcodec/amfenc: 10-bit support, v5, 3/3] avcodec/amfenc: add 10 bit encoding in av1_amf Evgeny Pavlov
2023-10-31 17:42     ` [FFmpeg-devel] [PATCH 10 bit support v5 1/3] avcodec/amfenc: Fixes the color information in the output Evgeny Pavlov
2023-10-31 17:42     ` [FFmpeg-devel] [PATCH 10 bit support v5 2/3] avcodec/amfenc: HDR metadata Evgeny Pavlov
2023-10-31 17:42     ` [FFmpeg-devel] [PATCH 10bit support v5 3/3] avcodec/amfenc: add 10 bit encoding in av1_amf Evgeny Pavlov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ab9baa02-6996-4041-968d-cb331cc68e06@jkqxz.net \
    --to=sw@jkqxz.net \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git