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 AA19E4AB2A for ; Wed, 12 Jun 2024 13:54:05 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 15C6E68D9DC; Wed, 12 Jun 2024 16:53:21 +0300 (EEST) Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03olkn2069.outbound.protection.outlook.com [40.92.59.69]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 799E568D9BD for ; Wed, 12 Jun 2024 16:53:19 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JtszVXFC3kIsz455HKz5wOwLJazd6o4NgUvOSG956E6XhMvBcVzpsnorxysnmGTE2Fxurru3G4Q69161M4XigJx1E7bAGThBqcEk3ENrecGUaH76aChnvAeUWPh1S0U0ZAY0Cej9sDQ6coLnL2nJ5sEZx6iUMRfcXKWhaPJ8i4XeLgCW2EtC0V4IxWWKFBsLD9sLkMkSeDSBSVBbPZ77Be18NU6epwFsOe+plBp3hD2qGq55zrfWi3DLGd6FujEqRlX9bS248UORBfZd6elbDJY2PFQLs8db+PHNRRZS6zFTQ74+C5gmsUdVZSYtR4zMUxQKoWmLBYXiPbxTgQ7cQw== 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=FcEoJsi19FlskmJqHM3onH94T34YmUH39n4n3j6r+ec=; b=Ey15zg12VJW9aBK/Yb+v5WV5wv4x61XFT3AsHRWgDFR3GS48EOtuuFfzCJowveuS5ZPZ8rmdIWxkv2IIgAVO0BJpuNQtcU2PRsh/InEvfQgXYMXtu7ufZCNq7+F9z+/skyOjF9OqWFzajat2FsHMKCbqHAwMxPopYmXVxSVnNZkCJ30r/KHg41vhFm8COmJzCk9UGm7M0k0o8zRkk8sInj1qmmrqIVOQ2ihfYFTOEgAtKo2RyX+ErWvN4x6bgC6FzitfSsIBt8jAVS9anv+NhKjYfjTMgVFxLZc0A3O2pXI35zVBpMd89bnaMqvMAOoI3kj/elzlfeq5skkYMJhIZw== 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=FcEoJsi19FlskmJqHM3onH94T34YmUH39n4n3j6r+ec=; b=QpS46cY20o2rw7JxyJx0970EGfcEL4BhGqqS8Ma8q172oiaoAVZgYIt2iCE9fQQ0X+xNnrLp2X2Zvg4IUWdwS6NXqs4WZjE5H+K+R+DkhRWP76b+FhW8S9M3UAAi2/fqaxHtqgtcdFljaoA3C1tEHqQZqNxNPzk0+olMf/RMVJhYj6h7VaYgE25tG5RsCZ+k4pfDy8aIvAHeQKfCKYgNZL104sbBQdPDLslU4oFel8j1S1FCewOZjgUi4ulvoCXh+o64S4F39N9gaTI0RGjVX/xnzEfwfrcOaYXaLSP4jL6Y3XyQEKFLMSoRGGixFgZ/TFDy4pJ62NInwt939ojjLA== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS8P250MB0054.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:359::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.37; Wed, 12 Jun 2024 13:53:17 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%3]) with mapi id 15.20.7633.036; Wed, 12 Jun 2024 13:53:17 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Jun 2024 15:48:25 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [diCAPpcEG6cuUWZFlAkJVuU1icjH9Gt8] X-ClientProxiedBy: ZR0P278CA0189.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::6) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240612134853.2102377-28-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS8P250MB0054:EE_ X-MS-Office365-Filtering-Correlation-Id: 65543f7e-5b5c-42ba-1d08-08dc8ae70304 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199020|440099020|3412199017|1710799020; X-Microsoft-Antispam-Message-Info: e/SoTDeLxP6NzJ0sGlEH0HeVtV3fgRQ4/7iK+w0OMsYyYNRe/RsvaBkF8wxKEon1k85RfFenadtLkVHzBQRKtod5w93u7pfbk1LwkAOKnHv3Gha9sIxonu0d/f6N5j7t4xpdy2akJvb37a2xhbny4iSGXsMiLvWOO3KioKEYXFn9k56joimU4Xt9RvxClLivM9UK6BaTPWR/9/fBe4UDdWTKwndEC0Hrixqd9b5YTVT5fyBXEpgzzhk02YkmADh7QJrVekzq5Jx3gRmydINwmaoPDCgCrU0a2UKJpJDSUazuClD963waiHJYtRwzND90eXVjjTKH2SNFEnEoEF4PQ9ySfG/m0YsOvYx1bB/pX0eSMIQa+QKuYekUIdB3Ja2aH6pWmG8uBP3XBO5II+L9dB7XZKoUSNMkgjfRhkpWWfonwd7g15bOXl7fLh4E8XeitqiTFqbh43YYq7YMDPW5pjdkSiERfEtbpvdT/mjIY2HbMORsGRHYOdzyM9lyVAmjqSKWrneYafPOZP5Y82dyyHf9a4UsmoEjXONaGEWmtn1AzW+sBwMzjasgR9vQrDHEWXncRaSqaxr3K3GiY7Ske1cES1iH7VWP2Iq2OMD+CMrWtg5q9jA+FHsd/0/sDLBc X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3IamhinJKx7td9LZ7D48eCqf3NfCoxgbNBuViD4aaawSsT69oO+YNmMgqB61?= =?us-ascii?Q?ova5FKyBeeBtXzDDcMApYGu2Tq4srqnchQxdufp+D6FYTRJxPe1jLjQCib7f?= =?us-ascii?Q?V4cxYLmbLOiOuPoGLpsBud0UMT82cKJTCRpNW+nOQl0cxt4Jc8E9gEILcU2O?= =?us-ascii?Q?bDQffKOoMZ080P52kW4z3c6TVuAeKjOiO7JzetyBsGBVcCiTtKPOGOEw0PYj?= =?us-ascii?Q?mwoo+3LTWBRvUBSHeDBXup8/nVEQe6UOyX5ZQOGhSjHd2x1xjJ+/Pt2CWHrn?= =?us-ascii?Q?zUmiYIvByF+kSMlvXEJ753o6F5vCgZtYrTlDfCnRtgVWI3p4EJcesJj7s6Du?= =?us-ascii?Q?tfvYj7RpiJWaRowLdc4ceka0+ZfTR0k63BJ7PCT3xZysvX/H7AsRRjioAycN?= =?us-ascii?Q?czIWkQfJuDCK/bZWWPL5xKz55E13pLRqrmQMuml6DfiJvClhzVw/X9OLv07V?= =?us-ascii?Q?2VUDQn19sDpuzU3iAUQvl3jGEc2oVcrB5qQSFxh+yN6S6NzBlmL/mjKcLQDn?= =?us-ascii?Q?H7aDGtfLRozj9u31LN47xRtQdDKCep6GbQNiVL+kSuFVsQ5+AdL3iXFEon+M?= =?us-ascii?Q?pT9SzeZ2OMhpVV9Zs5PULtZEUWkOMX7dNjhEDoKKh4ZPjQ12Bpj9g/YgmNhw?= =?us-ascii?Q?yqBh60Dyn+PsyVrkHMCyt4Lt1asms/wrDSWjuSQHG96UY/KQ0n12Z47guf1b?= =?us-ascii?Q?DX+9Uv27oobJ3tJFvqSmJBR1GICtS3/gk3wb6Vsjk59HvjJN1NCGWhh0P001?= =?us-ascii?Q?qILZP0tXJkjb1XkjOR7dYL/tji9BzCiKANqv7QDSkj0pjTRgkbPJNrmoshrj?= =?us-ascii?Q?sKLOl8rW3xZlrzTSyphSJi1mxx3qcKKq7ILjsnT1UCKrwUmEP5NYA2Wkl7xW?= =?us-ascii?Q?sLZ75Rbc823V0FiwcJ9+rVIWMJrfYXgi6rS5YRrdCLQAowBFaunEUcf3iU6U?= =?us-ascii?Q?rcII4ksEekzKvvuXEi0ObuH8IlMzL7OmFgZ+LhjtluQeOteSVp0t3pkmTyEh?= =?us-ascii?Q?KoeK2tMijPAyHIW72E24zLyUULA6MBYMYRuNFlukmOsmqUFQojhdHZ4t6J36?= =?us-ascii?Q?DaFsGT2o/UZ3v1zoz17x4sgNcLwxH4R4xU+bEzKEvXrEzshJ3ud4BsId7I6h?= =?us-ascii?Q?k43zn4pw0QyESgNW8KdEbD5JXYKIzbH4XAsVaQjp+wP7gIFSXwaBFq33MExO?= =?us-ascii?Q?sLbjNZjj7u6bjXxni6rmOtecjXvMz7Ddk4cBu1Xe09bTKRQjlbfp2dN5QpyH?= =?us-ascii?Q?Zkr4MXcoi4+LnGZVuT7FNvclDZg9Uz11Dy4CLuKRmg=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 65543f7e-5b5c-42ba-1d08-08dc8ae70304 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2024 13:53:17.4498 (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: AS8P250MB0054 Subject: [FFmpeg-devel] [PATCH 29/57] avcodec/mpegvideo_enc: Only keep what is used from MECmpContext 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 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: A MECmpContext is quite big (792B here) and given how ff_update_duplicate_context() works, it is (unfortunately) copied quite frequently when using slice threading. Therefore keep only what is needed from MECmpContext and remove MECmpContext from MpegEncContext. Signed-off-by: Andreas Rheinhardt --- libavcodec/me_cmp.c | 4 +-- libavcodec/mpeg4videoenc.c | 2 +- libavcodec/mpegvideo.h | 4 ++- libavcodec/mpegvideo_enc.c | 59 ++++++++++++++++++++---------------- libavcodec/x86/me_cmp_init.c | 2 +- 5 files changed, 40 insertions(+), 31 deletions(-) diff --git a/libavcodec/me_cmp.c b/libavcodec/me_cmp.c index 27da787c71..478bfc207d 100644 --- a/libavcodec/me_cmp.c +++ b/libavcodec/me_cmp.c @@ -653,7 +653,7 @@ static int dct_sad8x8_c(MpegEncContext *s, const uint8_t *src1, s->pdsp.diff_pixels_unaligned(temp, src1, src2, stride); s->fdsp.fdct(temp); - return s->mecc.sum_abs_dctelem(temp); + return s->sum_abs_dctelem(temp); } #if CONFIG_GPL @@ -819,7 +819,7 @@ static int rd8x8_c(MpegEncContext *s, const uint8_t *src1, const uint8_t *src2, s->idsp.idct_add(lsrc2, 8, temp); - distortion = s->mecc.sse[1](NULL, lsrc2, lsrc1, 8, 8); + distortion = s->sse_cmp[1](NULL, lsrc2, lsrc1, 8, 8); return distortion + ((bits * s->qscale * s->qscale * 109 + 64) >> 7); } diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c index 583ea9de6f..84b603f312 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -673,7 +673,7 @@ void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], } diff = diff * 256 / (xe * ye); } else { - diff = s->mecc.sad[0](NULL, p_pic, b_pic, s->linesize, 16); + diff = s->sad_cmp[0](NULL, p_pic, b_pic, s->linesize, 16); } if (diff > s->qscale * 70) { // FIXME check that 70 is optimal s->mb_skipped = 0; diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 79c5561793..844da6881f 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -220,7 +220,6 @@ typedef struct MpegEncContext { H264ChromaContext h264chroma; HpelDSPContext hdsp; IDCTDSPContext idsp; - MECmpContext mecc; MpegvideoEncDSPContext mpvencdsp; PixblockDSPContext pdsp; QpelDSPContext qdsp; @@ -508,6 +507,9 @@ typedef struct MpegEncContext { me_cmp_func ildct_cmp[2]; ///< 0 = intra, 1 = non-intra me_cmp_func n_sse_cmp[2]; ///< either SSE or NSSE cmp func + me_cmp_func sad_cmp[2]; + me_cmp_func sse_cmp[2]; + int (*sum_abs_dctelem)(const int16_t *block); /** * ratecontrol qmin qmax limiting method diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 3d659fa290..73e1a69490 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -308,19 +308,20 @@ av_cold void ff_dct_encode_init(MpegEncContext *s) static av_cold int me_cmp_init(MpegEncContext *s, AVCodecContext *avctx) { + MECmpContext mecc; me_cmp_func me_cmp[6]; int ret; - ff_me_cmp_init(&s->mecc, avctx); - ret = ff_me_init(&s->me, avctx, &s->mecc, 1); + ff_me_cmp_init(&mecc, avctx); + ret = ff_me_init(&s->me, avctx, &mecc, 1); if (ret < 0) return ret; - ret = ff_set_cmp(&s->mecc, me_cmp, s->frame_skip_cmp, 1); + ret = ff_set_cmp(&mecc, me_cmp, s->frame_skip_cmp, 1); if (ret < 0) return ret; s->frame_skip_cmp_fn = me_cmp[1]; if (avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) { - ret = ff_set_cmp(&s->mecc, me_cmp, avctx->ildct_cmp, 1); + ret = ff_set_cmp(&mecc, me_cmp, avctx->ildct_cmp, 1); if (ret < 0) return ret; if (!me_cmp[0] || !me_cmp[4]) @@ -329,12 +330,18 @@ static av_cold int me_cmp_init(MpegEncContext *s, AVCodecContext *avctx) s->ildct_cmp[1] = me_cmp[4]; } + s->sum_abs_dctelem = mecc.sum_abs_dctelem; + + s->sse_cmp[0] = mecc.sse[0]; + s->sse_cmp[1] = mecc.sse[1]; + s->sad_cmp[0] = mecc.sad[0]; + s->sad_cmp[1] = mecc.sad[1]; if (avctx->mb_cmp == FF_CMP_NSSE) { - s->n_sse_cmp[0] = s->mecc.nsse[0]; - s->n_sse_cmp[1] = s->mecc.nsse[1]; + s->n_sse_cmp[0] = mecc.nsse[0]; + s->n_sse_cmp[1] = mecc.nsse[1]; } else { - s->n_sse_cmp[0] = s->mecc.sse[0]; - s->n_sse_cmp[1] = s->mecc.sse[1]; + s->n_sse_cmp[0] = mecc.sse[0]; + s->n_sse_cmp[1] = mecc.sse[1]; } return 0; @@ -1123,8 +1130,8 @@ static int get_intra_count(MpegEncContext *s, const uint8_t *src, for (y = 0; y < h; y += 16) { for (x = 0; x < w; x += 16) { int offset = x + y * stride; - int sad = s->mecc.sad[0](NULL, src + offset, ref + offset, - stride, 16); + int sad = s->sad_cmp[0](NULL, src + offset, ref + offset, + stride, 16); int mean = (s->mpvencdsp.pix_sum(src + offset, stride) + 128) >> 8; int sae = get_sae(src + offset, mean, stride); @@ -2347,28 +2354,28 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, /* pre quantization */ if (s->mc_mb_var[s->mb_stride * mb_y + mb_x] < 2 * s->qscale * s->qscale) { // FIXME optimize - if (s->mecc.sad[1](NULL, ptr_y, dest_y, wrap_y, 8) < 20 * s->qscale) + if (s->sad_cmp[1](NULL, ptr_y, dest_y, wrap_y, 8) < 20 * s->qscale) skip_dct[0] = 1; - if (s->mecc.sad[1](NULL, ptr_y + 8, dest_y + 8, wrap_y, 8) < 20 * s->qscale) + if (s->sad_cmp[1](NULL, ptr_y + 8, dest_y + 8, wrap_y, 8) < 20 * s->qscale) skip_dct[1] = 1; - if (s->mecc.sad[1](NULL, ptr_y + dct_offset, dest_y + dct_offset, - wrap_y, 8) < 20 * s->qscale) + if (s->sad_cmp[1](NULL, ptr_y + dct_offset, dest_y + dct_offset, + wrap_y, 8) < 20 * s->qscale) skip_dct[2] = 1; - if (s->mecc.sad[1](NULL, ptr_y + dct_offset + 8, dest_y + dct_offset + 8, - wrap_y, 8) < 20 * s->qscale) + if (s->sad_cmp[1](NULL, ptr_y + dct_offset + 8, dest_y + dct_offset + 8, + wrap_y, 8) < 20 * s->qscale) skip_dct[3] = 1; - if (s->mecc.sad[1](NULL, ptr_cb, dest_cb, wrap_c, 8) < 20 * s->qscale) + if (s->sad_cmp[1](NULL, ptr_cb, dest_cb, wrap_c, 8) < 20 * s->qscale) skip_dct[4] = 1; - if (s->mecc.sad[1](NULL, ptr_cr, dest_cr, wrap_c, 8) < 20 * s->qscale) + if (s->sad_cmp[1](NULL, ptr_cr, dest_cr, wrap_c, 8) < 20 * s->qscale) skip_dct[5] = 1; if (!chroma_y_shift) { /* 422 */ - if (s->mecc.sad[1](NULL, ptr_cb + uv_dct_offset, - dest_cb + uv_dct_offset, - wrap_c, 8) < 20 * s->qscale) + if (s->sad_cmp[1](NULL, ptr_cb + uv_dct_offset, + dest_cb + uv_dct_offset, + wrap_c, 8) < 20 * s->qscale) skip_dct[6] = 1; - if (s->mecc.sad[1](NULL, ptr_cr + uv_dct_offset, - dest_cr + uv_dct_offset, - wrap_c, 8) < 20 * s->qscale) + if (s->sad_cmp[1](NULL, ptr_cr + uv_dct_offset, + dest_cr + uv_dct_offset, + wrap_c, 8) < 20 * s->qscale) skip_dct[7] = 1; } } @@ -2647,9 +2654,9 @@ static int sse(MpegEncContext *s, const uint8_t *src1, const uint8_t *src2, int int x,y; if(w==16 && h==16) - return s->mecc.sse[0](NULL, src1, src2, stride, 16); + return s->sse_cmp[0](NULL, src1, src2, stride, 16); else if(w==8 && h==8) - return s->mecc.sse[1](NULL, src1, src2, stride, 8); + return s->sse_cmp[1](NULL, src1, src2, stride, 8); for(y=0; ymecc.sse[0](c, pix1, pix2, stride, h); + score1 = c->sse_cmp[0](c, pix1, pix2, stride, h); else score1 = ff_sse16_mmx(c, pix1, pix2, stride, h); score2 = ff_hf_noise16_mmx(pix1, stride, h) + ff_hf_noise8_mmx(pix1+8, stride, h) -- 2.40.1 _______________________________________________ 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".