From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id B633344A60 for ; Tue, 4 Oct 2022 15:43:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2969068BBB2; Tue, 4 Oct 2022 18:43:39 +0300 (EEST) Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074086.outbound.protection.outlook.com [40.92.74.86]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5BD3C68BBB2 for ; Tue, 4 Oct 2022 18:43:32 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=geE/8ZPFcWrJmWlNxQU6wPPmF0N95pLgOlSXHscVUJdGafwQLNJ24XW6IvOe5jDmOkRp+N+XXdjUiP6FnAQlcv2lEOt28G1uGfLDk5EUhKPMLLN55kKUonkN/zK9LMFQ+SBHv8NIAB1sQfdbZBzlYUUatvpFRFBsGEdUwi/GqAmARCjQ2f6NVyOhrvgNm4QuQ76jGycAS6C0GoXKOdCwr4bTncneT8zglfL3cLvaiCR/wv6pyceJ+o64QsT/o/3xJVbt9J14R/kLb7FZ+T+k1qG3FdR6AEdxUin0VzXiZpQNQfUHvVWZz8DQ20W59LiVYViZiU4yzvlapE0+C1IRaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=KVXJ5R/RSvQX6A2XfwvJc5wEKYh9znhDhhgXo3Z/4pA=; b=AJieW/yAW5BkPRFBIjiAbS6BOfMO1JSrSfbvPMZooZkOTey/NGrPsQhvMSOlB49SNGvRUfTNdZA/NhgPwsSzdAmAel5imolrYpUqKH8cQZY4BQsnQokBSXSF1hZtw8R9zrB6mx8WXo8Yd7J1adR3P1vKKhqbY9tGlrdtkF9v5d0ThzIgQfmxl5MXCKzu8z9omt8WsU2WyBilvrvFanb4mTCmM52JFoeOJ7G8QreuRUE7seXeo+CvI0uOo6Pg7/NXJeT9X2GIpuhXgyNH0W2PDwLHPfjj0wL1zeBU48GjaxPCD6Gm7nAUvao8st/jootzZZS+7BzIT0NbwRbHveR+Og== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KVXJ5R/RSvQX6A2XfwvJc5wEKYh9znhDhhgXo3Z/4pA=; b=jWzSoPXezu9qF2POtN3hV0HHUK5aYfb4HV/Ye1MWrhtv+Dg0/wZ6nCgekzA36CTvlXV05pnmRh/t7tCv5miX1kDDb2Ln2TwdLC+lO1Mf0F8I+c+/9FUylUDp2va7Oa7AJOHpZsFm8Nv7GpU5dYt30gVSJgsVl5gNSUih2M7FUudSjlz2+M+Lht/IBBuz2XirmNTwWzC2HZN8dWPIDf8fOREmslUL88of6GsA/S7agGHxLlgNl8Ps2D006Iv5ymE1G9yNauiIbDmpiJVaqBRTeXA31m9ZdkWP27CJJ1jkxA0fdEHU4q9qO5r1402fJJpOBEQV9GjrNFv35SllxU76+A== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by GV2P250MB0826.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:af::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.28; Tue, 4 Oct 2022 15:43:29 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::85ac:1b92:90f:dc18]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::85ac:1b92:90f:dc18%4]) with mapi id 15.20.5676.028; Tue, 4 Oct 2022 15:43:29 +0000 Message-ID: Date: Tue, 4 Oct 2022 17:43:35 +0200 To: ffmpeg-devel@ffmpeg.org References: Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: X-TMN: [5+G3QYF2r9c8qKjIbs0RZyabfiOLcCEHTFM1sbrVWfA=] X-ClientProxiedBy: ZR2P278CA0005.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:50::10) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <725ce387-d4cd-ed0c-d546-edc2b26a2e63@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|GV2P250MB0826:EE_ X-MS-Office365-Filtering-Correlation-Id: eafe91fb-f00b-4d9d-b0df-08daa61f2f61 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xKzHj0VTinFIoyR/Yqvn66CFh1P7YXGhvZeXOniZw3lc3RKTUcHPuQHo5a+eRzmQ/sDikhcjuRmntt/8tn8R0UT8bYZoO6f0IoNBYi8M75KGPPiBz4AUd9bKtWlJ5OMluT/XW5ZZ5bTvyUslJzOb0zSZb3vl4CuINMbM0xgLmz9XQwAivay26IGNZtACWatK9cyhAhMvj+sRfPZEpQ9vbaDT4WohXsEhsMsFhCFOb6DTUeNqwkGsd8QQTATaBiWn5IlBb8JOmFJFdKaD1Va0zFlxHiDnqlFyNVvSnqFA5GWXcGvQTutuHD7OUrPbPcKXngvFkdUalGhh2kypx6A8hDVTmTFhYIcdceE/g49pIeHQOFeMe/Fsit25V/zkjIhtWKIrzS1igknD27Wb/btB4JCYjJtU2t+0HZoPwh1aBqSWOUh7uaCkQSn8MM61a/8VOVhSy+WHnZVhCdrmW5HfpDwx4ulbceNTsgr2rEqOAceVhJaS2HVNY0blwaDJ/vzN+UrazP5Rv7J7t3ahnHEKSJ7Rc1q5pN+uDFz9Yw8KxzPXiaRorLKmAJa3TcxH2vI52X28JXU4CGs03JWrGK8WuudgKK00hQsneW0/dxZqC7d+qpNjPT/tDxrfNjnQFLJTcrKx5C++i4mFlTLzJ8U3H6poHTqWmHgugncwuWRaLy8AlcT7AnfzwygZbuOtldJN X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TzZqeVhkYjMrbCtRUnpXTDU0YWJxMCsrdENmeDlFeTRSMkIzWUxIdWVCbWFH?= =?utf-8?B?eDlMOE41Uk9nSWh2R1hZaHk4cnRNREZQZ3lrSEpLTnExcXd0byt6ZEJnTFpC?= =?utf-8?B?anFyQ3YwaU5KRWFPRnZnc3oxN3NiOEQ5Y1A4bDhhdTBWR0U3VHdGczJFcGJE?= =?utf-8?B?VCtKa0JnWXZxZ1RySTA5YzJacVk5b096ZWtXZnNYSnptYWFNVjZqYWxYWE12?= =?utf-8?B?cE9TQkpSZkF5L3NLL3c1V2dLYVJvaXhyWVdVODV3d205VlFzbHNPTU1DQ3U0?= =?utf-8?B?M21FSkNpTWhpMVpMNFhFdElTM0ZraGJXZDgyV2UveGwrODRFSkZzendjM24v?= =?utf-8?B?ZDZIYlRacXpYcHRoM0VVSzc0aXh4eXIyQVF0SW5SditNeXpoRkF0NjdrL0VG?= =?utf-8?B?eEkyb0tXdGd2ZUhLOVlscGErRitWVkd6dkk3MGdDeXJBUGFGUlUvWHJYc2dV?= =?utf-8?B?Uk10REJHNUxDTVdOMnNTdlB6YW5KNllJd0ExSE1KcUVjRVJVb0JRYmk5d1dI?= =?utf-8?B?T20rTDNONTVtWGFrWDA1czlwL2EwcUx0OTFCRVJMRExEVzloaExNdFFuMHR2?= =?utf-8?B?SmU2NnlEOVBjaUFrM1NIU1B4LzFHcHkwYnoybDRoRUZuNnhEUTROb0tQdDNS?= =?utf-8?B?clFFRjZCODZ6SkpBeE55bGFiVStRNzQ2UHRqK200YktLejNDSEFwSFJqc1BJ?= =?utf-8?B?Z3RUbnU0UkdVUDRVTUNmVGV3VnNOS3FDNDBoeU8vSWFIbEc4WGhabXhPNHkz?= =?utf-8?B?RkwyK244bm93WjVCN0JnVitRTHJ1d1BOeS82ZG53YytCTThkVjZZeUlicWtL?= =?utf-8?B?b3Mwb2hIbWNlVnkvME9OQXk2M21SeHBYd25KRmhTM2ttNUp3UjA3R2V3ZytX?= =?utf-8?B?ZlZLY1RYMUo0SzQvSTBPN01pcVJOMUh0Q1YvclNpalpwc3BTWDdQMXNVWE5z?= =?utf-8?B?Mk91V0pKOU8zL1h6UnlBaXpuNnMvYi9ESmlqOVNCRzNFdkJSUlMwSVFFblVH?= =?utf-8?B?SGsyWktGZnpmeURLZDJyYm96VmhibmtrcXgvc21xU3F0RXQzS1FiL3MxNFpI?= =?utf-8?B?S3lubEpyTldVM1FOSExqSm0zUEVvcm8ydDJzbkkzcnNHcnNDWForOGVjYmVz?= =?utf-8?B?WnNrS0VmSmh5ZmFMMDg3M1E0SWFLVDFldUdUZUl6WnRyMHdRdmhHM29Ba3F0?= =?utf-8?B?Qi8zVFpJT1hVMmtiY0szZnBkOWY1aFpCNjFyRXRYc2VsQmk1YlJUWFI3OUFY?= =?utf-8?B?N2k1WFMyWi9JSnNNRVFLdjFBYzFwMHA3bXc1WGtoZEthWTU3YjU3blYzbFpR?= =?utf-8?B?THFVSUJWWndHOGE5NEcrRENKaW9WMjZxTWJHOWdCb014Qk96QkNONWMxSE5F?= =?utf-8?B?OSt3MFBudHFobHBiL0Q0M2w3V3hSWDk5UWFPM3ZzeVN0emRwNERJclIrL3Rk?= =?utf-8?B?UklnWkhVVUNlRk5LVm94dEp0d0FZVUZzOERRdndqMys3bm1HQzFBUG1STi8v?= =?utf-8?B?WTJvNW5PZUFGY2hrNEdFL0RCUDBkUk5GYlBCN2F6cjVkNVgrRXNkWEIrYlVv?= =?utf-8?B?ZldSakY4aUQzdHVkeWpCalladkpUdWpQSlpKWjZoUmNUY0M3OENqdisrcDhD?= =?utf-8?B?RGwzNURXK2hJUlBaV2JnMmhZZE9sdlArOHB6MmlJNUhsQm9Ud0xNdTZXd3lz?= =?utf-8?B?OXA2T1BjcTVzc3NZZUJFaTNMR0JTR0U2d3hsa01EUUYvTlorY1E3aitwWGp1?= =?utf-8?Q?MH8F3VE//6DQXF2WWDU44EXPzy5OKmncSwp+RtR?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: eafe91fb-f00b-4d9d-b0df-08daa61f2f61 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Oct 2022 15:43:29.7350 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2P250MB0826 Subject: Re: [FFmpeg-devel] [PATCH] avcodec/asv: Split ASV1Context into decoder and encoder contexts 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Andreas Rheinhardt: > A lot of the stuff in ASV1Context is actually only used > by decoders or encoders, but not both: Of the seven contexts > in ASV1Context, only the BswapDSPContext is used by both. > So splitting makes sense. > > Signed-off-by: Andreas Rheinhardt > --- > libavcodec/asv.c | 4 ++- > libavcodec/asv.h | 25 ++-------------- > libavcodec/asvdec.c | 72 ++++++++++++++++++++++++++++----------------- > libavcodec/asvenc.c | 69 ++++++++++++++++++++++++++----------------- > 4 files changed, 92 insertions(+), 78 deletions(-) > > diff --git a/libavcodec/asv.c b/libavcodec/asv.c > index dcae90982a..3aa08c30c0 100644 > --- a/libavcodec/asv.c > +++ b/libavcodec/asv.c > @@ -25,6 +25,8 @@ > > #include > > +#include "libavutil/attributes.h" > + > #include "asv.h" > #include "avcodec.h" > #include "bswapdsp.h" > @@ -88,7 +90,7 @@ const uint16_t ff_asv2_level_tab[63][2] = { > > av_cold void ff_asv_common_init(AVCodecContext *avctx) > { > - ASV1Context *const a = avctx->priv_data; > + ASVCommonContext *const a = avctx->priv_data; > > ff_bswapdsp_init(&a->bbdsp); > > diff --git a/libavcodec/asv.h b/libavcodec/asv.h > index 269bbe7c18..7c0983a497 100644 > --- a/libavcodec/asv.h > +++ b/libavcodec/asv.h > @@ -28,38 +28,17 @@ > > #include > > -#include "libavutil/mem_internal.h" > - > #include "avcodec.h" > -#include "blockdsp.h" > #include "bswapdsp.h" > -#include "fdctdsp.h" > -#include "idctdsp.h" > -#include "get_bits.h" > -#include "pixblockdsp.h" > -#include "put_bits.h" > > -typedef struct ASV1Context { > +typedef struct ASVCommonContext { > AVCodecContext *avctx; > - BlockDSPContext bdsp; > BswapDSPContext bbdsp; > - FDCTDSPContext fdsp; > - IDCTDSPContext idsp; > - PixblockDSPContext pdsp; > - PutBitContext pb; > - GetBitContext gb; > - ScanTable scantable; > - int inv_qscale; > int mb_width; > int mb_height; > int mb_width2; > int mb_height2; > - DECLARE_ALIGNED(32, int16_t, block)[6][64]; > - uint16_t intra_matrix[64]; > - int q_intra_matrix[64]; > - uint8_t *bitstream_buffer; > - unsigned int bitstream_buffer_size; > -} ASV1Context; > +} ASVCommonContext; > > extern const uint8_t ff_asv_scantab[64]; > extern const uint8_t ff_asv_ccp_tab[17][2]; > diff --git a/libavcodec/asvdec.c b/libavcodec/asvdec.c > index 4ca370d1ec..81260058fc 100644 > --- a/libavcodec/asvdec.c > +++ b/libavcodec/asvdec.c > @@ -25,6 +25,7 @@ > > #include "libavutil/attributes.h" > #include "libavutil/mem.h" > +#include "libavutil/mem_internal.h" > #include "libavutil/thread.h" > > #include "asv.h" > @@ -33,6 +34,7 @@ > #include "codec_internal.h" > #include "config_components.h" > #include "decode.h" > +#include "get_bits.h" > #include "idctdsp.h" > #include "mpeg12data.h" > > @@ -48,6 +50,20 @@ static VLC dc_ccp_vlc; > static VLC ac_ccp_vlc; > static VLC asv2_level_vlc; > > +typedef struct ASVDecContext { > + ASVCommonContext c; > + > + GetBitContext gb; > + > + BlockDSPContext bdsp; > + IDCTDSPContext idsp; > + ScanTable scantable; > + DECLARE_ALIGNED(32, int16_t, block)[6][64]; > + uint16_t intra_matrix[64]; > + uint8_t *bitstream_buffer; > + unsigned int bitstream_buffer_size; > +} ASVDecContext; > + > static av_cold void init_vlcs(void) > { > INIT_VLC_STATIC(&ccp_vlc, CCP_VLC_BITS, 17, > @@ -106,7 +122,7 @@ static inline int asv2_get_level(GetBitContext *gb) > return code - 31; > } > > -static inline int asv1_decode_block(ASV1Context *a, int16_t block[64]) > +static inline int asv1_decode_block(ASVDecContext *a, int16_t block[64]) > { > int i; > > @@ -119,7 +135,7 @@ static inline int asv1_decode_block(ASV1Context *a, int16_t block[64]) > if (ccp == 16) > break; > if (ccp < 0 || i >= 10) { > - av_log(a->avctx, AV_LOG_ERROR, "coded coeff pattern damaged\n"); > + av_log(a->c.avctx, AV_LOG_ERROR, "coded coeff pattern damaged\n"); > return AVERROR_INVALIDDATA; > } > > @@ -137,7 +153,7 @@ static inline int asv1_decode_block(ASV1Context *a, int16_t block[64]) > return 0; > } > > -static inline int asv2_decode_block(ASV1Context *a, int16_t block[64]) > +static inline int asv2_decode_block(ASVDecContext *a, int16_t block[64]) > { > int i, count, ccp; > > @@ -173,13 +189,13 @@ static inline int asv2_decode_block(ASV1Context *a, int16_t block[64]) > return 0; > } > > -static inline int decode_mb(ASV1Context *a, int16_t block[6][64]) > +static inline int decode_mb(ASVDecContext *a, int16_t block[6][64]) > { > int i, ret; > > a->bdsp.clear_blocks(block[0]); > > - if (a->avctx->codec_id == AV_CODEC_ID_ASV1) { > + if (a->c.avctx->codec_id == AV_CODEC_ID_ASV1) { > for (i = 0; i < 6; i++) { > if ((ret = asv1_decode_block(a, block[i])) < 0) > return ret; > @@ -193,7 +209,7 @@ static inline int decode_mb(ASV1Context *a, int16_t block[6][64]) > return 0; > } > > -static inline void idct_put(ASV1Context *a, AVFrame *frame, int mb_x, int mb_y) > +static inline void idct_put(ASVDecContext *a, AVFrame *frame, int mb_x, int mb_y) > { > int16_t(*block)[64] = a->block; > int linesize = frame->linesize[0]; > @@ -207,7 +223,7 @@ static inline void idct_put(ASV1Context *a, AVFrame *frame, int mb_x, int mb_y) > a->idsp.idct_put(dest_y + 8 * linesize, linesize, block[2]); > a->idsp.idct_put(dest_y + 8 * linesize + 8, linesize, block[3]); > > - if (!(a->avctx->flags & AV_CODEC_FLAG_GRAY)) { > + if (!(a->c.avctx->flags & AV_CODEC_FLAG_GRAY)) { > a->idsp.idct_put(dest_cb, frame->linesize[1], block[4]); > a->idsp.idct_put(dest_cr, frame->linesize[2], block[5]); > } > @@ -216,12 +232,13 @@ static inline void idct_put(ASV1Context *a, AVFrame *frame, int mb_x, int mb_y) > static int decode_frame(AVCodecContext *avctx, AVFrame *p, > int *got_frame, AVPacket *avpkt) > { > - ASV1Context *const a = avctx->priv_data; > + ASVDecContext *const a = avctx->priv_data; > + const ASVCommonContext *const c = &a->c; > const uint8_t *buf = avpkt->data; > int buf_size = avpkt->size; > - int mb_x, mb_y, ret; > + int ret; > > - if (buf_size * 8LL < a->mb_height * a->mb_width * 13LL) > + if (buf_size * 8LL < c->mb_height * c->mb_width * 13LL) > return AVERROR_INVALIDDATA; > > if ((ret = ff_get_buffer(avctx, p, 0)) < 0) > @@ -235,7 +252,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, > if (!a->bitstream_buffer) > return AVERROR(ENOMEM); > > - a->bbdsp.bswap_buf((uint32_t *) a->bitstream_buffer, > + c->bbdsp.bswap_buf((uint32_t *) a->bitstream_buffer, > (const uint32_t *) buf, buf_size / 4); > ret = init_get_bits8(&a->gb, a->bitstream_buffer, buf_size); > } else { > @@ -244,8 +261,8 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, > if (ret < 0) > return ret; > > - for (mb_y = 0; mb_y < a->mb_height2; mb_y++) { > - for (mb_x = 0; mb_x < a->mb_width2; mb_x++) { > + for (int mb_y = 0; mb_y < c->mb_height2; mb_y++) { > + for (int mb_x = 0; mb_x < c->mb_width2; mb_x++) { > if ((ret = decode_mb(a, a->block)) < 0) > return ret; > > @@ -253,9 +270,9 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, > } > } > > - if (a->mb_width2 != a->mb_width) { > - mb_x = a->mb_width2; > - for (mb_y = 0; mb_y < a->mb_height2; mb_y++) { > + if (c->mb_width2 != c->mb_width) { > + int mb_x = c->mb_width2; > + for (int mb_y = 0; mb_y < c->mb_height2; mb_y++) { > if ((ret = decode_mb(a, a->block)) < 0) > return ret; > > @@ -263,9 +280,9 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, > } > } > > - if (a->mb_height2 != a->mb_height) { > - mb_y = a->mb_height2; > - for (mb_x = 0; mb_x < a->mb_width; mb_x++) { > + if (c->mb_height2 != c->mb_height) { > + int mb_y = c->mb_height2; > + for (int mb_x = 0; mb_x < c->mb_width; mb_x++) { > if ((ret = decode_mb(a, a->block)) < 0) > return ret; > > @@ -283,8 +300,9 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, > static av_cold int decode_init(AVCodecContext *avctx) > { > static AVOnce init_static_once = AV_ONCE_INIT; > - ASV1Context *const a = avctx->priv_data; > + ASVDecContext *const a = avctx->priv_data; > const int scale = avctx->codec_id == AV_CODEC_ID_ASV1 ? 1 : 2; > + int inv_qscale; > int i; > > if (avctx->extradata_size < 1) { > @@ -297,19 +315,19 @@ static av_cold int decode_init(AVCodecContext *avctx) > ff_init_scantable(a->idsp.idct_permutation, &a->scantable, ff_asv_scantab); > avctx->pix_fmt = AV_PIX_FMT_YUV420P; > > - if (avctx->extradata_size < 1 || (a->inv_qscale = avctx->extradata[0]) == 0) { > + if (avctx->extradata_size < 1 || (inv_qscale = avctx->extradata[0]) == 0) { > av_log(avctx, AV_LOG_ERROR, "illegal qscale 0\n"); > if (avctx->codec_id == AV_CODEC_ID_ASV1) > - a->inv_qscale = 6; > + inv_qscale = 6; > else > - a->inv_qscale = 10; > + inv_qscale = 10; > } > > for (i = 0; i < 64; i++) { > int index = ff_asv_scantab[i]; > > a->intra_matrix[i] = 64 * scale * ff_mpeg1_default_intra_matrix[index] / > - a->inv_qscale; > + inv_qscale; > } > > ff_thread_once(&init_static_once, init_vlcs); > @@ -319,7 +337,7 @@ static av_cold int decode_init(AVCodecContext *avctx) > > static av_cold int decode_end(AVCodecContext *avctx) > { > - ASV1Context *const a = avctx->priv_data; > + ASVDecContext *const a = avctx->priv_data; > > av_freep(&a->bitstream_buffer); > a->bitstream_buffer_size = 0; > @@ -333,7 +351,7 @@ const FFCodec ff_asv1_decoder = { > CODEC_LONG_NAME("ASUS V1"), > .p.type = AVMEDIA_TYPE_VIDEO, > .p.id = AV_CODEC_ID_ASV1, > - .priv_data_size = sizeof(ASV1Context), > + .priv_data_size = sizeof(ASVDecContext), > .init = decode_init, > .close = decode_end, > FF_CODEC_DECODE_CB(decode_frame), > @@ -347,7 +365,7 @@ const FFCodec ff_asv2_decoder = { > CODEC_LONG_NAME("ASUS V2"), > .p.type = AVMEDIA_TYPE_VIDEO, > .p.id = AV_CODEC_ID_ASV2, > - .priv_data_size = sizeof(ASV1Context), > + .priv_data_size = sizeof(ASVDecContext), > .init = decode_init, > FF_CODEC_DECODE_CB(decode_frame), > .p.capabilities = AV_CODEC_CAP_DR1, > diff --git a/libavcodec/asvenc.c b/libavcodec/asvenc.c > index 25ea96e64e..e185d501b3 100644 > --- a/libavcodec/asvenc.c > +++ b/libavcodec/asvenc.c > @@ -27,6 +27,7 @@ > > #include "libavutil/attributes.h" > #include "libavutil/mem.h" > +#include "libavutil/mem_internal.h" > > #include "aandcttab.h" > #include "asv.h" > @@ -36,6 +37,19 @@ > #include "encode.h" > #include "fdctdsp.h" > #include "mpeg12data.h" > +#include "pixblockdsp.h" > +#include "put_bits.h" > + > +typedef struct ASVEncContext { > + ASVCommonContext c; > + > + PutBitContext pb; > + > + PixblockDSPContext pdsp; > + FDCTDSPContext fdsp; > + DECLARE_ALIGNED(32, int16_t, block)[6][64]; > + int q_intra_matrix[64]; > +} ASVEncContext; > > static inline void asv1_put_level(PutBitContext *pb, int level) > { > @@ -49,7 +63,7 @@ static inline void asv1_put_level(PutBitContext *pb, int level) > } > } > > -static inline void asv2_put_level(ASV1Context *a, PutBitContext *pb, int level) > +static inline void asv2_put_level(ASVEncContext *a, PutBitContext *pb, int level) > { > unsigned int index = level + 31; > > @@ -58,14 +72,14 @@ static inline void asv2_put_level(ASV1Context *a, PutBitContext *pb, int level) > } else { > put_bits_le(pb, 5, 0); /* Escape code */ > if (level < -128 || level > 127) { > - av_log(a->avctx, AV_LOG_WARNING, "Clipping level %d, increase qscale\n", level); > + av_log(a->c.avctx, AV_LOG_WARNING, "Clipping level %d, increase qscale\n", level); > level = av_clip_int8(level); > } > put_bits_le(pb, 8, level & 0xFF); > } > } > > -static inline void asv1_encode_block(ASV1Context *a, int16_t block[64]) > +static inline void asv1_encode_block(ASVEncContext *a, int16_t block[64]) > { > int i; > int nc_count = 0; > @@ -111,7 +125,7 @@ static inline void asv1_encode_block(ASV1Context *a, int16_t block[64]) > put_bits(&a->pb, 5, 0xF); /* End of block */ > } > > -static inline void asv2_encode_block(ASV1Context *a, int16_t block[64]) > +static inline void asv2_encode_block(ASVEncContext *a, int16_t block[64]) > { > int i; > int count = 0; > @@ -166,13 +180,13 @@ static inline void asv2_encode_block(ASV1Context *a, int16_t block[64]) > > #define MAX_MB_SIZE (30 * 16 * 16 * 3 / 2 / 8) > > -static inline int encode_mb(ASV1Context *a, int16_t block[6][64]) > +static inline int encode_mb(ASVEncContext *a, int16_t block[6][64]) > { > int i; > > av_assert0(put_bytes_left(&a->pb, 0) >= MAX_MB_SIZE); > > - if (a->avctx->codec_id == AV_CODEC_ID_ASV1) { > + if (a->c.avctx->codec_id == AV_CODEC_ID_ASV1) { > for (i = 0; i < 6; i++) > asv1_encode_block(a, block[i]); > } else { > @@ -183,7 +197,7 @@ static inline int encode_mb(ASV1Context *a, int16_t block[6][64]) > return 0; > } > > -static inline void dct_get(ASV1Context *a, const AVFrame *frame, > +static inline void dct_get(ASVEncContext *a, const AVFrame *frame, > int mb_x, int mb_y) > { > int16_t (*block)[64] = a->block; > @@ -201,7 +215,7 @@ static inline void dct_get(ASV1Context *a, const AVFrame *frame, > for (i = 0; i < 4; i++) > a->fdsp.fdct(block[i]); > > - if (!(a->avctx->flags & AV_CODEC_FLAG_GRAY)) { > + if (!(a->c.avctx->flags & AV_CODEC_FLAG_GRAY)) { > a->pdsp.get_pixels(block[4], ptr_cb, frame->linesize[1]); > a->pdsp.get_pixels(block[5], ptr_cr, frame->linesize[2]); > for (i = 4; i < 6; i++) > @@ -212,9 +226,9 @@ static inline void dct_get(ASV1Context *a, const AVFrame *frame, > static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, > const AVFrame *pict, int *got_packet) > { > - ASV1Context *const a = avctx->priv_data; > + ASVEncContext *const a = avctx->priv_data; > + const ASVCommonContext *const c = &a->c; > int size, ret; > - int mb_x, mb_y; > > if (pict->width % 16 || pict->height % 16) { > AVFrame *clone = av_frame_alloc(); > @@ -258,30 +272,30 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, > return ret; > } > > - if ((ret = ff_alloc_packet(avctx, pkt, a->mb_height * a->mb_width * MAX_MB_SIZE + > + if ((ret = ff_alloc_packet(avctx, pkt, c->mb_height * c->mb_width * MAX_MB_SIZE + > AV_INPUT_BUFFER_MIN_SIZE)) < 0) > return ret; > > init_put_bits(&a->pb, pkt->data, pkt->size); > > - for (mb_y = 0; mb_y < a->mb_height2; mb_y++) { > - for (mb_x = 0; mb_x < a->mb_width2; mb_x++) { > + for (int mb_y = 0; mb_y < c->mb_height2; mb_y++) { > + for (int mb_x = 0; mb_x < c->mb_width2; mb_x++) { > dct_get(a, pict, mb_x, mb_y); > encode_mb(a, a->block); > } > } > > - if (a->mb_width2 != a->mb_width) { > - mb_x = a->mb_width2; > - for (mb_y = 0; mb_y < a->mb_height2; mb_y++) { > + if (c->mb_width2 != c->mb_width) { > + int mb_x = c->mb_width2; > + for (int mb_y = 0; mb_y < c->mb_height2; mb_y++) { > dct_get(a, pict, mb_x, mb_y); > encode_mb(a, a->block); > } > } > > - if (a->mb_height2 != a->mb_height) { > - mb_y = a->mb_height2; > - for (mb_x = 0; mb_x < a->mb_width; mb_x++) { > + if (c->mb_height2 != c->mb_height) { > + int mb_y = c->mb_height2; > + for (int mb_x = 0; mb_x < c->mb_width; mb_x++) { > dct_get(a, pict, mb_x, mb_y); > encode_mb(a, a->block); > } > @@ -296,7 +310,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, > size = (put_bytes_output(&a->pb) + 3) / 4; > > if (avctx->codec_id == AV_CODEC_ID_ASV1) { > - a->bbdsp.bswap_buf((uint32_t *) pkt->data, > + c->bbdsp.bswap_buf((uint32_t *) pkt->data, > (uint32_t *) pkt->data, size); > } > > @@ -308,9 +322,10 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, > > static av_cold int encode_init(AVCodecContext *avctx) > { > - ASV1Context *const a = avctx->priv_data; > + ASVEncContext *const a = avctx->priv_data; > int i; > const int scale = avctx->codec_id == AV_CODEC_ID_ASV1 ? 1 : 2; > + int inv_qscale; > > ff_asv_common_init(avctx); > ff_fdctdsp_init(&a->fdsp, avctx); > @@ -319,23 +334,23 @@ static av_cold int encode_init(AVCodecContext *avctx) > if (avctx->global_quality <= 0) > avctx->global_quality = 4 * FF_QUALITY_SCALE; > > - a->inv_qscale = (32 * scale * FF_QUALITY_SCALE + > + inv_qscale = (32 * scale * FF_QUALITY_SCALE + > avctx->global_quality / 2) / avctx->global_quality; > > avctx->extradata = av_mallocz(8); > if (!avctx->extradata) > return AVERROR(ENOMEM); > avctx->extradata_size = 8; > - ((uint32_t *) avctx->extradata)[0] = av_le2ne32(a->inv_qscale); > + AV_WLA(32, avctx->extradata, inv_qscale); > ((uint32_t *) avctx->extradata)[1] = av_le2ne32(AV_RL32("ASUS")); > > for (i = 0; i < 64; i++) { > if (a->fdsp.fdct == ff_fdct_ifast) { > int q = 32LL * scale * ff_mpeg1_default_intra_matrix[i] * ff_aanscales[i]; > - a->q_intra_matrix[i] = (((int64_t)a->inv_qscale << 30) + q / 2) / q; > + a->q_intra_matrix[i] = (((int64_t)inv_qscale << 30) + q / 2) / q; > } else { > int q = 32 * scale * ff_mpeg1_default_intra_matrix[i]; > - a->q_intra_matrix[i] = ((a->inv_qscale << 16) + q / 2) / q; > + a->q_intra_matrix[i] = ((inv_qscale << 16) + q / 2) / q; > } > } > > @@ -349,7 +364,7 @@ const FFCodec ff_asv1_encoder = { > .p.type = AVMEDIA_TYPE_VIDEO, > .p.id = AV_CODEC_ID_ASV1, > .p.capabilities = AV_CODEC_CAP_DR1, > - .priv_data_size = sizeof(ASV1Context), > + .priv_data_size = sizeof(ASVEncContext), > .init = encode_init, > FF_CODEC_ENCODE_CB(encode_frame), > .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, > @@ -364,7 +379,7 @@ const FFCodec ff_asv2_encoder = { > .p.type = AVMEDIA_TYPE_VIDEO, > .p.id = AV_CODEC_ID_ASV2, > .p.capabilities = AV_CODEC_CAP_DR1, > - .priv_data_size = sizeof(ASV1Context), > + .priv_data_size = sizeof(ASVEncContext), > .init = encode_init, > FF_CODEC_ENCODE_CB(encode_frame), > .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, Will apply this patch tomorrow unless there are objections. - Andreas _______________________________________________ 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".