diff mbox series

[FFmpeg-devel,06/11] avcodec: use s210 fourcc for 10-bit 4:2:2 packed

Message ID 1636712536-13114-6-git-send-email-lance.lmwang@gmail.com
State New
Headers show
Series [FFmpeg-devel,01/11] avformat/rtpdec_rfc4175: use rawvideo for uyvy422 | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished

Commit Message

Limin Wang Nov. 12, 2021, 10:22 a.m. UTC
From: Limin Wang <lance.lmwang@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@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(-)

Comments

Zhao Zhili Nov. 12, 2021, 11:20 a.m. UTC | #1
> On Nov 12, 2021, at 6:22 PM, lance.lmwang@gmail.com wrote:
> 
> From: Limin Wang <lance.lmwang@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@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@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff mbox series

Patch

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,
     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;
         }