From patchwork Fri Nov 12 10:22:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 31382 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp1633362iob; Fri, 12 Nov 2021 02:23:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJztVWg48brKntnqOWi0Tny0uvJZi+Kaxx0H6WNKnZlOZUeuXRqYhgMrQ05duQM9b8XzcRC0 X-Received: by 2002:a17:906:168e:: with SMTP id s14mr17968636ejd.340.1636712626963; Fri, 12 Nov 2021 02:23:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636712626; cv=none; d=google.com; s=arc-20160816; b=t72rZjby7XXuJa9YkEwbccF2Uh8tTN/Z+Zy9gplpaNkyikKZaD/1Cz8s0ssCY/ZEUH TlxeAVw7wXf0+VXCxkBvA1KkHstYd0FkUbW3BsOJC9/T2VftYUuMDGOP6KeS2NMv2paS 0pMnHB3l3UkiNtSl1gHmtgAyqTDhEen0SQUEzAKTwuUzEyFTRNTR1n+zSNGsYKuZbEty AxxFLNsO6hjNtLyV5ayxyIcRGRBEq3WCZ0yd6Ucuco4UpI+606HxFKm5fYdrUoUSD7O1 ZXIk/a8EKu1fX7l3ZuGsODixJtOzAjSStWg5301BR69zI2Sc2zwBN3O/x01O5zI7rd7X 2KGQ== 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=UJ0Bd3cmVNPT9oxRp2gNrOM8TBvqh0DMPyZl+I8iQp0=; b=vVa6ZtnqIfn+64zg6ID8whAufoRJMl7t65sLsjTi8CHItBd7n8iEjtA7tScj8CgWb0 vp2l4xLbGLvvam6fUZ89NC+kuy9cJvKmptEHcBLihtl8UiShBNl7WuGLOtOFohv2n5Jh N9mXzFDQZa/r4jKL6Rjn9qrJqn8ctbJQZdZhUrRqkk8WB9M1xXKdskuTFgoIbmV5It9+ Ugo2DmhMsv9WdTAbVff+jraDS5BFoe3XlCV0q8HXl9PePnXsBoTnuEnNLkoFk5qmkTBv c9QXqIqntKmp3gxztl/k//0Q0ABWvkQtW6ybtqn/W9VlvLuh9GoyfbGPlNKiGNhujM+O XUfQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=Cn1rOElw; 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 t8si10389595edc.386.2021.11.12.02.23.46; Fri, 12 Nov 2021 02:23:46 -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=Cn1rOElw; 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 2FFAF68AE4A; Fri, 12 Nov 2021 12:22:39 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 779A568AE14 for ; Fri, 12 Nov 2021 12:22:29 +0200 (EET) Received: by mail-pf1-f180.google.com with SMTP id g18so8116905pfk.5 for ; Fri, 12 Nov 2021 02:22:29 -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=oGJt57Lj/ouAjxp431T26hef7bcncELHSkqAIzaU3f0=; b=Cn1rOElwF7UneCCzoWdpWKysJMRWYv0mpl9U6CsD3NspuRMVxCl7XjghzpV0W1dT1Z FV87JBQyi4w8qrf2Iqzade8SWbqHCiJaPQkJjARny9EQCVKIXAZd0ZczD69y+/XuI9oN g+fF3gtyXIi1NQVT+7A87B0CYBrb8z7HRHkNdUDm+w++tdFUvYkkfaTs6UvJsNGAyICf QIDezE0hfb+8H9KZ5pdElTDaEo1dHxkgVI3mQ+ur0ryIFlSzmCpQ3AV6mqs8GyCWvHiL 1nOmJnpij4GyNTUbqfjWXSrEA5jVC5PtzinMhWEG7BC7JIHRUkdkKYuJy4heGmd8X6Rp xHWg== 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=oGJt57Lj/ouAjxp431T26hef7bcncELHSkqAIzaU3f0=; b=3+Jqu/tUuvtcyC6TQxs0HeCa7EAO/oTCKt3auQaq4H65EqGAf6nOSRaXw0aiNgrUF2 to0jOGfEl5AnRzaWm6lH2RKkr9HEnLO9GlMdOzGQb1+FiCDRSoP1MSSbHjxeHXgrgG/Q I5L/u7QJE2OF7sbCMUEyRcGUe0gBZkqg0qAuO+8qJA9mG0tNpFKQeSV92pstbHGFEY1L MVEpak+ogi/s7dibJrtb6Hy83PNtH0Zr+h5X6JDla6xX+0Kacbnpmb23b5lELKVTMUXu 2gSCut3bVMbH+jAqvEQ4g3AjM7zbBDNEAvPTc3pH9fnVV5KJuE1IvSiBQaTy3QJQ5lTr payg== X-Gm-Message-State: AOAM532wSmcNIFTdcjVN9y9zdmmc02rDG6MOnUZAVk3rKYToML9i4w4E TrgLzdx19YJ2ttwiPo3XZTauRgDa/g4= X-Received: by 2002:a05:6a00:cc4:b0:4a0:e97:fe97 with SMTP id b4-20020a056a000cc400b004a00e97fe97mr12975082pfv.74.1636712547690; Fri, 12 Nov 2021 02:22:27 -0800 (PST) Received: from vpn2.localdomain ([161.117.202.209]) by smtp.gmail.com with ESMTPSA id f19sm6030563pfc.122.2021.11.12.02.22.26 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 12 Nov 2021 02:22:27 -0800 (PST) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Fri, 12 Nov 2021 18:22:12 +0800 Message-Id: <1636712536-13114-7-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 07/11] avcodec: rename bitpacked.c to s210dec.c 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: 4TfsAeIGLC5X From: Limin Wang Signed-off-by: Limin Wang --- libavcodec/Makefile | 2 +- libavcodec/bitpacked.c | 125 ------------------------------------------------- libavcodec/s210dec.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+), 126 deletions(-) delete mode 100644 libavcodec/bitpacked.c create mode 100644 libavcodec/s210dec.c diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 8ae28e8..1d75cfe 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_S210_DECODER) += bitpacked.o +OBJS-$(CONFIG_S210_DECODER) += s210dec.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/bitpacked.c b/libavcodec/bitpacked.c deleted file mode 100644 index 7bc5dbc..0000000 --- a/libavcodec/bitpacked.c +++ /dev/null @@ -1,125 +0,0 @@ -/* - * S210 decoder - * Copyright (c) 2017 Savoir-faire Linux, Inc - * Copyright (c) 2021 Limin Wang - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* Development sponsored by CBC/Radio-Canada */ - -/** - * @file - * s210dec - */ - -#include "avcodec.h" -#include "internal.h" -#include "get_bits.h" -#include "libavutil/imgutils.h" - -struct S210Context { - int (*decode)(AVCodecContext *avctx, AVFrame *frame, - const AVPacket *pkt); -}; - -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; - uint64_t packet_size = (uint64_t)avpkt->size * 8; - GetBitContext bc; - uint16_t *y, *u, *v; - int ret, i, j; - - ret = ff_get_buffer(avctx, frame, 0); - if (ret < 0) - return ret; - - if (frame_size > packet_size) - return AVERROR_INVALIDDATA; - - if (avctx->width % 2) - return AVERROR_PATCHWELCOME; - - ret = init_get_bits(&bc, avpkt->data, avctx->width * avctx->height * 20); - if (ret) - return ret; - - for (i = 0; i < avctx->height; i++) { - y = (uint16_t*)(frame->data[0] + i * frame->linesize[0]); - u = (uint16_t*)(frame->data[1] + i * frame->linesize[1]); - v = (uint16_t*)(frame->data[2] + i * frame->linesize[2]); - - for (j = 0; j < avctx->width; j += 2) { - *u++ = get_bits(&bc, 10); - *y++ = get_bits(&bc, 10); - *v++ = get_bits(&bc, 10); - *y++ = get_bits(&bc, 10); - } - } - - return 0; -} - -static av_cold int s210_init_decoder(AVCodecContext *avctx) -{ - 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 = s210_decode_yuv422p10; - else - return AVERROR_INVALIDDATA; - - return 0; -} - -static int s210_decode(AVCodecContext *avctx, void *data, int *got_frame, - AVPacket *avpkt) -{ - struct S210Context *bc = avctx->priv_data; - int buf_size = avpkt->size; - AVFrame *frame = data; - int res; - - frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; - - res = bc->decode(avctx, frame, avpkt); - if (res) - return res; - - *got_frame = 1; - return buf_size; - -} - -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_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/s210dec.c b/libavcodec/s210dec.c new file mode 100644 index 0000000..7bc5dbc --- /dev/null +++ b/libavcodec/s210dec.c @@ -0,0 +1,125 @@ +/* + * S210 decoder + * Copyright (c) 2017 Savoir-faire Linux, Inc + * Copyright (c) 2021 Limin Wang + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* Development sponsored by CBC/Radio-Canada */ + +/** + * @file + * s210dec + */ + +#include "avcodec.h" +#include "internal.h" +#include "get_bits.h" +#include "libavutil/imgutils.h" + +struct S210Context { + int (*decode)(AVCodecContext *avctx, AVFrame *frame, + const AVPacket *pkt); +}; + +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; + uint64_t packet_size = (uint64_t)avpkt->size * 8; + GetBitContext bc; + uint16_t *y, *u, *v; + int ret, i, j; + + ret = ff_get_buffer(avctx, frame, 0); + if (ret < 0) + return ret; + + if (frame_size > packet_size) + return AVERROR_INVALIDDATA; + + if (avctx->width % 2) + return AVERROR_PATCHWELCOME; + + ret = init_get_bits(&bc, avpkt->data, avctx->width * avctx->height * 20); + if (ret) + return ret; + + for (i = 0; i < avctx->height; i++) { + y = (uint16_t*)(frame->data[0] + i * frame->linesize[0]); + u = (uint16_t*)(frame->data[1] + i * frame->linesize[1]); + v = (uint16_t*)(frame->data[2] + i * frame->linesize[2]); + + for (j = 0; j < avctx->width; j += 2) { + *u++ = get_bits(&bc, 10); + *y++ = get_bits(&bc, 10); + *v++ = get_bits(&bc, 10); + *y++ = get_bits(&bc, 10); + } + } + + return 0; +} + +static av_cold int s210_init_decoder(AVCodecContext *avctx) +{ + 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 = s210_decode_yuv422p10; + else + return AVERROR_INVALIDDATA; + + return 0; +} + +static int s210_decode(AVCodecContext *avctx, void *data, int *got_frame, + AVPacket *avpkt) +{ + struct S210Context *bc = avctx->priv_data; + int buf_size = avpkt->size; + AVFrame *frame = data; + int res; + + frame->pict_type = AV_PICTURE_TYPE_I; + frame->key_frame = 1; + + res = bc->decode(avctx, frame, avpkt); + if (res) + return res; + + *got_frame = 1; + return buf_size; + +} + +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_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, +};