From patchwork Mon Dec 6 01:12:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 32063 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a0c:cdc3:0:0:0:0:0 with SMTP id a3csp5353361qvn; Sun, 5 Dec 2021 17:13:16 -0800 (PST) X-Google-Smtp-Source: ABdhPJzZ8r4MiM+btgI/kmgIxMq8NruYOm3F1sIllMIENqcxhZ8cqEEJ9oUm/pSbrjd5pQziiLhD X-Received: by 2002:a05:6402:2792:: with SMTP id b18mr49437552ede.329.1638753196628; Sun, 05 Dec 2021 17:13:16 -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 dz9si20858427edb.349.2021.12.05.17.13.16; Sun, 05 Dec 2021 17:13:16 -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=lRPik2BW; 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 1CC1F68A48B; Mon, 6 Dec 2021 03:13:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074036.outbound.protection.outlook.com [40.92.74.36]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7700D689F08 for ; Mon, 6 Dec 2021 03:13:02 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=M57erf/bHjYxXCtA9xoqjg2M6Ju4wl+eB+WtqjAy37lMkI2XCdWzI/1RVbEjXVccSn/0WBqFZWxMhcFiYtppj03s+7gYBFoZAyFm9QJmht29OkOqfU1tY2ukpdO5IPsKgEoAe4ne1sk6Oygg1SLyXNxjlUXMXAZ3+RtwvN/7BHy6lDq5bg8Iy/c0hguT1whcxzB7Uf8m/rjsQgJs46zNdrdheLtFbkV56MSb2Xh1oYwWN6zExRFIZEkn0HDpXEfiwFFWdjIWUuvO/KGuszT8K6kMgmFnMfsJQr7sV2I93U0+k4p/pOAQJk8K28AD52/HD15PtChHP1U00mwx03S+ng== 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=X0vCr+AQxD5cml1ONP6HC5rOZlP0VhYvK6apJT4UMn4=; b=ffq6cUAy927o5bih5QJiR3sAklXKiCMoKqb0zxYutGqu2uRP7U9NC7PMy98T0NN2cdmANqkNzIrbEY+vpS451YgeSyL5eLXqQEwxNe2lZxOZmEkZGMO6w4NUcOYUAOFqzcH3gxh3S3Hfpgd2ELA4Hjtsb0syJ0cCc0G/A/zcUfqWFwT25Npg4eO2EeiIcoHBC/ce9XHDjnZeXCRJAFzRvif0EraSHp2ymspfS15Ku7vvgG0aAe7Q/G4KFM9GVRBbQQJktoPZbR6AHBQef+n0AOFynqr8LITK6xWdfXytVZK9+Wd2s1whQxyCxmZKXNSoIIWwZu6IG3yFu/DBfg3HqQ== 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=X0vCr+AQxD5cml1ONP6HC5rOZlP0VhYvK6apJT4UMn4=; b=lRPik2BWy/TwFx8G2ox56qGDpdGhDaQkPP4hqalo/9Cobz6ugFi/HP+2ZMG3/WATZVkWkVs6WSUst/1P96eSiu+COyniaIG9/Lgz55XjNDSPZ5z7k1ZaPzq7q1R+iWhMrmOwAsiiK3M7l79OTOjlZn7xgBjo6Rz7D+2P20LJDhn6eIAlnS/SdpBY3b+b09EEEMGzBWQwDj3EbEaYDn/vCWhsgZExMsMUacAKGB5zc56EwNskGvfLVH6nIq2le+pKlayZ3C6AMF73ufU3ZoSjM+p6ZVlrRwU7zjb+9sWuoMJhYL7XsBFeysvTy81CAN7EqGcON6aRCnR+Iap6G0hUQQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB3686.eurprd03.prod.outlook.com (2603:10a6:209:2d::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.21; Mon, 6 Dec 2021 01:12:59 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca%4]) with mapi id 15.20.4755.021; Mon, 6 Dec 2021 01:12:59 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 6 Dec 2021 02:12:39 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [K2T0zfUFhx/2ke5pdzL+CfU4gJBbWRkf] X-ClientProxiedBy: FR3P281CA0055.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4b::18) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20211206011246.239514-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.248.74) by FR3P281CA0055.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4b::18) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Mon, 6 Dec 2021 01:12:58 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9f3f8303-5b15-4d6c-0fc1-08d9b8558ab5 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNWqLpJmXNddFmQxwc0tuI0lOYkopiDOCdrl92V2IWrMbVnlHnc2TYToRjNRWUBoL7mxhjSp9aKPRIthKKC/Jvq505DvEPh4+qLFDuBHTDmE5er91A4DJZLFO3hcoIetu8mMDjZq0KR9CGJtfG34B46Gv6LlFYgKV9vYZ+w0DiZyvtDXt4vSVI7ER3H2IadIishhIpgIWCKNJQtKdEIq2v09KfYmqHow17yeiWhELk6MChSphdmv5NKHkYGBSXvCkfpW8gekyqftTbY3LZB3dF6zQm99FB3L3T5Xp6LiFylTuW57UNIeVtCayZrzd+A5i5BXBH/0Kbu8noETLGB5NcchYnh8gRQ0BigbrzjCbenDki8dDuS/lCbQTpN0SFweY8nGYnwvwsq2zB7Co6Gmu/NSeKA9PH+my2GxmOlbH72jw6GWgtBRjYdUKE41NLzrZEYeGsPdlv76kQtwHrJvnX6pSGuSbIuvf7xRfGDCs8MP8wak+tDpCGB7y86NFLBySCsCbDHy1Zf7lQ6iY7c3xchp4WotnCZJq5pUliKmVo7I3/2n6ROYtNIMPZx9PA7ZL4NduCj/klOHLdyjzYmVarFV46nWfLuHji7uA2V23gAGjP1s8pwlh7ZHV14QyM/G7mAXp80CpkYIbZN0G/4B6EYljIuAbRXakDCelm8LnnWzULXGY0atJZdOY26fJXAynUVYkhanUEDNlmXhoMzuqpWawMk0Tj4wxMg= X-MS-TrafficTypeDiagnostic: AM6PR03MB3686: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: w1AHG+SVmZCjvMLNBKFHDeodNKZ42oNzZ0L6voifG2kFACz/ONV5GMt8KloYrg75snepn/TOifR83kVR4m7DVcuFpEh0lA7vEIWJshMFmXqPm+bpFnbVs79LhYKVfnsAMvjuyX7GxUNiiYKqWeTSgYU4N+qitNGjzQDtSEQZuxaWl+dGeXHAhB8BNLtMHYERDPwNBdr9mU48lzqQGUxE9v/7JJxBlZu2+ac5DR7O0QKJtrF7wU9kc6WHGXzr3eHVvA35O4Stbz1a+oIKGKlgzKICtT35ZKZhijs1wllcAtBFIsw/blQhSDXRer+5GqbSz1yWqMTfyOLo8InAuVR67/V+l7+lthg82H3vQg64OvnXsKYZemznaJ8ghsmYIXWegv8ASTuEhQ8LeycIXCf3tU81LHJuwk3XdqwrDCBigf3/OJuu4N44HqZhwdiNutRq+xw58p6XiOYRasv3XbB6nPWuABvxB7M0zhBesqJzw+pYyVeRtn8GAlZbFqJdIiK6YjQpCYwfroXb9/mSFAVv8popSkof8egEFq/YZ38uUWhC+LkvaMmckvZjT4Javc+E90CZPTb7xDo6iTSMr9Ft9g== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: q8RLdUSMa0JzRbf2FSyV9l2k2P3TbP0qkRnGdVXJNruhuFVg5gE6ola7/a3MU/Fm+Jf6bsexFQvTKPc2wVgbEGJSbUpNSMmgd/ORPE4PGdrv++8dVUzqSxFn00OTSuJeo6rpw3pCjNAB/fx6WEJIrnR74URXMZAf+Q5rO7voWyzvybFPyhZrcoKrZAAJslwd/GGknxXTWZBI2xebvSqUVFohxZyrebKp6TLFpJeiFXAXnfUADEdeNHsPKsCOjr14WNP10dSPZIxbbHpC3UYjY22+Lixo5bm6rq3ZFQ6th/ItC+wLpLCpqzjn2FGygP7S/E+woSDukovRxLL8G+CHP8av+P4iBZYU2J8ceu4ptS0uDlHW8rxXlG6DTk/TqyB8NQRTrD7sUKhLMmAwPf/EYNBxHGWtKaOYWmudT5VOlIJcfyEu0eB7cOwlHZINFL5idbrckvpQ/9J++J8Eu+AS8YD7J4BdgWAglt0XhkPMkRRRjWwE9YPeSZ+KEdwa0e3MWTk34aMJ9Hjw7NPOKFoqI0zMadj+xYMNPjBOxad6fGsZ8mFDhly8vezes2wnSqi+isoCKBWm4fEzexNY8o9O+8U11Z18Wo0xCL1fLcP87NW42BjgkjsyqjLAa3gCd4Z8H4ps6BSTTq2+h4HqimJxVcL4FH+RRAHVOIrWzAIDp6pBFXEoHbIhfZr5PfogwPJytraVx8qbthj4wD8wYydfjUax/xOkoeLm1cobrMnaPwCoyhlESb0E4WkX3Mr5ssVMQD0FQiJmc/CrHf3oS0HDxbdO2TlvHLG70ec6IWYL55cSl4ppDFE9WByuP2/1rmkhRoj00J3a+pwzNJP61+o7N9c2DXcs651J+D+9zASK8N5jXyXg87s9IudKQoordEY9LRkXYUklP5iLZWgLJ3/fLh//IvmnvJCpHCQnU3ygfjpb0XO8/6NpX9kA8LuUDS2NeuQkKIJvSvEvq/ZDvKVrXg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9f3f8303-5b15-4d6c-0fc1-08d9b8558ab5 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Dec 2021 01:12:59.0207 (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: AM6PR03MB3686 Subject: [FFmpeg-devel] [PATCH 03/10] avformat/aadec: Avoid copying data around 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: p5TSVsEOnb7M Content-Length: 4102 Up until now, the packets have been read in blocks of at most eight bytes at a time; these blocks have then been decrypted and then copied into a buffer on the stack (that was double the size needed...). From there they have been copied to a packet. This commit changes this: The data is read in one go; and the decryption avoids temporary buffers, too, by making use of the fact that src and dst of av_tea_crypt() can coincide. Signed-off-by: Andreas Rheinhardt --- libavformat/aadec.c | 42 +++++++++++++----------------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/libavformat/aadec.c b/libavformat/aadec.c index a3a7664469..7e97120070 100644 --- a/libavformat/aadec.c +++ b/libavformat/aadec.c @@ -32,7 +32,6 @@ #include "libavutil/opt.h" #define AA_MAGIC 1469084982 /* this identifies an audible .aa file */ -#define MAX_CODEC_SECOND_SIZE 3982 #define MAX_TOC_ENTRIES 16 #define MAX_DICTIONARY_ENTRIES 128 #define TEA_BLOCK_SIZE 8 @@ -247,13 +246,9 @@ static int aa_read_header(AVFormatContext *s) static int aa_read_packet(AVFormatContext *s, AVPacket *pkt) { - uint8_t dst[TEA_BLOCK_SIZE]; - uint8_t src[TEA_BLOCK_SIZE]; int i; - int trailing_bytes; int blocks; - uint8_t buf[MAX_CODEC_SECOND_SIZE * 2]; - int written = 0; + uint8_t *buf; int ret; AADemuxContext *c = s->priv_data; uint64_t pos = avio_tell(s->pb); @@ -272,7 +267,6 @@ static int aa_read_packet(AVFormatContext *s, AVPacket *pkt) av_log(s, AV_LOG_DEBUG, "Chapter %d (%" PRId64 " bytes)\n", c->chapter_idx, c->current_chapter_size); c->chapter_idx = c->chapter_idx + 1; avio_skip(s->pb, 4); // data start offset - pos += 8; c->current_codec_second_size = c->codec_second_size; } @@ -281,24 +275,18 @@ static int aa_read_packet(AVFormatContext *s, AVPacket *pkt) c->current_codec_second_size = c->current_chapter_size % c->current_codec_second_size; } + ret = av_get_packet(s->pb, pkt, c->current_codec_second_size); + if (ret != c->current_codec_second_size) + return AVERROR_EOF; + + buf = pkt->data; // decrypt c->current_codec_second_size bytes + // trailing bytes are left unencrypted! blocks = c->current_codec_second_size / TEA_BLOCK_SIZE; for (i = 0; i < blocks; i++) { - ret = avio_read(s->pb, src, TEA_BLOCK_SIZE); - if (ret != TEA_BLOCK_SIZE) - return (ret < 0) ? ret : AVERROR_EOF; av_tea_init(c->tea_ctx, c->file_key, 16); - av_tea_crypt(c->tea_ctx, dst, src, 1, NULL, 1); - memcpy(buf + written, dst, TEA_BLOCK_SIZE); - written = written + TEA_BLOCK_SIZE; - } - trailing_bytes = c->current_codec_second_size % TEA_BLOCK_SIZE; - if (trailing_bytes != 0) { // trailing bytes are left unencrypted! - ret = avio_read(s->pb, src, trailing_bytes); - if (ret != trailing_bytes) - return (ret < 0) ? ret : AVERROR_EOF; - memcpy(buf + written, src, trailing_bytes); - written = written + trailing_bytes; + av_tea_crypt(c->tea_ctx, buf, buf, 1, NULL, 1); + buf += TEA_BLOCK_SIZE; } // update state @@ -306,16 +294,12 @@ static int aa_read_packet(AVFormatContext *s, AVPacket *pkt) if (c->current_chapter_size <= 0) c->current_chapter_size = 0; - if (c->seek_offset > written) + if (c->seek_offset > c->current_codec_second_size) c->seek_offset = 0; // ignore wrong estimate - - ret = av_new_packet(pkt, written - c->seek_offset); - if (ret < 0) - return ret; - memcpy(pkt->data, buf + c->seek_offset, written - c->seek_offset); - pkt->pos = pos; - + pkt->data += c->seek_offset; + pkt->size -= c->seek_offset; c->seek_offset = 0; + return 0; }