From patchwork Tue Feb 1 13:06:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 34015 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp608434iov; Tue, 1 Feb 2022 05:17:12 -0800 (PST) X-Google-Smtp-Source: ABdhPJzlCDD8OOKvDQ8pCcPYpnZMX8QBeNU/ya5hQuSMzvCXrqOvyTE6zE/Yu7ym0yfF5MDAfKA6 X-Received: by 2002:a17:906:1d14:: with SMTP id n20mr20935989ejh.714.1643721432717; Tue, 01 Feb 2022 05:17:12 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id he20si7496262ejc.771.2022.02.01.05.17.11; Tue, 01 Feb 2022 05:17:12 -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=@outlook.com header.s=selector1 header.b=Ia9PMz5D; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4ADF868B3AA; Tue, 1 Feb 2022 15:08:47 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2064.outbound.protection.outlook.com [40.92.91.64]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6FEC168B388 for ; Tue, 1 Feb 2022 15:08:40 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QI0Iel1Si+8i4LIm0fUVsKNIKaawBps1D6dbG+s8apqo59/ms0K7DuAI/DS8ge+2AJwYBomPEcLahhXoDU4CgX0j6On7nuf2JuKBWZhT0LdsQdVD53cZ2Omv/k0cOK0xRcRp11pxWqs0vG++iyGki9eizmIi0Km6UEGR69k/6waBbvRbsmo3C0N3OjWkfpnEXV9PshOUGGVvZsphFfwr950LRULsOWm93ckxi+itnbxCK3QjqWMueZxnK9MR+6uHS8q6ax64TPU8nTt28oTdkREK7drtGf5mHAtV0xYkwSw8aXp15tJjpCmtR4lfOxyRyI2fYPD0Zy2mjlELdX2bOw== 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=0M4Cbf8y89pumiEouTDl8EYkfry3aVGZZNIeZA+rtI8=; b=IaXcszz5mVYyO1x/23fcXLy3ilzRDkeSc4rds4S4B1fbiqdjB/Nug4227Z7ZTvVzwVrZ+JGuldHwmaM7assbAV/i57Eyu8kbTdKQsIoUDBgyYHr7FniFtvTJG50w+1mmATgdX4mU4JtDgnmN22PeVmSeheO/iwXVOT+07zn6/mxxQmUHdTr1vGd/Ujn6pSpnVQzWtjXzPo49W2qmZSHCDM/DXuLeIIYKuQH7YGNQeKcQ9apSlrAAs5Q2FZMZ+dKltOBHV+d2F+By+/2sM7MitWJFVdEzbfvF9VFZfLP8JNwjaU0gMoOuFO3aJbCkIgwLcjAdddMTGTEkZiGV5r4XCQ== 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=0M4Cbf8y89pumiEouTDl8EYkfry3aVGZZNIeZA+rtI8=; b=Ia9PMz5DFKP4V8uK1SHCY8aCJQzQP0407HQ/xRVHdc/3y+Q7CM4/QnpUY370NUhVmVF8zJJ8R2Dy/bD22RyD342i6+sPtCUixIHaAPCM2vkrbMO2SGbfLxHcBUhJPtFWWMtSaCHgBnIA4EAULicsA6k5WZGouGwkxIDStEWEaNeZ1F+v4oT0TQ0zES0H5NflbzKiXBxXwS4b+D5Jqbxwy3HzY/xS4UE+h8sdWCuGe44dkld9CNbeLzLcaMkoDRp+46RANKlHAqebuXPKO3AbZZoUQulQ+/DSxr8qyv2fyJ7I7siSmKdMwYwGKr6nO1cx2RemMFSgdb9NhWoXjtqSPg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM9PR03MB7962.eurprd03.prod.outlook.com (2603:10a6:20b:439::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.22; Tue, 1 Feb 2022 13:08:38 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%6]) with mapi id 15.20.4951.011; Tue, 1 Feb 2022 13:08:38 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 1 Feb 2022 14:06:43 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [NEQDE5bUEtqZY79OaEB30H4ULDAkyogF] X-ClientProxiedBy: AM6P195CA0092.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:86::33) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220201130706.1420875-45-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: df731c87-b192-42b1-9474-08d9e583ecc5 X-MS-TrafficTypeDiagnostic: AM9PR03MB7962:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Oiy+VU1MGOrKmDaCPs4mBvV7CoRZPkPBAIfF4FbIrw1xms7FjhsHXShUn+QEPHKDnMcnRwxxWpa/PrMWdxK0bgUi0E6nKr6kNea5Y1k2boP+g+faEPMsH8Fh6xjSdf4wuQBFmNpANN6TIo4sjHicoLkLEEfQ4gNor/VcsVtvTErZCU2GvfXwYQhCyxuHC5jWcav9P4/i4x27VH5MnZ3xmaBiJ0qnWBKVQQdbucO1K3BfbjYBtYBPy1twvZe7bVuUx5xkPpPIy4DHBiyku1G3YesXDe4nwChcX+UlC3R8NIMp0LMfH7tqyzObc8kyfVYdN/CmyQpqoj0hfNNtn4x/HfCsz3vQeYM9+5+wcywOV+CZkH9OZqW46giZXBrd6t14K6akC4t31XhOCgA2spKo7Qw5nZUlz1KdSOVTsQtuZqqcGxTh0cF1Z1+yOXvbNO7A5VphxoZk3ftKfUgPz47OW5HQdWoS5aPoxH8u2odU9Ob1/j2xqYPTL5NCBNUBo/n8aQiW9T2/vI9ZpcMI25VYP+gKfV3V/c/Jzd8Lujx2iftuo+PI88dSyrSeeLVPDUnB X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: uanMWmkYwV/S2xp2zAuMZHuXhHWAJZgtREmRkEGjda1rFe5VyqGFxT5/QW99SFRVeLGYTKMAet8pzux9ovAIyVoW+z7GkE9oC0n3wfv6JhOEW4vOOvamwkO/QTc/QB6SnL/GCjE5GE5XGvrJ6yIiVM+XK60PfhKl4ETNsGqCD+BCFOKedmXHoPM7VnFVB7wbmqeWRpj8We6kA8VeHXAA+5CpWEp9CKzrKhTW8o+4PjUyVwiHiWCpAU3+fBBLekZjdcWzM5Yo9HAC4VxNAPiqPsW8ZF92HyUcgIcjC16D7slK5YY6ogF0KTMe/RdLo1awmpuZ/C08ivpE54s7N/U5jpgs9Hij8OT5cT0hjDBzt0kAC78H/Dgf1/ysomyn74lD8o8FOkN3DVbHoP7q90vdzWD/XVPi5D1A6qqId7XHYX4cA34miC0vH13BKCiOwMIFSrQq56XoTK3zjzf8RTq+Zu7o1xuzdWppQbSpcV7mN67SmKtc6EpqiRflrcfLSipnrOMwTayWbesXsrz1F1x513wXawZLYG5glIBwFoxJlQfnlG96eSN50PzzW1M2XvyV4kMXLFafi3ltg3JCm+pKI167ODXnXMi1u4TCgMSQ3LsvbEnsao/ycYs2y/linrSX7Vr5FXmEKCFtaakBUozKvAdaqnrgBliOkW0HXKNiS8VSnJQgGsIUGuwAPr/GrD8JVnuM4iyxh8dyETeib3ekx5xbOJk4RzdBbQnV5mC9fKGnBvmXiXPpRqtVeQsWTlWjihIZmZrSu3XkYn4Suy6x3pEa0bhGV9AxItzbjSYD/J6CmIGk3TV1vtOjt39zjER4F8QN1PEs6HelJWhTjVUViND2Ss6EpFvO9MimvNe6UH9wYmZ65Jl9zdB0YwJtVYjRfECH46SARsiXqnX4lWUcvlxrS2txL8f++9I7mKYqzAk/z09RYh8hGnFnPrmQoNW+10pXUbSpr4QInCT4EqdFPA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: df731c87-b192-42b1-9474-08d9e583ecc5 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Feb 2022 13:08:22.6265 (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: AM9PR03MB7962 Subject: [FFmpeg-devel] [PATCH v2 46/69] avcodec/mpegvideo: Move encoder-only base-arrays to MPVMainEncContext 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: KJ6diioplRgr Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 10 -------- libavcodec/mpegvideo_enc.c | 48 +++++++++++++++++++------------------- libavcodec/mpegvideoenc.h | 11 +++++++++ libavcodec/ratecontrol.c | 4 ++-- 4 files changed, 37 insertions(+), 36 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 307964b10e..0d6b79fe5d 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -200,14 +200,7 @@ typedef struct MPVContext { H263DSPContext h263dsp; int f_code; ///< forward MV resolution int b_code; ///< backward MV resolution for B-frames (MPEG-4) - int16_t (*p_mv_table_base)[2]; - int16_t (*b_forw_mv_table_base)[2]; - int16_t (*b_back_mv_table_base)[2]; - int16_t (*b_bidir_forw_mv_table_base)[2]; - int16_t (*b_bidir_back_mv_table_base)[2]; - int16_t (*b_direct_mv_table_base)[2]; int16_t (*p_field_mv_table_base)[2]; - int16_t (*b_field_mv_table_base)[2]; int16_t (*p_mv_table)[2]; ///< MV table (1MV per MB) P-frame encoding int16_t (*b_forw_mv_table)[2]; ///< MV table (1MV per MB) forward mode B-frame encoding int16_t (*b_back_mv_table)[2]; ///< MV table (1MV per MB) backward mode B-frame encoding @@ -471,9 +464,6 @@ typedef struct MPVContext { int vbv_ignore_qmax; - /* temp buffers for rate control */ - float *cplx_tab, *bits_tab; - /* flag to indicate a reinitialization is required, e.g. after * a frame size change */ int context_reinit; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 1739472352..8b2de4770b 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -823,26 +823,26 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) /* Allocate MV tables; the MV and MB tables will be copied * to slice contexts by ff_update_duplicate_context(). */ mv_table_size = (s->mb_height + 2) * s->mb_stride + 1; - if (!FF_ALLOCZ_TYPED_ARRAY(s->p_mv_table_base, mv_table_size) || - !FF_ALLOCZ_TYPED_ARRAY(s->b_forw_mv_table_base, mv_table_size) || - !FF_ALLOCZ_TYPED_ARRAY(s->b_back_mv_table_base, mv_table_size) || - !FF_ALLOCZ_TYPED_ARRAY(s->b_bidir_forw_mv_table_base, mv_table_size) || - !FF_ALLOCZ_TYPED_ARRAY(s->b_bidir_back_mv_table_base, mv_table_size) || - !FF_ALLOCZ_TYPED_ARRAY(s->b_direct_mv_table_base, mv_table_size)) + if (!FF_ALLOCZ_TYPED_ARRAY(m->p_mv_table_base, mv_table_size) || + !FF_ALLOCZ_TYPED_ARRAY(m->b_forw_mv_table_base, mv_table_size) || + !FF_ALLOCZ_TYPED_ARRAY(m->b_back_mv_table_base, mv_table_size) || + !FF_ALLOCZ_TYPED_ARRAY(m->b_bidir_forw_mv_table_base, mv_table_size) || + !FF_ALLOCZ_TYPED_ARRAY(m->b_bidir_back_mv_table_base, mv_table_size) || + !FF_ALLOCZ_TYPED_ARRAY(m->b_direct_mv_table_base, mv_table_size)) return AVERROR(ENOMEM); - s->p_mv_table = s->p_mv_table_base + s->mb_stride + 1; - s->b_forw_mv_table = s->b_forw_mv_table_base + s->mb_stride + 1; - s->b_back_mv_table = s->b_back_mv_table_base + s->mb_stride + 1; - s->b_bidir_forw_mv_table = s->b_bidir_forw_mv_table_base + s->mb_stride + 1; - s->b_bidir_back_mv_table = s->b_bidir_back_mv_table_base + s->mb_stride + 1; - s->b_direct_mv_table = s->b_direct_mv_table_base + s->mb_stride + 1; + s->p_mv_table = m->p_mv_table_base + s->mb_stride + 1; + s->b_forw_mv_table = m->b_forw_mv_table_base + s->mb_stride + 1; + s->b_back_mv_table = m->b_back_mv_table_base + s->mb_stride + 1; + s->b_bidir_forw_mv_table = m->b_bidir_forw_mv_table_base + s->mb_stride + 1; + s->b_bidir_back_mv_table = m->b_bidir_back_mv_table_base + s->mb_stride + 1; + s->b_direct_mv_table = m->b_direct_mv_table_base + s->mb_stride + 1; /* Allocate MB type table */ mb_array_size = s->mb_height * s->mb_stride; if (!FF_ALLOCZ_TYPED_ARRAY(s->mb_type, mb_array_size) || !FF_ALLOCZ_TYPED_ARRAY(s->lambda_table, mb_array_size) || - !FF_ALLOC_TYPED_ARRAY (s->cplx_tab, mb_array_size) || - !FF_ALLOC_TYPED_ARRAY (s->bits_tab, mb_array_size)) + !FF_ALLOC_TYPED_ARRAY (m->cplx_tab, mb_array_size) || + !FF_ALLOC_TYPED_ARRAY (m->bits_tab, mb_array_size)) return AVERROR(ENOMEM); #define ALLOCZ_ARRAYS(p, mult, numb) ((p) = av_calloc(numb, mult * sizeof(*(p)))) @@ -850,7 +850,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) (s->avctx->flags & AV_CODEC_FLAG_INTERLACED_ME)) { int16_t (*tmp1)[2]; uint8_t *tmp2; - if (!(tmp1 = ALLOCZ_ARRAYS(s->b_field_mv_table_base, 8, mv_table_size)) || + if (!(tmp1 = ALLOCZ_ARRAYS(m->b_field_mv_table_base, 8, mv_table_size)) || !(tmp2 = ALLOCZ_ARRAYS(s->b_field_select_table[0][0], 2 * 4, mv_table_size)) || !ALLOCZ_ARRAYS(s->p_field_select_table[0], 2 * 2, mv_table_size)) return AVERROR(ENOMEM); @@ -995,21 +995,21 @@ av_cold int ff_mpv_encode_end(AVCodecContext *avctx) av_freep(&avctx->stats_out); - av_freep(&s->p_mv_table_base); - av_freep(&s->b_forw_mv_table_base); - av_freep(&s->b_back_mv_table_base); - av_freep(&s->b_bidir_forw_mv_table_base); - av_freep(&s->b_bidir_back_mv_table_base); - av_freep(&s->b_direct_mv_table_base); - av_freep(&s->b_field_mv_table_base); + av_freep(&m->p_mv_table_base); + av_freep(&m->b_forw_mv_table_base); + av_freep(&m->b_back_mv_table_base); + av_freep(&m->b_bidir_forw_mv_table_base); + av_freep(&m->b_bidir_back_mv_table_base); + av_freep(&m->b_direct_mv_table_base); + av_freep(&m->b_field_mv_table_base); av_freep(&s->b_field_select_table[0][0]); av_freep(&s->p_field_select_table[0]); av_freep(&s->mb_type); av_freep(&s->lambda_table); - av_freep(&s->cplx_tab); - av_freep(&s->bits_tab); + av_freep(&m->cplx_tab); + av_freep(&m->bits_tab); if(s->q_chroma_intra_matrix != s->q_intra_matrix ) av_freep(&s->q_chroma_intra_matrix); if(s->q_chroma_intra_matrix16 != s->q_intra_matrix16) av_freep(&s->q_chroma_intra_matrix16); diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 86c86e0ddf..e124555b0a 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -84,11 +84,22 @@ typedef struct MPVMainEncContext { char *rc_eq; + /* temp buffers for rate control */ + float *cplx_tab, *bits_tab; + /* temporary frames used by b_frame_strategy == 2 */ AVFrame *tmp_frames[MPVENC_MAX_B_FRAMES + 2]; int b_frame_strategy; int b_sensitivity; int brd_scale; + + int16_t (*p_mv_table_base)[2]; + int16_t (*b_forw_mv_table_base)[2]; + int16_t (*b_back_mv_table_base)[2]; + int16_t (*b_bidir_forw_mv_table_base)[2]; + int16_t (*b_bidir_back_mv_table_base)[2]; + int16_t (*b_direct_mv_table_base)[2]; + int16_t (*b_field_mv_table_base)[2]; } MPVMainEncContext; #define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level)) diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index fa28e6d61d..bbaa9191a0 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -758,8 +758,8 @@ static void adaptive_quantization(MPVMainEncContext *m, double q) const float border_masking = m->border_masking; float bits_sum = 0.0; float cplx_sum = 0.0; - float *cplx_tab = s->cplx_tab; - float *bits_tab = s->bits_tab; + float *cplx_tab = m->cplx_tab; + float *bits_tab = m->bits_tab; const int qmin = s->avctx->mb_lmin; const int qmax = s->avctx->mb_lmax; Picture *const pic = &s->current_picture;