From patchwork Wed Aug 24 08:43:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 37439 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp2371295pzh; Wed, 24 Aug 2022 01:44:43 -0700 (PDT) X-Google-Smtp-Source: AA6agR6XXU6n6hdJKsHtl4QL6NK4oic0zZ72+RA2625LzM+mFXI/MRnr4HYVMad+qqp2mPsA0Obn X-Received: by 2002:a05:6402:3881:b0:445:f8bf:5a1c with SMTP id fd1-20020a056402388100b00445f8bf5a1cmr6734091edb.13.1661330683375; Wed, 24 Aug 2022 01:44:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661330683; cv=none; d=google.com; s=arc-20160816; b=mg/DahxyTHnGCOeBfSbW7WVgKVVG6XUf2VJhufIFGJmogeQOSfJsiUVt1/r2aekmk7 6/yfKo5GhnOU/59/1s01jINE65xB1Q5VY/0FQEVGf/ZkMp0Yp1QsCbq4oDRl6o3FTCBR 3bDUDENWG2tI6tgIt9nqATZMX54nzNrdnyK55Jg8LBRHXJCMva/R8liRHDaR7g+uFQvA 8hXZWyus5rsMA6tjHnwQApeYSQ2qYAJThAbe12DeMmdhNS8yxZJ8WtpSJMNj2qP20TnV 4rqPNaa0iEu7ym4GBgQ1bFJB+UubfMo4YiOMkNz/YomoGK1bNaMunUXQyhYd5G2VSaP5 M2Pg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=tQ71nPACEJv6/7WiZdUC3rUhy9T3OkNs5znraM4rFBM=; b=W5Wq4jzsckzQBppaIyKzQyaeYAQZ6c/dpJaDsb8PKQfdWnU01R/gC9/JbdoWuboASB wN8JwqbTIxBXOdBsf4ciNSy0ukxh4WsXHyQYWgKy9LcgTH1SlWJ81k19guGwRVVbMR1c GS/frgcYvHkx8U0U3YE4i9OhMlHdfSE0ZY0nbm4Qmhn3/+SsOxpyd8B0WW+K0Wj5pVA3 tcZq7OYeQMcjTwScRJKEoxk+q1qFvaU5mfmqJUYSOpAWnaBEHW6UZNk556Sf/yaiW7Qv lOvRJYju0l6P+tr8T6GdOZbDKkopAfFwcUcFyb4fYYBQAsCqgiv2EDS8iSlhbK7B/rAm xcqg== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id t5-20020a056402524500b0043e4a260ad8si4503676edd.563.2022.08.24.01.44.42; Wed, 24 Aug 2022 01:44:43 -0700 (PDT) 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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2020668B83F; Wed, 24 Aug 2022 11:43:56 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DAEA568B9C5 for ; Wed, 24 Aug 2022 11:43:49 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 36786240D1D for ; Wed, 24 Aug 2022 10:43:47 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id Aj3p97qZyKiM for ; Wed, 24 Aug 2022 10:43:46 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id D077E240D23 for ; Wed, 24 Aug 2022 10:43:41 +0200 (CEST) Received: by libav.khirnov.net (Postfix, from userid 1000) id 9528E3A2229; Wed, 24 Aug 2022 10:43:35 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Aug 2022 10:43:09 +0200 Message-Id: <20220824084318.333-9-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220824084318.333-1-anton@khirnov.net> References: <20220824084318.333-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/18] lavc/dvenc: stop using DVVideoContext 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: K5/qFfh/Lig0 Move the parts of it used by the encoder into a new DVEncContext and remove DVVideoContext. --- libavcodec/dv.h | 23 ----------------------- libavcodec/dvenc.c | 39 ++++++++++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/libavcodec/dv.h b/libavcodec/dv.h index 6430688795..859a4e6545 100644 --- a/libavcodec/dv.h +++ b/libavcodec/dv.h @@ -27,36 +27,13 @@ #ifndef AVCODEC_DV_H #define AVCODEC_DV_H -#include "avcodec.h" #include "dv_profile.h" -#include "me_cmp.h" -#include "idctdsp.h" typedef struct DVwork_chunk { uint16_t buf_offset; uint16_t mb_coordinates[5]; } DVwork_chunk; -typedef struct DVVideoContext { - AVClass *avclass; - const AVDVProfile *sys; - const AVFrame *frame; - AVCodecContext *avctx; - uint8_t *buf; - - uint8_t dv_zigzag[2][64]; - - void (*get_pixels)(int16_t *block, const uint8_t *pixels, ptrdiff_t linesize); - void (*fdct[2])(int16_t *block); - void (*idct_put[2])(uint8_t *dest, ptrdiff_t stride, int16_t *block); - me_cmp_func ildct_cmp; - DVwork_chunk work_chunks[4 * 12 * 27]; - uint32_t idct_factor[2 * 4 * 16 * 64]; - IDCTDSPContext idsp; - - int quant_deadzone; -} DVVideoContext; - enum dv_section_type { dv_sect_header = 0x1f, dv_sect_subcode = 0x3f, diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c index c12fce9e8b..19291724e0 100644 --- a/libavcodec/dvenc.c +++ b/libavcodec/dvenc.c @@ -47,9 +47,26 @@ #include "pixblockdsp.h" #include "put_bits.h" +typedef struct DVEncContext { + AVClass *class; + const AVDVProfile *sys; + const AVFrame *frame; + AVCodecContext *avctx; + uint8_t *buf; + + void (*get_pixels)(int16_t *block, const uint8_t *pixels, ptrdiff_t linesize); + void (*fdct[2])(int16_t *block); + + me_cmp_func ildct_cmp; + DVwork_chunk work_chunks[4 * 12 * 27]; + + int quant_deadzone; +} DVEncContext; + + static av_cold int dvvideo_encode_init(AVCodecContext *avctx) { - DVVideoContext *s = avctx->priv_data; + DVEncContext *s = avctx->priv_data; FDCTDSPContext fdsp; MECmpContext mecc; PixblockDSPContext pdsp; @@ -220,7 +237,7 @@ static av_always_inline PutBitContext *dv_encode_ac(EncBlockInfo *bi, return pb; } -static av_always_inline int dv_guess_dct_mode(DVVideoContext *s, const uint8_t *data, +static av_always_inline int dv_guess_dct_mode(DVEncContext *s, const uint8_t *data, ptrdiff_t linesize) { if (s->avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) { @@ -368,7 +385,7 @@ static const int dv_weight_720[2][64] = { 2661, 2583, 2509, 2394, 2509, 2260, 2260, 2131, } }; -static av_always_inline int dv_set_class_number_sd(DVVideoContext *s, +static av_always_inline int dv_set_class_number_sd(DVEncContext *s, int16_t *blk, EncBlockInfo *bi, const uint8_t *zigzag_scan, const int *weight, int bias) @@ -452,7 +469,7 @@ static av_always_inline int dv_set_class_number_sd(DVVideoContext *s, /* this function just copies the DCT coefficients and performs the initial (non-)quantization. */ -static inline void dv_set_class_number_hd(DVVideoContext *s, +static inline void dv_set_class_number_hd(DVEncContext *s, int16_t *blk, EncBlockInfo *bi, const uint8_t *zigzag_scan, const int *weight, int bias) @@ -510,7 +527,7 @@ static inline void dv_set_class_number_hd(DVVideoContext *s, } static av_always_inline int dv_init_enc_block(EncBlockInfo* bi, const uint8_t *data, int linesize, - DVVideoContext *s, int chroma) + DVEncContext *s, int chroma) { LOCAL_ALIGNED_16(int16_t, blk, [64]); @@ -847,7 +864,7 @@ static inline void dv_revise_cnos(uint8_t *dif, EncBlockInfo *blk, const AVDVPro static int dv_encode_video_segment(AVCodecContext *avctx, void *arg) { - DVVideoContext *s = avctx->priv_data; + DVEncContext *s = avctx->priv_data; DVwork_chunk *work_chunk = arg; int mb_index, i, j; int mb_x, mb_y, c_offset; @@ -995,7 +1012,7 @@ static int dv_encode_video_segment(AVCodecContext *avctx, void *arg) return 0; } -static inline int dv_write_pack(enum dv_pack_type pack_id, DVVideoContext *c, +static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c, uint8_t *buf) { /* @@ -1115,7 +1132,7 @@ static inline int dv_write_ssyb_id(uint8_t syb_num, uint8_t fr, uint8_t *buf) return 3; } -static void dv_format_frame(DVVideoContext *c, uint8_t *buf) +static void dv_format_frame(DVEncContext *c, uint8_t *buf) { int chan, i, j, k; /* We work with 720p frames split in half. The odd half-frame is chan 2,3 */ @@ -1170,7 +1187,7 @@ static void dv_format_frame(DVVideoContext *c, uint8_t *buf) static int dvvideo_encode_frame(AVCodecContext *c, AVPacket *pkt, const AVFrame *frame, int *got_packet) { - DVVideoContext *s = c->priv_data; + DVEncContext *s = c->priv_data; int ret; if ((ret = ff_get_encode_buffer(c, pkt, s->sys->frame_size, 0)) < 0) @@ -1195,7 +1212,7 @@ static int dvvideo_encode_frame(AVCodecContext *c, AVPacket *pkt, } #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM -#define OFFSET(x) offsetof(DVVideoContext, x) +#define OFFSET(x) offsetof(DVEncContext, x) static const AVOption dv_options[] = { { "quant_deadzone", "Quantizer dead zone", OFFSET(quant_deadzone), AV_OPT_TYPE_INT, { .i64 = 7 }, 0, 1024, VE }, { NULL }, @@ -1215,7 +1232,7 @@ const FFCodec ff_dvvideo_encoder = { .p.id = AV_CODEC_ID_DVVIDEO, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_SLICE_THREADS, - .priv_data_size = sizeof(DVVideoContext), + .priv_data_size = sizeof(DVEncContext), .init = dvvideo_encode_init, FF_CODEC_ENCODE_CB(dvvideo_encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]) {