[FFmpeg-devel] [PATCH 06/11] avcodec: use s210 fourcc for 10-bit 4:2:2 packed
"zhilizhao(赵志立)"
quinkblack at foxmail.com
Fri Nov 12 13:20:11 EET 2021
> On Nov 12, 2021, at 6:22 PM, lance.lmwang at gmail.com wrote:
>
> From: Limin Wang <lance.lmwang at gmail.com>
>
> s210 is used by AWS Elemental Live encoder so I prefer to use same to support
> 4:2:2 10-bit packed uncompressed video. Refer to:
> https://docs.aws.amazon.com/elemental-live/latest/ug/codec-vod-outputs.html
>
> I split the patch for better review, next patch will rename bitpacked.c to
> s210dec.c to reflect the change.
>
> Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> ---
> libavcodec/Makefile | 2 +-
> libavcodec/allcodecs.c | 2 +-
> libavcodec/bitpacked.c | 33 +++++++++++++++++----------------
> libavcodec/codec_desc.c | 6 +++---
> libavcodec/codec_id.h | 2 +-
> libavformat/rtpdec_rfc4175.c | 2 +-
> 6 files changed, 24 insertions(+), 23 deletions(-)
>
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index 14fbd2e..8ae28e8 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -243,7 +243,7 @@ OBJS-$(CONFIG_BINK_DECODER) += bink.o binkdsp.o
> OBJS-$(CONFIG_BINKAUDIO_DCT_DECODER) += binkaudio.o
> OBJS-$(CONFIG_BINKAUDIO_RDFT_DECODER) += binkaudio.o
> OBJS-$(CONFIG_BINTEXT_DECODER) += bintext.o cga_data.o
> -OBJS-$(CONFIG_BITPACKED_DECODER) += bitpacked.o
> +OBJS-$(CONFIG_S210_DECODER) += bitpacked.o
> OBJS-$(CONFIG_BMP_DECODER) += bmp.o msrledec.o
> OBJS-$(CONFIG_BMP_ENCODER) += bmpenc.o
> OBJS-$(CONFIG_BMV_AUDIO_DECODER) += bmvaudio.o
> diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
> index 9ede09b..c461798 100644
> --- a/libavcodec/allcodecs.c
> +++ b/libavcodec/allcodecs.c
> @@ -64,7 +64,7 @@ extern const AVCodec ff_ayuv_decoder;
> extern const AVCodec ff_bethsoftvid_decoder;
> extern const AVCodec ff_bfi_decoder;
> extern const AVCodec ff_bink_decoder;
> -extern const AVCodec ff_bitpacked_decoder;
> +extern const AVCodec ff_s210_decoder;
> extern const AVCodec ff_bmp_encoder;
> extern const AVCodec ff_bmp_decoder;
> extern const AVCodec ff_bmv_video_decoder;
> diff --git a/libavcodec/bitpacked.c b/libavcodec/bitpacked.c
> index d239141..7bc5dbc 100644
> --- a/libavcodec/bitpacked.c
> +++ b/libavcodec/bitpacked.c
> @@ -1,6 +1,7 @@
> /*
> - * Unpack bit-packed streams to formats supported by FFmpeg
> + * S210 decoder
> * Copyright (c) 2017 Savoir-faire Linux, Inc
> + * Copyright (c) 2021 Limin Wang
> *
> * This file is part of FFmpeg.
> *
> @@ -23,7 +24,7 @@
>
> /**
> * @file
> - * Bitpacked
> + * s210dec
> */
>
> #include "avcodec.h"
> @@ -31,12 +32,12 @@
> #include "get_bits.h"
> #include "libavutil/imgutils.h"
>
> -struct BitpackedContext {
> +struct S210Context {
> int (*decode)(AVCodecContext *avctx, AVFrame *frame,
> const AVPacket *pkt);
> };
>
> -static int bitpacked_decode_yuv422p10(AVCodecContext *avctx, AVFrame *frame,
> +static int s210_decode_yuv422p10(AVCodecContext *avctx, AVFrame *frame,
> const AVPacket *avpkt)
> {
> uint64_t frame_size = (uint64_t)avctx->width * (uint64_t)avctx->height * 20;
> @@ -75,26 +76,26 @@ static int bitpacked_decode_yuv422p10(AVCodecContext *avctx, AVFrame *frame,
> return 0;
> }
>
> -static av_cold int bitpacked_init_decoder(AVCodecContext *avctx)
> +static av_cold int s210_init_decoder(AVCodecContext *avctx)
> {
> - struct BitpackedContext *bc = avctx->priv_data;
> + struct S210Context *bc = avctx->priv_data;
>
> if (!avctx->width || !avctx->height)
> return AVERROR_INVALIDDATA;
>
> if (avctx->bits_per_coded_sample == 20 &&
> avctx->pix_fmt == AV_PIX_FMT_YUV422P10)
> - bc->decode = bitpacked_decode_yuv422p10;
> + bc->decode = s210_decode_yuv422p10;
> else
> return AVERROR_INVALIDDATA;
>
> return 0;
> }
>
> -static int bitpacked_decode(AVCodecContext *avctx, void *data, int *got_frame,
> +static int s210_decode(AVCodecContext *avctx, void *data, int *got_frame,
> AVPacket *avpkt)
> {
> - struct BitpackedContext *bc = avctx->priv_data;
> + struct S210Context *bc = avctx->priv_data;
> int buf_size = avpkt->size;
> AVFrame *frame = data;
> int res;
> @@ -111,14 +112,14 @@ static int bitpacked_decode(AVCodecContext *avctx, void *data, int *got_frame,
>
> }
>
> -const AVCodec ff_bitpacked_decoder = {
> - .name = "bitpacked",
> - .long_name = NULL_IF_CONFIG_SMALL("Bitpacked"),
> +const AVCodec ff_s210_decoder = {
> + .name = "s210",
> + .long_name = NULL_IF_CONFIG_SMALL("10-bit 4:2:2 packed"),
> .type = AVMEDIA_TYPE_VIDEO,
> - .id = AV_CODEC_ID_BITPACKED,
> - .priv_data_size = sizeof(struct BitpackedContext),
> - .init = bitpacked_init_decoder,
> - .decode = bitpacked_decode,
> + .id = AV_CODEC_ID_S210,
> + .priv_data_size = sizeof(struct S210Context),
> + .init = s210_init_decoder,
> + .decode = s210_decode,
> .capabilities = AV_CODEC_CAP_EXPERIMENTAL,
> .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
> };
> diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c
> index 0974ee0..d1cc4d0 100644
> --- a/libavcodec/codec_desc.c
> +++ b/libavcodec/codec_desc.c
> @@ -1645,10 +1645,10 @@ static const AVCodecDescriptor codec_descriptors[] = {
> .profiles = NULL_IF_CONFIG_SMALL(ff_av1_profiles),
> },
> {
> - .id = AV_CODEC_ID_BITPACKED,
> + .id = AV_CODEC_ID_S210,
> .type = AVMEDIA_TYPE_VIDEO,
> - .name = "bitpacked",
> - .long_name = NULL_IF_CONFIG_SMALL("Bitpacked"),
> + .name = "s210",
> + .long_name = NULL_IF_CONFIG_SMALL("10-bit 4:2:2 packed"),
> .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS,
> },
> {
> diff --git a/libavcodec/codec_id.h b/libavcodec/codec_id.h
> index ab265ec..721174f 100644
> --- a/libavcodec/codec_id.h
> +++ b/libavcodec/codec_id.h
> @@ -277,7 +277,7 @@ enum AVCodecID {
> AV_CODEC_ID_CLEARVIDEO,
> AV_CODEC_ID_XPM,
> AV_CODEC_ID_AV1,
> - AV_CODEC_ID_BITPACKED,
> + AV_CODEC_ID_S210,
Please don’t break API.
> AV_CODEC_ID_MSCC,
> AV_CODEC_ID_SRGC,
> AV_CODEC_ID_SVG,
> diff --git a/libavformat/rtpdec_rfc4175.c b/libavformat/rtpdec_rfc4175.c
> index 81930ce..d39a3aa 100644
> --- a/libavformat/rtpdec_rfc4175.c
> +++ b/libavformat/rtpdec_rfc4175.c
> @@ -57,7 +57,7 @@ static int rfc4175_parse_format(AVStream *stream, PayloadContext *data)
> } else if (data->depth == 10) {
> data->pgroup = 5;
> pixfmt = AV_PIX_FMT_YUV422P10;
> - stream->codecpar->codec_id = AV_CODEC_ID_BITPACKED;
> + stream->codecpar->codec_id = AV_CODEC_ID_S210;
> } else {
> return AVERROR_INVALIDDATA;
> }
> --
> 1.8.3.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list