From: Mark Thompson <sw@jkqxz.net>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH v3 2/2] lavc/vaapi_encode_h265: Set general_*_constriaint flags with profile
Date: Mon, 18 Mar 2024 21:22:39 +0000
Message-ID: <4cdd5a84-8547-48ea-b0e5-62ca20da39a3@jkqxz.net> (raw)
In-Reply-To: <20240318042111.21983-2-fei.w.wang@intel.com>
On 18/03/2024 04:21, fei.w.wang-at-intel.com@ffmpeg.org wrote:
> From: Fei Wang <fei.w.wang@intel.com>
>
> According to Table A.2 in spec.
>
> Signed-off-by: Fei Wang <fei.w.wang@intel.com>
> ---
> libavcodec/vaapi_encode_h265.c | 176 +++++++++++++++++++++++----------
> 1 file changed, 123 insertions(+), 53 deletions(-)
>
> diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c
> index 43755e2188..5ed317ce11 100644
> --- a/libavcodec/vaapi_encode_h265.c
> +++ b/libavcodec/vaapi_encode_h265.c
> @@ -258,6 +258,124 @@ fail:
> return err;
> }
>
> +static int vaapi_encode_h265_init_ptl(AVCodecContext *avctx)
> +{
> + VAAPIEncodeContext *ctx = avctx->priv_data;
> + VAAPIEncodeH265Context *priv = avctx->priv_data;
> + H265RawVPS *vps = &priv->raw_vps;
> + H265RawProfileTierLevel *ptl = &vps->profile_tier_level;
> +
> + ptl->general_profile_space = 0;
> + ptl->general_profile_idc = avctx->profile;
> + ptl->general_tier_flag = priv->tier;
> +
> + ptl->general_profile_compatibility_flag[ptl->general_profile_idc] = 1;
> +
> + if (ptl->general_profile_compatibility_flag[1])
> + ptl->general_profile_compatibility_flag[2] = 1;
> + if (ptl->general_profile_compatibility_flag[3]) {
> + ptl->general_profile_compatibility_flag[1] = 1;
> + ptl->general_profile_compatibility_flag[2] = 1;
> + }
> +
> + ptl->general_progressive_source_flag = 1;
> + ptl->general_interlaced_source_flag = 0;
> + ptl->general_non_packed_constraint_flag = 1;
> + ptl->general_frame_only_constraint_flag = 1;
> +
> + if (avctx->profile >= 4) {
> + ptl->general_intra_constraint_flag = ctx->gop_size == 1;
> + ptl->general_one_picture_only_constraint_flag = 0;
> + ptl->general_lower_bit_rate_constraint_flag = 1;
> + ptl->general_max_14bit_constraint_flag = 0;
> +
> + switch (ctx->va_profile) {
> +#if VA_CHECK_VERSION(1, 2, 0)
> + case VAProfileHEVCMain12:
> + // Main 12
> + ptl->general_max_12bit_constraint_flag = 1;
> + ptl->general_max_10bit_constraint_flag = 0;
> + ptl->general_max_8bit_constraint_flag = 0;
> + ptl->general_max_422chroma_constraint_flag = 1;
> + ptl->general_max_420chroma_constraint_flag = 1;
> + ptl->general_max_monochrome_constraint_flag = 0;
> + break;
> + case VAProfileHEVCMain422_10:
> + // Main 4:2:2 10
> + ptl->general_max_12bit_constraint_flag = 1;
> + ptl->general_max_10bit_constraint_flag = 1;
> + ptl->general_max_8bit_constraint_flag = 0;
> + ptl->general_max_422chroma_constraint_flag = 1;
> + ptl->general_max_420chroma_constraint_flag = 0;
> + ptl->general_max_monochrome_constraint_flag = 0;
> + break;
> + case VAProfileHEVCMain422_12:
> + // Main 4:2:2 12
> + ptl->general_max_12bit_constraint_flag = 1;
> + ptl->general_max_10bit_constraint_flag = 0;
> + ptl->general_max_8bit_constraint_flag = 0;
> + ptl->general_max_422chroma_constraint_flag = 1;
> + ptl->general_max_420chroma_constraint_flag = 0;
> + ptl->general_max_monochrome_constraint_flag = 0;
> + break;
> + case VAProfileHEVCMain444:
> + // Main 4:4:4
> + ptl->general_max_12bit_constraint_flag = 1;
> + ptl->general_max_10bit_constraint_flag = 1;
> + ptl->general_max_8bit_constraint_flag = 1;
> + ptl->general_max_422chroma_constraint_flag = 0;
> + ptl->general_max_420chroma_constraint_flag = 0;
> + ptl->general_max_monochrome_constraint_flag = 0;
> + break;
> + case VAProfileHEVCMain444_10:
> + // Main 4:4:4 10
> + ptl->general_max_12bit_constraint_flag = 1;
> + ptl->general_max_10bit_constraint_flag = 1;
> + ptl->general_max_8bit_constraint_flag = 0;
> + ptl->general_max_422chroma_constraint_flag = 0;
> + ptl->general_max_420chroma_constraint_flag = 0;
> + ptl->general_max_monochrome_constraint_flag = 0;
> + break;
> + case VAProfileHEVCMain444_12:
> + // Main 4:4:4 12
> + ptl->general_max_12bit_constraint_flag = 1;
> + ptl->general_max_10bit_constraint_flag = 0;
> + ptl->general_max_8bit_constraint_flag = 0;
> + ptl->general_max_422chroma_constraint_flag = 0;
> + ptl->general_max_420chroma_constraint_flag = 0;
> + ptl->general_max_monochrome_constraint_flag = 0;
> + break;
> +#endif
> + default:
> + av_log(avctx, AV_LOG_ERROR, "Unknown profile to init PTL.\n");
> + return AVERROR(EINVAL);
> + }
> + }
Why is this an improvement over the current code which sets the constraint flags based on the actual content of the stream?
Note the requirement in A.3.5 for decoder support:
general_profile_idc is equal to 4 or general_profile_compatibility_flag[ 4 ] is equal to 1 for the bitstream, and
the value of each constraint flag listed in Table A.2 is greater than or equal to the value(s) specified in the row
of Table A.2 for the format range extensions profile for which the decoder conformance is evaluated.
which says that decoders must be able to support streams which set additional constraint flags beyond those which are specified for a particular profile (in particular, an 8-bit 4:2:2 stream must be decodable by any decoder supporting either "Main 4:2:2 10" or "Main 4:4:4", so ideally it shouldn't be marked to require one of those in particular).
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".
next prev parent reply other threads:[~2024-03-18 21:22 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-18 4:21 [FFmpeg-devel] [PATCH v3 1/2] lavc/vaapi_encode_h265: Map HEVC AV REXT profile to VA REXT profile fei.w.wang-at-intel.com
2024-03-18 4:21 ` [FFmpeg-devel] [PATCH v3 2/2] lavc/vaapi_encode_h265: Set general_*_constriaint flags with profile fei.w.wang-at-intel.com
2024-03-18 21:22 ` Mark Thompson [this message]
2024-03-20 8:44 ` Wang, Fei W
2024-04-01 6:11 ` Wang, Fei W
2024-04-01 20:02 ` Mark Thompson
2024-04-02 5:18 ` Wang, Fei W
2024-03-18 21:11 ` [FFmpeg-devel] [PATCH v3 1/2] lavc/vaapi_encode_h265: Map HEVC AV REXT profile to VA REXT profile Mark Thompson
2024-03-20 7:39 ` Wang, Fei W
2024-04-15 1:21 ` Xiang, Haihao
2024-04-15 22:07 ` Mark Thompson
2024-04-16 4:57 ` Wang, Fei W
2024-04-18 8:21 ` Wang, Fei W
2024-04-22 21:20 ` Mark Thompson
2024-04-22 21:22 ` [FFmpeg-devel] [PATCH 1/2] lavc/h265_profile_level: Expand profile compatibility checking Mark Thompson
2024-04-22 21:23 ` [FFmpeg-devel] [PATCH 2/2] lavc/vaapi_hevc: Don't require exact profiles Mark Thompson
2024-04-24 13:45 ` Xiang, Haihao
2024-04-28 14:14 ` Mark Thompson
2024-04-30 6:00 ` Xiang, Haihao
2024-04-23 0:04 ` [FFmpeg-devel] [PATCH 1/2] lavc/h265_profile_level: Expand profile compatibility checking Michael Niedermayer
2024-04-24 13:48 ` Xiang, Haihao
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=4cdd5a84-8547-48ea-b0e5-62ca20da39a3@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