[FFmpeg-devel] [PATCH 2/6] avcodec: add h266 codec id and profiles

James Almer jamrial at gmail.com
Mon Dec 21 17:13:59 EET 2020


On 12/21/2020 3:07 AM, Nuo Mi wrote:
> ---
>   libavcodec/avcodec.h    | 2 ++
>   libavcodec/codec_desc.c | 8 ++++++++
>   libavcodec/codec_id.h   | 2 ++
>   libavcodec/profiles.c   | 5 +++++
>   libavcodec/profiles.h   | 1 +
>   5 files changed, 18 insertions(+)
> 
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index 1d3099d50a..f7ea4d5849 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -1961,6 +1961,8 @@ typedef struct AVCodecContext {
>   #define FF_PROFILE_HEVC_MAIN_STILL_PICTURE          3
>   #define FF_PROFILE_HEVC_REXT                        4
>   
> +#define FF_PROFILE_H266_MAIN_10                      1

We should decide first what we are going to use, if VVC or h266.

My suggestion was to use VVC for decoder, parser, demuxer and public 
defines, which is what's exposed to the user, and h266 for CBS, which 
makes things simpler to implement and is proper consider it's written 
using the ITU spec.

> +
>   #define FF_PROFILE_AV1_MAIN                         0
>   #define FF_PROFILE_AV1_HIGH                         1
>   #define FF_PROFILE_AV1_PROFESSIONAL                 2
> diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c
> index 404c460f8f..62fe0f453d 100644
> --- a/libavcodec/codec_desc.c
> +++ b/libavcodec/codec_desc.c
> @@ -1426,6 +1426,14 @@ static const AVCodecDescriptor codec_descriptors[] = {
>           .long_name = NULL_IF_CONFIG_SMALL("Microsoft Paint (MSP) version 2"),
>           .props     = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS,
>       },
> +    {
> +        .id        = AV_CODEC_ID_H266,
> +        .type      = AVMEDIA_TYPE_VIDEO,
> +        .name      = "h266",

Ditto.

> +        .long_name = NULL_IF_CONFIG_SMALL("H.266 / VVC (Versatile Video Coding)"),
> +        .props     = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER,
> +        .profiles  = NULL_IF_CONFIG_SMALL(ff_h266_profiles),
> +    },
>       {
>           .id        = AV_CODEC_ID_Y41P,
>           .type      = AVMEDIA_TYPE_VIDEO,
> diff --git a/libavcodec/codec_id.h b/libavcodec/codec_id.h
> index 6133e03bb9..7a8a896bfe 100644
> --- a/libavcodec/codec_id.h
> +++ b/libavcodec/codec_id.h
> @@ -244,6 +244,8 @@ enum AVCodecID {
>       AV_CODEC_ID_PGX,
>       AV_CODEC_ID_AVS3,
>       AV_CODEC_ID_MSP2,
> +    AV_CODEC_ID_VVC,
> +#define AV_CODEC_ID_H266 AV_CODEC_ID_VVC

This chunk is good as is.

>   
>       AV_CODEC_ID_Y41P = 0x8000,
>       AV_CODEC_ID_AVRP,
> diff --git a/libavcodec/profiles.c b/libavcodec/profiles.c
> index e59a3a5c12..710f2c01e2 100644
> --- a/libavcodec/profiles.c
> +++ b/libavcodec/profiles.c
> @@ -74,6 +74,11 @@ const AVProfile ff_h264_profiles[] = {
>       { FF_PROFILE_UNKNOWN },
>   };
>   
> +const AVProfile ff_h266_profiles[] = {
> +    { FF_PROFILE_H266_MAIN_10, "Main 10" },
> +    { FF_PROFILE_UNKNOWN },
> +};
> +
>   const AVProfile ff_hevc_profiles[] = {
>       { FF_PROFILE_HEVC_MAIN,                 "Main"                },
>       { FF_PROFILE_HEVC_MAIN_10,              "Main 10"             },
> diff --git a/libavcodec/profiles.h b/libavcodec/profiles.h
> index 6baaba5701..7a353dbf3d 100644
> --- a/libavcodec/profiles.h
> +++ b/libavcodec/profiles.h
> @@ -60,6 +60,7 @@ extern const AVProfile ff_aac_profiles[];
>   extern const AVProfile ff_dca_profiles[];
>   extern const AVProfile ff_dnxhd_profiles[];
>   extern const AVProfile ff_h264_profiles[];
> +extern const AVProfile ff_h266_profiles[];
>   extern const AVProfile ff_hevc_profiles[];
>   extern const AVProfile ff_jpeg2000_profiles[];
>   extern const AVProfile ff_mpeg2_video_profiles[];
> 



More information about the ffmpeg-devel mailing list