From patchwork Tue Feb 22 23:16:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 34460 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:d078:0:0:0:0 with SMTP id x24csp309187nkx; Tue, 22 Feb 2022 15:17:00 -0800 (PST) X-Google-Smtp-Source: ABdhPJyqyjL45ZE+au9tjp+gKITgwN67p1gHSr4coqx0nrbUoNicasghcoYmkmy3zhpR6MeSPWYm X-Received: by 2002:a17:906:37cf:b0:6ce:6321:5ecb with SMTP id o15-20020a17090637cf00b006ce63215ecbmr21156575ejc.385.1645571820418; Tue, 22 Feb 2022 15:17:00 -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 f18si16335483edf.441.2022.02.22.15.17.00; Tue, 22 Feb 2022 15:17:00 -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="M1ock/JJ"; 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 4603B68B192; Wed, 23 Feb 2022 01:16:57 +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-am6eur05olkn2046.outbound.protection.outlook.com [40.92.91.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ED66F680288 for ; Wed, 23 Feb 2022 01:16:49 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DJDVCNErBu2TAOMlGh9lHzqEqbBtczgTEg2mkb4ohbW/2pQ8JJRgaBUT/1QF/3y+u20hvELrL8J+YsyuBwDzVVDUq7gmCWJPZ/f4IGW7iwXhS7F7FWJ39guJDQ0iW+qfPWvD2U8AWGSyaX7hPLKBNl16ZUVM7f1KnlGafyY3TfDZ7sYiz5w+/qjg2pgbV2iTg58iDWJ4dqfnoR/980aRGKeLWS06LZ3YdRxJKzAJgleJ1Cma+oDwMBiM/eDdrSmOPAtd4v+r58Me90LP2DQmfQjq/H65v5YlwTPqWbaHkFG6+4rdqkM1+t/x2uRI3VGDqf7f1rODBSpvPxh63n7g7Q== 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=/5AdQrJ5F8juWeW6BC+rX9pjMP+S7gCse1ObSEen4QY=; b=fdAUz30/9zssdgzHtrCWTkAjsg77/S+48JJYXMHGReuQgYRO/PmpMZs/EZRqYHLaYeJ8zbLoDPB6Fo6olw70++7I3bOgoijVBWUWEV/VXIy/HKdyBO1BKCAcmvC5JQtDHCzFKRlZ5iO1cqsHRnJ6CLZLpCQ+QWieeXJ/jLxPZovanyr/qxNTBAh2xDKKD2W2MxmSTX+EoXOwjpNl+NJxSP432+MTg0+Tg5I+6C1D0J8/o8Nh/RJFG/LJtdGZHWdET49eOayIUpPtcFbtULt1lX9WB9GwQUpJc7FUUA1WyZk2iDHq8jiKpsd2CGjM9Q8KkvcymPx2B4HGnzDhsC3EZw== 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=/5AdQrJ5F8juWeW6BC+rX9pjMP+S7gCse1ObSEen4QY=; b=M1ock/JJVUz9F9A4qpkZQeDSpa9HMprYHegLPOEqjQEGrQW0S8wTEBcoljwWqQznPZ6EXBBuT9a+f0618tFZiRlxR7iXGk4wDHQAiq5VQyQGfJFCyGt/RHe3Pr7S2mkxTqbtw/uYw7V07jbDvq5WnQNh1+0pvrM+llloldBuP3aWTeh+ycWaPa5cqUY1PMB19n4yb+Qsl+Xc9rIc+wJOhjphg+f/qs16d6fVI8dPvOnux4DE4Ir+wDSqos7otj+3/xJuysMi8UDy1HCJcd0/voBxYf/wN4P/KHqHLpSVwSGeuMO8PbzxN5EZiryTy4B/rUK8OncbfU/DDd1mqYyDSA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by DB8PR03MB6172.eurprd03.prod.outlook.com (2603:10a6:10:135::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5017.22; Tue, 22 Feb 2022 23:16:48 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::b8d3:effd:9a3c:4090]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::b8d3:effd:9a3c:4090%6]) with mapi id 15.20.5017.022; Tue, 22 Feb 2022 23:16:48 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 23 Feb 2022 00:16:39 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [DQYt6hplEEKaz+HIlPYwDox8hV9SLC+J] X-ClientProxiedBy: AS8PR05CA0024.eurprd05.prod.outlook.com (2603:10a6:20b:311::29) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220222231641.501507-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c1d19985-01ee-464b-55f9-08d9f6596669 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQMUzK0h0wyFwXlNYOkAe0lWxzKWncGzAArDsFCIGc+1/hNDko3kVXXV+4kuRt5OWV7htpMEtKfSoYlwJGUHeMXuPZF26+bEjYwvIHBTpdBXbI/ebsba5WE/VdMyyUXDjVuChWuTTYT/j0Rwoxddge+2ojcAyD3WsDDPngXWTTrtAq0OtHPCRWz2awd5LKTrZbqk24TxAnlioWjOT5EiBmk0qWIan21/PiYzZbxUQkKuohr1Tv+rjAK3GiUPBwiE+bdqkmEryNOryUM5Tzvck0jtWnWWAWQny4B8m12VBV8OMyHeTLDpICwVVREaO/U5ZQ+dDtLk0JRGmDWQQa1A0Iu+2ZM+lHcW2OH/iIy7kEzm0bn7Q7iNxZ0G+9ps13hLrzCWIWK5KPPN9SjiMbkAI66IxlqujxFtHy0CnXGvKQIKYoiUW+nXTmFilHJjgN9puea1A6O/gpkdJ4moG48MpKjh61N5BH2nTPdsi7CBCBmIKbOa/rDDx20EvUZSXY8pp4GrCKtjY1IgQFCzjVA6XO/gsVeYAhM0lWvzM7ocRHVSWoO0R9MIpISgDWF5NdKKMPdkqp+jB7yXQG+kXA1c2p8EAQ0dd4wsw4frO/ctZ9LLZt/+8lu4Ney/Eit7wmhZyxZ1LlfXYZMdGBFn9JPLeku6R+h34fxhhJrOWOZFerL9NoXdtHOLfMquHxJhiRNYrq0bUJ4aggg4rh+Dw0NlVaOF7eICgc0xugiJ9ESzbMg+R2mqVYAeZw3eMt9/n+PTmU= X-MS-TrafficTypeDiagnostic: DB8PR03MB6172:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3UAyF1JFx9FkpsUEbwv9OKriV4lUZxEw95ciJPPiLvpjTxC8dSyAGAqKHfzi30fWjsuMUQtd8ZerC1VYk7FbbKdGqhcmP7jtqQ81aLaAbLjnMMGdfggYfkXiCDXLMN1pxCauBwYNFQSWs/kywyu1/7MDBbVEPR4uX5XVx6ncUhmpBjWEVEldR7f2sJnzkiORfG27wA3SLaIOOVstZlXu0pcBO+u01pWNM7U/DroLVtBjHoHXzV7tKKH4UxdRPfs5IMYs9EFoqFatnrnG+pt9tQXhmFPJjfOGbiv1cVap+wau7AlAZI+gPCzPExhbL+I1pqgMYAXIrRnEC8AMAY0JzYs9m1eZYvQ3MQ6td18HUu4LUvPcADPvyZLatYoi1hL06ibIZqr9PAkf9vqA1QzK+DEHrXRGk2hYJrZCDj24ZomlmMA8m0hHJqgdvkH6+GPCfT0vVnlteNZghYZlbvPvGjragjfYN/XjZcjLtWOIqP54yOBTdvKCfwnDz3SH7c5FU5TvB9pVxfjQn1hQLqyux3FaJoBaCtSgU9VNJNNJWx63NqlPAK7+wKmiEIyUjZrhTQKrK8vV7VLTyPTkXTrCsA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cboN2Y4qf3Y0au3ykwz08flbp3qx13LM1kg426odcZkqJReIpXQJj0YiEWrDtmQLwaCUSgUbyUtW9ACWjuJ+iB/ffsWHFYxfGF6Yn+FwVuibQuNcO4QKcskaOhOR/sjvUvP/vhCQybTeBJ9rxHV3zq7JHyUkmb1iegSaih3TsCXMVSSYFICgmxxdRPp6NQ9FfSzoHD8evG8GNPVWRS/sGMRcL2k63w0nL0RtTcXLLzsjgW4PMBPFhaUtD0tmel52EPrS1vww9nSTz8cViUhLYXEET5ws3ExikpMGW7slzcpUvU8HQHNKWRZIPm9jH1YB/KiaKb7jSZ5eLf0lmnkI/+RUkCA4WxxcprBXL1U1zxHoufNA4MxFmkq3DCip2DAXqv/c69DnGwQLVziIt97RNUzg89i8ceb0wD+CJe7zdzrtRWd/EAKXMFyBxLTDa/Y1sDpUDcRA86GOhnKrStvlC4ZjhXUPG3voPuAI099FtydZBS3QKNTZXCNccEng04autSnjezuxe5YBQeak+9RqFZgqowzyKgLRRQt57Jvl4r/C0/H7cqLY9vGgTrE7ItoD08EiFtdeIGJqQRcpSDsc9nbmt1GOrBp+t07bUsY9Mo8gzvSrNYtI6VNQNW8CN/rXfcjUQpfJIGYOZFQb3j4VqxocVn0Z0YZQH68Qqp9OvOgoPqNoEEaIwqNlhZvt87fXhJgyeqrOlLu1ecFZPfxXveVSroBnkk2g32TJBu9QlMFA3jWlciiu+gYeoY9a3qtPYDtaC27jarTxDeI+CveTR/U/4kpspFUhZ1Ni3i/sx0rbAUTzjIn0cIO62CuAo6KKpS4uL2+QW9OqQz4vEygbFsqbfMHlJUMhqy8/0nC9YYh62bNv4HAYPWR41OilIx2v7ys5LpggVv0ITBdS3iSejaMV+Jz95vSPYjajdNXBhAAkWWvOnDaoJ1a/47J5XvXfxeH84Dp6drJcpu4WCQ0Y/g== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c1d19985-01ee-464b-55f9-08d9f6596669 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2022 23:16:48.4568 (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: DB8PR03MB6172 Subject: [FFmpeg-devel] [PATCH 3/5] avcodec/magicyuvenc: Don't modify input frame 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: 8rpiDeFYUY8n It need not be writable at all. Instead, use temporary buffers for decorrelation. Signed-off-by: Andreas Rheinhardt --- The prediction functions could be rewritten to allow src and dst to alias each other; yet LLVidEncDSPContext.diff_bytes has the requirement that dst has an alignment of 16. libavcodec/magicyuvenc.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/libavcodec/magicyuvenc.c b/libavcodec/magicyuvenc.c index ffb0be1d14..5a37a49d63 100644 --- a/libavcodec/magicyuvenc.c +++ b/libavcodec/magicyuvenc.c @@ -67,6 +67,7 @@ typedef struct MagicYUVContext { uint8_t *slices[4]; unsigned slice_pos[4]; unsigned tables_size; + uint8_t *decorrelate_buf[2]; HuffEntry he[4][256]; LLVidEncDSPContext llvidencdsp; void (*predict)(struct MagicYUVContext *s, const uint8_t *src, uint8_t *dst, @@ -190,6 +191,12 @@ static av_cold int magy_encode_init(AVCodecContext *avctx) s->format = 0x6b; break; } + if (s->correlate) { + s->decorrelate_buf[0] = av_calloc(2U * avctx->height, FFALIGN(avctx->width, 16)); + if (!s->decorrelate_buf[0]) + return AVERROR(ENOMEM); + s->decorrelate_buf[1] = s->decorrelate_buf[0] + avctx->height * FFALIGN(avctx->width, 16); + } ff_llvidencdsp_init(&s->llvidencdsp); @@ -452,22 +459,26 @@ static int magy_encode_frame(AVCodecContext *avctx, AVPacket *pkt, } if (s->correlate) { - uint8_t *const data[4] = { frame->data[1], frame->data[0], - frame->data[2], frame->data[3] }; - const int linesize[4] = { frame->linesize[1], frame->linesize[0], - frame->linesize[2], frame->linesize[3] }; - uint8_t *r, *g, *b; + uint8_t *r, *g, *b, *decorrelated[2] = { s->decorrelate_buf[0], + s->decorrelate_buf[1] }; + const int decorrelate_linesize = FFALIGN(width, 16); + const uint8_t *const data[4] = { decorrelated[0], frame->data[0], + decorrelated[1], frame->data[3] }; + const int linesize[4] = { decorrelate_linesize, frame->linesize[0], + decorrelate_linesize, frame->linesize[3] }; g = frame->data[0]; b = frame->data[1]; r = frame->data[2]; for (i = 0; i < height; i++) { - s->llvidencdsp.diff_bytes(b, b, g, width); - s->llvidencdsp.diff_bytes(r, r, g, width); + s->llvidencdsp.diff_bytes(decorrelated[0], b, g, width); + s->llvidencdsp.diff_bytes(decorrelated[1], r, g, width); g += frame->linesize[0]; b += frame->linesize[1]; r += frame->linesize[2]; + decorrelated[0] += decorrelate_linesize; + decorrelated[1] += decorrelate_linesize; } for (i = 0; i < s->planes; i++) { @@ -531,6 +542,7 @@ static av_cold int magy_encode_close(AVCodecContext *avctx) for (i = 0; i < s->planes; i++) av_freep(&s->slices[i]); + av_freep(&s->decorrelate_buf); return 0; }