From patchwork Fri Nov 12 10:22:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 31378 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp1632968iob; Fri, 12 Nov 2021 02:23:28 -0800 (PST) X-Google-Smtp-Source: ABdhPJyOyNT8dB7G8yDRE2gObKpL+Y3q+2Nbyh8fEwH+FpsVV9+6go/OX538YH936zRqH8xSFamk X-Received: by 2002:a17:906:d1d1:: with SMTP id bs17mr17649833ejb.198.1636712608602; Fri, 12 Nov 2021 02:23:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636712608; cv=none; d=google.com; s=arc-20160816; b=ysVNaaCQqdIv2YL2haXs9D3aKa1ztx3LFqqwJUHVzEOQIbQ8lwEUi4CKROQDWFeq6k mya9iQikxs1EdE3CjenyWS8W/KYkIC8Zq1KBYUQ8BhUxK8iE1EKl/8A2wu1QSmQCu/CX GzHEaEWVhuupiNzDBL7fG+HQd47Z1FRreNI/WVpm3hev6pkB0xH3g057rlVVNMlpOp9N EM7nZZb0P+6xiB3Pj1dSZpWMD4Eb2mu1NWSmOaK1ABV7fFxjhZhN0RB4ARUoa50oyRUq vqSWyQrQ+RotgeZ1CDJ1D0GuLGADmsqgXCnxyDorJg9DxBVOJdsAweMm72V1C2ho/r+T ynIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to; bh=ObO+TxTAychqn/q3UlgA4YjpUd2AoDTK6M32HEuN7Zo=; b=q3h8vZ4iXTp8kNQc2sShfHsTmzI2zz1IfSdDWb0eM/zpvLXrrUlnhtioYlOW9D58Af +BTYr0zYjsRda/arg4C4XdcZdfliocUWMr2TBlnd9jqv6Rh7daA/GUM+vFi6GcnYy0ZB +oguJi+cAoQBBBtDbersoqC+H8COooANcW1AHSYj6/dlBKPuF43s+aAiXiw2W2O/eqA/ aWIkohNoRiX3wkx9RHMeT8PTczu8fBvXJZG+q9SsmlSGh5mVm8ST7dVsOSPRHzsJyH61 RqB+9Wi63xlY9HyeYrSQjuOr1q6VgKT1CurT7l/+JzGJdeyr+1zXLnbDAvat/U5Mh7Yu pc7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=qJwDF2Ho; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id jg5si14293860ejc.752.2021.11.12.02.23.28; Fri, 12 Nov 2021 02:23:28 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=qJwDF2Ho; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 045D268AE21; Fri, 12 Nov 2021 12:22:37 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 404F668AE36 for ; Fri, 12 Nov 2021 12:22:28 +0200 (EET) Received: by mail-pf1-f175.google.com with SMTP id g18so8116873pfk.5 for ; Fri, 12 Nov 2021 02:22:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=p/DLUicZGco6RN5xUbadD4dDZbSbLu/Ew6oEeaxI8a0=; b=qJwDF2HoHjyyDSa0ffAStXDYxvkIs03oXV3krM1cWUXZRECTOpma6/m714oQB0Go9A At4WcF8xWaND9EcGk425uOHEd2rKvBikFP9eImZCwy8G5ZiV/qBVw80Ley+urCbHZWTy emXNZSzeeJZ5kiZ2t06xiBt0mhpdbdZsFLSszTjcML5xn/5hvi83IlgyEQlCdkzR7iXX wY0Pz02fSPMJg2QDSujLlNCn7SX3ITHb9o1qoHX80vgK5K1efKT/7oYzimDghQnfzCMx kHkYs/yXfc8biCjPmAp93+7lP9k/v/UF1BccDwnqhKYgnY3vQsVDFBM+l6y2JjMJXcc9 Xx+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=p/DLUicZGco6RN5xUbadD4dDZbSbLu/Ew6oEeaxI8a0=; b=UiIJVFKDZGYvx2yYRUqhDEyoPRHT8FdjZRrSTyrg6fYM6crzOO74D3U+QNUvnhX18O Gcz1XlWU/tseZmRAzbr3toYEAzLf2opOn0A2tMguKjD1tCveOWgEaAXgjMwM91qZIsHP U3FzHunZEKYeS/L1udETk2YUQ8IvF9cNp/O5ltlOLK0DZjOzzJnTOhs7WmOwfFWfSes/ +1Llp0IsTWd+wuT1jAugxVsDB/MDcX9ZhQ60IicB4KqBYLzfeSPoA9vscGCr7TXFfHhi 9nHCgRevTLDd6YIZb1DMQf6ybr6JwEhLgzcbqDWr6BFuE7FTjDbXkJTzntmNyDyCqlSH i6fA== X-Gm-Message-State: AOAM531JQoas/5kCvpIhfKnZNOXSacY+6ZTgfm3xy3Nc5qlfYyLSTjEG 72TG3UQBbtyDSLw0a/6x1jzBWXVEQ7s= X-Received: by 2002:a05:6a00:16c6:b029:32d:e190:9dd0 with SMTP id l6-20020a056a0016c6b029032de1909dd0mr13062818pfc.70.1636712546490; Fri, 12 Nov 2021 02:22:26 -0800 (PST) Received: from vpn2.localdomain ([161.117.202.209]) by smtp.gmail.com with ESMTPSA id f19sm6030563pfc.122.2021.11.12.02.22.25 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 12 Nov 2021 02:22:26 -0800 (PST) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Fri, 12 Nov 2021 18:22:11 +0800 Message-Id: <1636712536-13114-6-git-send-email-lance.lmwang@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1636712536-13114-1-git-send-email-lance.lmwang@gmail.com> References: <1636712536-13114-1-git-send-email-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH 06/11] avcodec: use s210 fourcc for 10-bit 4:2:2 packed X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: wbXVbU9m5cCZ From: Limin Wang 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 --- 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, 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; }