From patchwork Sun Jan 30 06:27:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33936 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1772124iov; Sat, 29 Jan 2022 22:33:55 -0800 (PST) X-Google-Smtp-Source: ABdhPJyS15w6n0+rgBVHapS1WhsgF3irAvqzw/vOG0o36Va9WV8syDdvWogi3tOluYWWzrOGY8GH X-Received: by 2002:a17:906:4fcc:: with SMTP id i12mr12727575ejw.682.1643524434944; Sat, 29 Jan 2022 22:33:54 -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 24si6494264edv.15.2022.01.29.22.33.54; Sat, 29 Jan 2022 22:33:54 -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=EVX+UumH; 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 2253D68B308; Sun, 30 Jan 2022 08:29:23 +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-am6eur05olkn2023.outbound.protection.outlook.com [40.92.91.23]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3105768B2E2 for ; Sun, 30 Jan 2022 08:29:20 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iItI+eWDHYlL+Df6ak8cjj0IWeVfF8lUjsvF5M88lfMt9ceOhGswTmoeRKYR8mUsqWUIPj7HG/E50n+ubHytyVBSjx3sAuAHKKs57QskiunQQF/3lfCw88VqE6RDwUQONEpVHD2T2i8iDxI94P+woDzmqDNyQ9VaU5p6USkZaeI7MC9IRVv7xIxF0tNdX4I0ZP3Y9pIrxNJqK9BoS5I7WoY+EhFCXez0gudXDWwICuebawLn/u2kMHEzKpSzmLT18KJpMv6xzZWBoONzrBcX71GUiOXytHnu4QLIP08yXCy4jt57h4xDdU9q991MBB4SkZDv8BozXmmPbnyvwbTcAA== 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=ImXW0cZY6tnlvCCmg5mAiWOvDHvkLUnSBHb/s1HjYjY=; b=SXyS6qQHtWAeBrS5qp/nMJo0tCaDb54YpX4//iyC0dN4chI2YAzLS+KWD6pTR5ZzrsPs84nk0jekgIX30cGbkUPLOCls5z4GDY1tg4Y8zmOL4xCPvIhFprf9XS2IA8M5KqcApk04sQbpKAa9wSPFL5SwJ9yuZBNFEgvhjXXjiRD0U6k6F9AcT11UvYrOjLn3+wqofyU3yxwTI4aD0EmrDpBrtOlYbOkqJyzwWXrZp/kFOVIlzVnly/NX0UVFDerAkgujNWH4YuniOQzUM54xArlhnsC1FLNFLOy0TKV+gH/dNEIUzuQC4lRMMZJYusYc5eflkIYg2zUOchcqHrtqcg== 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=ImXW0cZY6tnlvCCmg5mAiWOvDHvkLUnSBHb/s1HjYjY=; b=EVX+UumH31eipN/tkH1qJ4TSHcEuRuy+cLj9HtKjMx8OzqtYIujhljdBsN7EF7BSyZ8kygs05JqzV/x8p7NFLiLn2fqESYw2u5oTZdm485Y0R+GAgjWNtdynVP7rxUv3Rb/cGjLxZaRFR+LyEiiSJ+yd+WlZOf5nZ78Ypqo3Wo7BgWrKhy6q5sVMN61AUpbodfDaJzz+vqE9cNNm0Dg5Y1pjRLnp+OQ9pAKNnU+ExtY+m/IMfH2ekIRO30GaYfwbPh0qGYe7whGQptrezkxpqw7exfww4EOKeFi9Bueis+olh4cPO4sb7CrqBbEhqjnqQPlQAGr8Zu/k3AKeQRNUrg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB6239.eurprd03.prod.outlook.com (2603:10a6:800:140::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.20; Sun, 30 Jan 2022 06:29:16 +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.4930.021; Sun, 30 Jan 2022 06:29:16 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:44 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [QRPkezuVc/58+zZkLl2ZdxTjhsFN+W5e] X-ClientProxiedBy: AM6PR10CA0044.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:209:80::21) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220130062749.936489-35-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 56a799a4-9871-4f30-2845-08d9e3b9d711 X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: H0f6Z2/GQREHPYJK+7yK3OYCOJDWsp4Zd9l/XglEX9brsqwJy8syznUtiEfN5iiZ5OFtbYamAxPlJk4VKRmkl6JGD/UE184iwh6eZyOKguWkHs60cZe2yvhPlERg1TbLpYR4BE0ioKJPLd22yDnQluFIiUBkEhUwttEZovh75e6orIEqu7O1DEFbaXwn6L10is/rP1ZKiX7R7JaaX/GLLHjFUS1got2QXn7HMIrDa3qnwL8dCeQimlpob+n8QvmMAXYfTJr2Mrxj2fgtgXYd+KWmqhMOINDpnBsbzQXnoAJwh0vTZ9PJfETRHli3NxPPBIW5Nu/xyWdYtaPvidYmUWQqanl7sSjLn+V1o4PGpPMYGZKbjR8tiqIsmqTJlTxuIR27OCULLzGSXRqreGuUsu9pKBlQMUQm+WoBiMTa4nPXUk/CFp/WA7UBcCw4i21fvNKXVND/VltMcTOSJenfRrMXjykv9D4DPUaeaM7gNfFiTfAuEJARXD2dt0D/L8aCcTBP03Rpb9eg3ZdGP9s6E3fcqQVWa0c5yJD1eNoCuXErXezQ/K/EGYBhFWbFt91X X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: oo7nNz3Pd4kgmsIltCyevQZgqhJ5Kt4IVJBsUobelIVKk/nUOOQa6tOj5kH0mf94b41FJzqSeyjS2w5HC+uds+GqzIW0iHcddX9x6eyjXHNtTFQal90uHP276AD/VneMK6OwmTVTW7MSOAWsLyNQFvtJHRzZ0P24PtHKrfiDv/PuycnjGvfmqgBedTWqEVGE1qEGT98Og2u1ZvzovwQzIY4VmCl+Tbr/1DpBqTH7/SSPKgyuqbX31eX0BLqxOJNVaV9TMe03yolMPiKib3RZYQ2+2jcrP7USqHVjue/nJhqN9yaZyr7/6QTIdcnstwhVmpZuCdrkoJgj82sMBlrOcdL1lAAz1AirVv+eXPHf9tWFl3eLEksh7GsGAxdM9hM4YL7Kqpbtc48aNfCVjJu2Jx0EFsJDoVvZNlV/ue2/2EYS2/57ml+hViTkV1Mrbgd5ZhYWcemyr3P5T6EKuKwyKsvseKq0f8kAyJ6C5WMl6RPepPH9wU8T5LaHHCkeARVXV8wBu2SRS/vgfNKvG5vpQtSyeW6Ig3D2ccCFmYOdP0rlPvp6tjcDmVNqqOi0Cc8y6t0XwvNjr601XW3P3/CDQPW+/0dCnj9/M5uXTKtoeNR+yWNtXjW9xmr/RMu/2GQngeoyEbF803TJnF73RlpZTnCW+5hLrHwdDfplmzBl8SKoZo1JFoFD4M9chXTzNLCSJSzPFkKGZQF2gaX5siCg2+uC/caxKVEVyq8D6Qc3/VtPv7h8K87UUBW3bJmkFJhnyuWLoxTV4MuCmhv/KaL7to6Y8PMAcvWxqaFKuYt8cPFuZrLjRTZ0h5efb7j/HkGSLUAnz0KImbTSZzuNDaf/LaMXVLTaabuik8mQ5OGqxfeUIxc5P686VSRwiohGbZcWqcZ0meMhAaqUhYaP3drOV2x/quoBj5X/6DigQ8o4PxdA0xZHhXSOld2ZftkvQJ741mqNpGKVbdfKYveLIE6KlQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 56a799a4-9871-4f30-2845-08d9e3b9d711 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2022 06:29:16.7240 (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: VI1PR03MB6239 Subject: [FFmpeg-devel] [PATCH 36/41] 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: Ktu/QLwSzn8M 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 ed62175db5..201ca81621 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -203,14 +203,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 @@ -475,9 +468,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 0204b4dacd..892115b68f 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -821,26 +821,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)))) @@ -848,7 +848,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); @@ -993,21 +993,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 ada5935410..23381a31ca 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -82,11 +82,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[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; /* mpegvideo_enc common options */ 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;