From patchwork Sun Jan 30 06:08:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33901 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1761580iov; Sat, 29 Jan 2022 22:09:36 -0800 (PST) X-Google-Smtp-Source: ABdhPJz5VzohTpw0ozr1IHnsl2djq04cka/tAqup/WWau3K80Qx/Qgh6wFMBiyiZBNVdxiyJol7e X-Received: by 2002:a17:907:7e9f:: with SMTP id qb31mr12730479ejc.468.1643522976487; Sat, 29 Jan 2022 22:09:36 -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 j9si5356828ejo.920.2022.01.29.22.09.35; Sat, 29 Jan 2022 22:09:36 -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=IuMR3lpG; 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 2D72868AE64; Sun, 30 Jan 2022 08:09:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-oln040092070058.outbound.protection.outlook.com [40.92.70.58]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D521468AD28 for ; Sun, 30 Jan 2022 08:09:25 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oTCT4RY3y8ZiXSQ8IY0gA7n/LorTSdHvDixs0WvXNgYPhbjB730+XEP3LO5tfB/u0UJLj8dwDZTuk5j1FA/kx3SbbINNtEtEZoAdnFxABdo/FfjYdn/IJL0qiDCV9pPOvwB6OEJ+EejggoL/0/O1wm8D0vtx3+03szqWL82m6fUP2kDwy/6dzJtfbi/tjurXjmM4iIh20HMonQbOOwAAtujsFtlf7O1X2NeVlWlWgc6GqToarTr3yujcXdU29KbrCbjHrSOYSQt9tKSlSs+v09D79X7Kl2/AFg547SF7+QFvjBvk/pWUK9zc4E2+JEKEXQQ+K5Fupb2KVxHlaQsjSQ== 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=oiHuhLnojEMWE8uij5W/D+xipkCqbNbr8/gjls1O1js=; b=brIy+FPHTH9e3YiaTl/SnDeSVJZRXC7wodMHhqkw5GqM+Fo+e0Osm9YY6QVbByJg3i43OzOiitzeGCC/fhTzCmH4wiC4GZ/idnnmyQ0BQNiZ0IYZv2mBDzlWcMnFjj48MmPLavS4zkp1QubHDaKwtq5/GmFKZ1QVfZmUxgk5Gc932UXA97IoaWZp/dyq38KgysZflgjLuvGvmJiyDqdB5r2pNh3ahS+7OH7YFnjBZJYQoEiFwbzL1LzWGkIDBv7ZX8VdoYN8h0P1hEBRIqWu/VaojkC4TSkN1Aa3DGWXx/d2aP0klIO+IS5ZkqMjSTxkLQ99j0gp0awCvyC3/hvTtw== 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=oiHuhLnojEMWE8uij5W/D+xipkCqbNbr8/gjls1O1js=; b=IuMR3lpGe9hQNArE0z5ScMLWrULktMuMmG0FPgPt7tC3E+1Vypfh4GisGNGPBrsU31ZflBzkVO8UhZifFEvFzG9QnNXLBQW7N6PIDtTUH/RLaJCVeYjn3dNB/S5AYzQJDz6iFZGQuOszgmkv6yDup8qVN/wfPRw/yIfGERI0asj9HdMocjyCRVzSirYcsEq7l+1n1OQLVuSbg15a240slnnLVl7a6BAb3YH+RW36q+I9TY7MVJPlwySybJCYffo4nkN2GFlDAQQt48v6FFIot0i/iIj+uIVY0T3iIMqKZlR7mZDbw0AjX7Edy2Z992v/PQQBTKIz6yf2V3ghEIIAKg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM5PR0301MB2561.eurprd03.prod.outlook.com (2603:10a6:203:8::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.21; Sun, 30 Jan 2022 06:09:24 +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:09:24 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:08:30 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 X-TMN: [W1OWcoJgyqhy+ck5faWCWdSlA2uSBMN0] X-ClientProxiedBy: AM6P194CA0006.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::19) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220130060910.936306-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a0dda69a-4dcc-4daf-6c24-08d9e3b71006 X-MS-TrafficTypeDiagnostic: AM5PR0301MB2561:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kexezPAg/SvPIPBeOGvS6nU1CTlAWtxaM8mtyWFfTpUMOUPRYVyd1MFNd+ed/Ygwf8UI4CO1QywRKhmpHSryNlsIwU8XmRiEfqgW6fhSntToQ556I8K7+zw0CgxUNmSuHvthVsph11iszGI1O0SF0BUHTLT32pTjbrQx08tGN+0w74bJ7QimupVanFRHBwSsmROwo54hJuyJfWKkFx7p1iB94u8+MqzeN9mSUxjtigsHnsv1EdFyJpBNrIFp8LA3W0LKLBhJlkUb0RtyowBaKujovmwRxx6ozfSzFhaDYTsdVuNYK1QRNxOsVXAxUH1aHlhZFxyMIcxd39PNbQkEmZL9pWSWTztmtCoy4JzLh7tOL8o/wLEG5smpcSvSumsy+gjwxGNn+ZUw4/FiMOkKH/Lm3AEXwvrUhOa62A1o+f5YJFE2W/bQAI4M2vDFuC7qCyLGS79baNafbRZCRGeleuey+hPnr9GUCs/B9uUpXFpN7m1YOZmIIyKtxv4DXJplZjcGuhS7oArhCIQp5zIQbKDmAl0JA2mUXaG0WkT7Hic3n9CefgE0a2bT33LXBl62 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: DWHacQXrXwsa0MPExEBMu52sRQm1mkkQrlO6u3kWP0l9c3LOvAbAxvtHRzevSeasN1egM6u8yB+3Kc+rj/soQiy9pEQjVdXkyjrFWUl1ZbXrjmPQPoleeld71bhQBSd1GW1DUfZGwykHg0LoOW3fS/EhtISRCEapjwWJ6qYZ2STGBfLK3Ct7/shw246mSBsDV1RfFmm3IXDKmb/oWUIwkhaow+NgyvTPh8OLQ4f35zMWzaeLceUpe8z31gMMfzF6asUSCKIqdnLz1jjtqj8RWo3UgBkVVGAvvbddMiqvzsVper4qUuCSVPedvlZwNzznQ7NSbxOeVGkJxxAPrUjeTDah8YpZd2EZVv+0CzV1cbMcTdqE4P4ljCQT7+cBLDzpb8sN+BqkyinXclbvL/u+5Lq0qqpJIIzodUA5UmkDP6Fh9OUqL3ULtfeFxOqQjUx+AEw0QAOMldw2hPLj5acW/x0BMfN+8Vdvaw9IoyL4zZA3U6zX5tfeUM9qQJd1DotPnstqvL0+A8N0JozRI/B8VZOz1YOTNrFaxjo0q1aAGSPIgegAsu50t/Y0aCWAE7ho6tQODPw4nz0VgyUn5adJrW6I1KK7+KZUbFawIO5P7pTnYemmkmLhS5InY84LJrdq+YADlS6v/q0i3ECkV6YJYPvNHsQuvUn54VBhSpNoKkvqkZkHKBmpppZ7If6FBl7rvw7W06RHnSSAadnbE0H+0XHw5qxaSu3cfW0RTP/yrzvKcnXSw3lfpLj/QWw2wgsEj2YfxkqlNAZqiaEmtQ/Ok1qlGUscYbr/me7Z2+Gh8VfS+AX1yFIDAENw7FHa6LfzXmSL5nEP+Lu2vVVsKM8V8t/nM5K1VD2v87tgtdSZ97n0WLFmMllcosBuL5JzSkWwyd9K1k6fPPr2UWvfyNtE21SmLj+chjIc5GfLPWIEfXDqL1jaL7PyAsPT1CWMIFHdczsDgYTDBdaRS4Q981pSBQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a0dda69a-4dcc-4daf-6c24-08d9e3b71006 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:09:23.8587 (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: AM5PR0301MB2561 Subject: [FFmpeg-devel] [PATCH 01/41] avcodec/mpegvideo_enc: Allow slices only for slice-thread-able codecs 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: J03JyNbAfLPz One can use slices without slice-threading. The results for mpegvideo-encoders are abysmal: AMV, SpeedHQ, H.263, RV10, RV20, MSMPEG4v2, MSMPEG4v3 and WMV1 produce broken files. WMV2 meanwhile expects the MpegEncContext given to ff_wmv2_encode_mb() to be at the beginning of a Wmv2Context (a structure that this encoder shares with the WMV2 decoder), yet this is only true for the main context and not for the slice contexts, leading to segfaults. SpeedHQ additionally triggers an av_assert2, because it is not byte-aligned at a position where it ought to be byte-aligned. Given that no codec not supporting slice threading works this commit disallows using slices unless the encoder supports slice threading. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_enc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 33f2937217..6df2a46eaa 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -599,7 +599,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) } if (avctx->slices > 1 && - (avctx->codec_id == AV_CODEC_ID_FLV1 || avctx->codec_id == AV_CODEC_ID_H261)) { + !(avctx->codec->capabilities & AV_CODEC_CAP_SLICE_THREADS)) { av_log(avctx, AV_LOG_ERROR, "Multiple slices are not supported by this codec\n"); return AVERROR(EINVAL); } From patchwork Sun Jan 30 06:27:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33902 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1769598iov; Sat, 29 Jan 2022 22:28:10 -0800 (PST) X-Google-Smtp-Source: ABdhPJz1XqFUULkNMsOibwE6fBKyeI4SSX7xsteF1hznbAXrc/AXIRHe9poVFqvc3Ucc3nCZuMMB X-Received: by 2002:a17:906:4fce:: with SMTP id i14mr12442153ejw.632.1643524089895; Sat, 29 Jan 2022 22:28:09 -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 ho44si6257024ejc.237.2022.01.29.22.28.09; Sat, 29 Jan 2022 22:28:09 -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=T4z6IKbC; 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 A97AD68B0AD; Sun, 30 Jan 2022 08:28:05 +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-oln040092074054.outbound.protection.outlook.com [40.92.74.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2024268ADE6 for ; Sun, 30 Jan 2022 08:27:59 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AyNXlwYISP/Jd3HEYQkE8y+WihxQftWAaQ1w/W/c0ET/DDA9Wj/KkloZ+hv4jDRQwGOEGWz2xKFUS7lfgcxfLFvskYIrUO/724t3IJLCQjvlc5EAvVKUZ08ZflLzDV9cqzNj7tH/OTOGh5cyBmZi04X2QldEh1Ikz5ppG5O4RJKgbmuITWXQDOU8zn3kzmadFTSSgWVrwzUjdFVrQ6Bw1bEd6/l6B9fqmA8osa7caIkPO9bX/7vGhM8EIGMFO3VfAxusuQmgSZhpTxjsH0vHJUev8OL+BmjzJr3jztgYqUO1DBsDR2S9QfKikaG/i8w0VLF1fxaTGbOYd5Dp//K04w== 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=3uZhbSJ4+m7hYx+yfzkwmftvR/T30c4hZlTtF4EdW68=; b=muPk7FW4TGYlFMp/2X/axGTx89rcgu497etjnEJuFGnAkGhfxpcRRJ9054G437YkbkvwATpmHH5SUZncKpWZ8cz2ubpCaBhmbCfL4JSrWAD9pE3yB0aISQGpLQ8ct38AbHVnAUz6nf+RKW6divexk+QLYdXV9wGwk0E+qsRVjNu6GnOMVkz7TiVI3L4LNlIrFTTJYhisjnNFUQP1+H5I1crGbk9YVuQTEDkhrfu9l+hGx6w/RBro8dXb2AUFAEgBJ2S52qo4bKXcukTvtqP6qwSWz6KCtA3lwK/aNlOm8ThkwBXzBcGHQ4B3E57XVR6cBJdJ2UTQOZ2y6Z2uEOGtdQ== 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=3uZhbSJ4+m7hYx+yfzkwmftvR/T30c4hZlTtF4EdW68=; b=T4z6IKbCK88sAFFaZSTFZtJX5yM17/ujeRmuU8OCVkjtbfU7R9A/JVCPzjvXa3fghYxa0/rlSGoXBKSWheKsXN7iNlex3y0pCdzzoBod5gtiohBChztHe9HbvkwFgHD8lvtPcVtmdDFk7848wE4y952umVmTi79UmH67eliDN0rXM6CAYA3degcK9EDxBZA9hBwwp8+tZoMre8V5zGVR9m1JBgpw9A9bNayiTyHnLtwFlMYTtu0pkvk8W0KtDHvj1LRSQhEmEezACV9MbwppZtzJSCZyhPZTQ8CkSDcjY+DOwMCQ+P/ADxA+dOpnmlced4bYC/KtKLSZ1oCiWTPy1A== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4247.eurprd03.prod.outlook.com (2603:10a6:20b:7::26) 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:27:57 +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:27:57 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:10 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [rJQBrLynDGz5ebpU4e1sSlO+8m3zNcQ0] 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-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6b5f217f-e82e-46f1-492d-08d9e3b9a7b4 X-MS-TrafficTypeDiagnostic: AM6PR03MB4247:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0Fb8+DNEAbvw2WvJ47SS02wAm1iUlE4UX0mrJhabjQ8pdHsuV+I0A8aLUKMfKdDGDgMTl3mJLy7VtrUedWpMXl871q25Jb9LDfPYlIrHcO5SuG7TJsGcRDmBn3jiZaSJXjUVg2WL0LnDcj4yPVrmPAGryhWeF5v/yyZVRTMiy0WQSoLZgwaZisMyeUPJ2h3zk/crb0EGqZKqidXTNaReV/1iiB8lZ2no2Uh6IFyLeSJMVathmFWAvus3/V4RSUXYBXgxWLWreSPmLvFdo0AGykUzKY30YbuDlJJf9px76pGbwsfe/ydfypXDxZYx0ie7t9z5yBz7psk+etbPyH5eWxHcUcKZ68xKehWfaTCuHB/gUCFUmflNUXzCqQP2sdHUNTVckLNQcSZhEwPxZfy40mEKV9FkMB4cDqD2U18kbqOwIcXB64MBFCnhRFQMOz2cGxc+kxs28tamHlh9hYDNSLKz/PLMY9ppkn/y9b5AApj67ZRQnLOmbM3wO0Qji3bsQ+R5sz2prsCN2AdFDTf9E4OfMksJ42SoNg35iX4wNO9QhUr1MAPyBCxrMfkRcWXv X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: DHHGEunCkrIM54h0xeAoi8hsdh9zBTdzALtur6QNbykNxBVVlQan0Z6bOJWIegBOwyIs5RaCeUIBn3CYETXBURRHLKH/Z5H2cLZoRrbTy0dUdBswHxUzHt5kPs0sFom7VnOL0q7Epv/negB+daDHxUmzk30nvcaPS+NreIXtWJzJjvUWEiZW5j9B+nTBgNviOil7VBEQ37kf36OXrIW1DObJaC8wCQxjWbXJou2ye1xj1vEB9nru3+dEDrqfHjNy57zxMwiRhVMXNMFFyCzja+e4Jam5aJNcGTLdGo9ZBNAyEc5ItsEZrRuOnfHC6YuAzgfjRHi8Thw9oCKsRVYsscVZK6Y84IFVZ2KvuBRA6YDU/nwIGn/trz0mC0RylVJUCJdoj8+89fW5k5lWjpGsJb8haN6uAdHxaa8dV0VWBYRpqpHLK6yIMmnzkJULxlS17RYsYbD/Crje42zv2MfUIXYhp44XxTtRPcaw0iiCzszoYX2fiJVYRCdP78mo+T0oHgZH7kHdXAtEpAgW0b4RWqtw6HhgSFKJ/Q8pJEZ3PvFnp5GNMiH9Aent64JNR0wu1t8Iq+N3nQj7c8o0kzosWifqouyu+dXEUbA3/lBo+gI4fb3H4tOu8p2q/D9w401Zj+rzEHJq8TIW61NKSCzC78q4AFyxuNv86W2xCfYQRS55+NhidgLEu/CdsMgJAxTwJamr/6rm+Up+KrgMm27lejOMai+j5lruajDwLOSRO6/ccO1lw4XhEmgZ+iYtpeYHZmvTQNa7q5gr3kf4mnyA5wGsWCIjfJCzF7D1r+Cq2P86gzGZvrKfo0I2yZEArDkKrmrIasTpw7IgqFh3Kv6oikkaExDoun75eYK9VTf8z3t9A88w9i+YRtytOn6QjE3i0ZabD/wRBTk8a3qBzEcyODFPEPqu5bbvzLTsz4mzsHDIxnnp9IKBgv0yBb3sE2qWxAdZo/cSJa7HpgSq/DYLiA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6b5f217f-e82e-46f1-492d-08d9e3b9a7b4 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:27:57.3575 (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: AM6PR03MB4247 Subject: [FFmpeg-devel] [PATCH 02/41] avcodec/mjpegenc: Remove nonsense assert 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: BrwgK37ShQzI Writing optimal huffman tables is incompatible with using slices and hence commit 884506dfe2e29a5b2bd2905ca4f17e277e32acb1 that added writing optimal huffman tables also added an assert that the slice context count is always 1. Yet this was always wrong: a) The MJPEG-encoder has (and had) the AV_CODEC_CAP_SLICE_THREADS capability, so asserting that it always uses one slice context is incorrect. b) This commit did not add any proper checks that ensured that optimal huffman tables are never used together with multiple slices. This only happened with 03eb0515c12637dbd20c2e3ca8503d7b47cf583a. c) This assert is at the wrong place: ff_mjpeg_encode_init() is called before the actual slice_context_count is set. This is the reason why this assert was never triggered. Therefore this commit removes this assert. Signed-off-by: Andreas Rheinhardt --- libavcodec/mjpegenc.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index d15b9ece50..022f171c9e 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -293,8 +293,6 @@ av_cold int ff_mjpeg_encode_init(MpegEncContext *s) s->mjpeg_ctx = m; - av_assert0(s->slice_context_count == 1); - if (s->codec_id == AV_CODEC_ID_AMV || (s->avctx->active_thread_type & FF_THREAD_SLICE)) m->huffman = HUFFMAN_TABLE_DEFAULT; From patchwork Sun Jan 30 06:27:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33903 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1769669iov; Sat, 29 Jan 2022 22:28:20 -0800 (PST) X-Google-Smtp-Source: ABdhPJyW0SquDWV1cGQ6KPmYvoyx/EH/OfzWjiTMi3ivDUwZ8g2Jm/oSxdij63sy8sLQpU2uLmMu X-Received: by 2002:a17:907:6d02:: with SMTP id sa2mr13040746ejc.198.1643524099909; Sat, 29 Jan 2022 22:28:19 -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 t22si5578929edw.18.2022.01.29.22.28.19; Sat, 29 Jan 2022 22:28:19 -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=FAmIenwp; 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 A5F4D68B0D1; Sun, 30 Jan 2022 08:28:12 +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-oln040092074062.outbound.protection.outlook.com [40.92.74.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6303D68B0BC for ; Sun, 30 Jan 2022 08:28:06 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VEk/OiV+EiExnnq9DjTb1VrMYo4uOV6oImvmB31NNAY5ry6udlmAy3ncp6BwueHqI+uXcGEIz7HXCuIQ7zods1vDpkCi1JCzHJiq9SDlwhJaMw6EIUJbn5JDu9wbNAnCXHSmTs7jQzv/hgstos4NiH60CcMN7E+YF++Krz2a+E4JmR33iS8DrJRsFVQYoo/cvQuA1SpU9a0pGSjp4Nol99W8FYRTuNKkC/M2qfk2Vyuq2+G42/W9WKxQI327Xk3BwPqTuCdC4L/Tv2yg/bR9Jqb9Ue+kmZ9M9KmVixcMNuda5bJU7rptsAAZErSK2bHK3tHjWH9V9RGrrH+DULQ/Aw== 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=AcNBbug0fMoALEg3Hu1S56ahHm3gqkJ2iyuuwT/YgUY=; b=oP0WEMKdZbLsoJ2+tAHknu+Kww2bRVuajfwcf8Z/DNG9Ea+4Gm/N1i+HpX3TFggR/R+uZiTnjrHRr6utGiG8Srr5MccLack6C9lfap/7aMTFsXSAmZOskvRp+FwXP6ijjHKxiqiWjDutiwieIWrM8IZTTLtr5gTIKvIMKhjpZNkg36LN6V3mnUvd0l7v7I3WtTi9SibLGPiSG2rW6NvpHA6ze2BdSttkIgYmBj8hQGsXVXBOmipX1VfhyE8JDwF4KLOneg0j9JgpTUnWimX4ZjE3eFJuvjTx7Udj7t60jnRThyf1w2LfQyESNtJEOVq4FU+VUstb2ARYy4tXIxm94w== 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=AcNBbug0fMoALEg3Hu1S56ahHm3gqkJ2iyuuwT/YgUY=; b=FAmIenwp4BWxNn3MmEafvi2Ly6oAyPZ2NycNvGNXs5JcCX8a8eKaDoLuwDs9n7FS4iYnaCzr7LDHXcFdXsfrqnYeLttZWyZ/WZYWsnGQefk4hTqcSrBO1gq8I/LhRG8NBKntW6iF7GdbfXr6iD+bJqMUOSnVhZawpAxVPt1HKllJo3NWVdhnSFCX3tUVkPjyPnS3wzvckn8OZStR8TA9JdcqXNkXo8a2voxsGkWNu6YtKQmMF6mQQvbD2J9OqwEk6nOC2b6zXolIB8w2Gw9OYE4SJAtJ03U+5eN7T+SNL2Yz7IOdi+UJSi6zhQlauiGdXN56aR+DpxTqEdg+y1RTFg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4247.eurprd03.prod.outlook.com (2603:10a6:20b:7::26) 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:28:05 +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:28:05 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:11 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [gBfy0wJudehP0apSte/K0+s09hE84lgC] 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-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 906093dc-3fa9-4c35-a7bf-08d9e3b9ac5a X-MS-TrafficTypeDiagnostic: AM6PR03MB4247:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JSNe/qsCIaW2gtkRIG5spT9HsaGbZs15+yxycJUgKbqhnJf5uCuAgV/Xuo3prbmWNKjc1Cm1E6mX+LARRD6XlBfWqYjpFQeF2VePJ/bzDPLlN2pl31Er8Brpt4n5TsaEsRbioFBGsmYIB1scaJMrOnNcPb0CyA/Nfk/AZVKYcIGzSlpY0uS3yHizr7TjAllTBKXy2M8SCNRA60FHRKWerXdnpbCyUy6mtW8DEBxLwBjOzvvUx2vux+J+FHvYGq84zesKjxmyRGdPlaAtsfebxmDXaxK/zfRjc3CNIu/L2yl6fbV6t7Y31fy2fseqISIc/ippHjbTOEQHUSYs58QpRH8UP3y2Fyz/1hcgSqhCx8ohgptExQWuLQ2np1vlfI0EDgLdfEJUrzBvrRBlRiRDlecvLinA6NK8JNB9LAXuEvhQ0IhioQ3oDq78l9V5KMDJk8otIEOxBOsnphT9KI7KifduoTzYpO++jgaSJuBZPZ6XaLHjaZXkV25idGQzE0kHWybUySCe9P7hmtCNpcqbsg2hY/ibHwQjtCT5Y+O7/RMtX0ASW+EEp9e9/VHfXTKM X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: T3NybAvCwHSb/z6ijgZ3JSk7AttU33eUuDXI6ualTHMnpbrsQ5cSImFZ4t9hpNqriE9d1ZIrwKcWcu9guwtScgnByJ9BSQJ3M7IUI+DV+1WiwGwjSEfhKl+xKdl82ndFbJF+4ARdo1XFOBkuvXPt8zK7ggo2Q/Pfr+XiNvk7Qc6KNWf6AeUrerWM87l+WnYZjoo355xF8oqd05yzMmJNNSMX0irb1QFuScoMppjRYZFtyIYu8F43I5CT5eopOjUqVLk7vwF1rf+dcmjCjZN6VuRH2lX7Kn3MjcYLyNifKYs0S5dYKk/DjL8k4QLuNdt7diM16OY9F+MHFMktPTlL5k94uceM62z/6uSgCifPVLIVkx0FG41aOyAE5vPDsykrGHAKLqeuwJ8c8GfGbqJYwCi3VxMssf4Myb27Hc0A67dwnGhFsEL3QBXYxOAY4kNvQIPTbK2Ruoyx/5YuAECNvgMLKKs2n6S6MQy9hNpvcka2LGurAV8FzPwuyRqkcGCse+2DfLYPJWCupX7bs3kbhEiZCnjzI+oz/VNRbQ046dLz9cT2kkUcovg5Hj//X/COq7pF9l6zmH6E8FCfnzuDUsi4c5oqVcOLUMuZ01i4EC4zYHyqHrgO1pdLaiiHdjO0aXrmpiVFhiO23Je5Z54W32D42gLvUt12t11iJiGXq9xySu1jREe+eudIffxJd7uCXu1tdFkks+kIlde5liytruWMMS4jUeOi3CXyG08ZnFHLp+vE7UafQjxYpatty/xrEdK3zXzWcWrL+3M6Gd20nliO2+uVyYpiXlKqGfwztF8Sr1OKoULSirepDpAI+Vbg93LSA6N0X1VPY4A8VPLPaTSZnGw4mqsYzBG8O5PBF8MQvoWwWJJXZJMHsPMSPQGUZx75ABcrBWEA/x+qZnjpzDJK0RssCdjFySokiydvFoyLkFM+Vycm0x2PU/5di12xxYE71r5di47bInKj5CbB2w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 906093dc-3fa9-4c35-a7bf-08d9e3b9ac5a 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:28:05.1756 (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: AM6PR03MB4247 Subject: [FFmpeg-devel] [PATCH 03/41] avcodec/mjpegenc: Fix files with slices > 1, but threads == 1 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: Ue54ZWt5uLzx In the aforementioned case mpegvideo_enc.c calls ff_mjpeg_encode_stuffing() at the end of every line which pads the output to byte-alignment and escapes it; yet it does not write the restart-markers (and also not the DRI marker when writing the header) and so the output files are broken. Fix this by writing these markers depending upon the number of slices and not the number of threads in use; this also makes the output of the encoder reproducible given a slice count and is therefore important if encoder tests that actually use -threads auto are added in the future. Signed-off-by: Andreas Rheinhardt --- libavcodec/ljpegenc.c | 2 +- libavcodec/mjpegenc.c | 12 ++++++++---- libavcodec/mjpegenc_common.c | 10 ++++++---- libavcodec/mjpegenc_common.h | 3 ++- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/libavcodec/ljpegenc.c b/libavcodec/ljpegenc.c index e15f448f90..7c53da7bc3 100644 --- a/libavcodec/ljpegenc.c +++ b/libavcodec/ljpegenc.c @@ -239,7 +239,7 @@ static int ljpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, init_put_bits(&pb, pkt->data, pkt->size); ff_mjpeg_encode_picture_header(avctx, &pb, NULL, &s->scantable, - s->pred, s->matrix, s->matrix); + s->pred, s->matrix, s->matrix, 0); header_bits = put_bits_count(&pb); diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 022f171c9e..6a47503ab4 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -78,7 +78,8 @@ static void mjpeg_encode_picture_header(MpegEncContext *s) { ff_mjpeg_encode_picture_header(s->avctx, &s->pb, s->mjpeg_ctx, &s->intra_scantable, 0, - s->intra_matrix, s->chroma_intra_matrix); + s->intra_matrix, s->chroma_intra_matrix, + s->slice_context_count > 1); s->esc_pos = put_bytes_count(&s->pb, 0); for (int i = 1; i < s->slice_context_count; i++) @@ -247,7 +248,7 @@ int ff_mjpeg_encode_stuffing(MpegEncContext *s) ff_mjpeg_escape_FF(pbc, s->esc_pos); - if ((s->avctx->active_thread_type & FF_THREAD_SLICE) && mb_y < s->mb_height - 1) + if (s->slice_context_count > 1 && mb_y < s->mb_height - 1) put_marker(pbc, RST0 + (mb_y&7)); s->esc_pos = put_bytes_count(pbc, 0); @@ -289,11 +290,14 @@ static int alloc_huffman(MpegEncContext *s) av_cold int ff_mjpeg_encode_init(MpegEncContext *s) { MJpegContext *const m = &((MJPEGEncContext*)s)->mjpeg; - int ret; + int ret, use_slices; s->mjpeg_ctx = m; + use_slices = s->avctx->slices > 0 ? s->avctx->slices > 1 : + (s->avctx->active_thread_type & FF_THREAD_SLICE) && + s->avctx->thread_count > 1; - if (s->codec_id == AV_CODEC_ID_AMV || (s->avctx->active_thread_type & FF_THREAD_SLICE)) + if (s->codec_id == AV_CODEC_ID_AMV || use_slices) m->huffman = HUFFMAN_TABLE_DEFAULT; if (s->mpv_flags & FF_MPV_FLAG_QP_RD) { diff --git a/libavcodec/mjpegenc_common.c b/libavcodec/mjpegenc_common.c index 995e2b7670..86b6568902 100644 --- a/libavcodec/mjpegenc_common.c +++ b/libavcodec/mjpegenc_common.c @@ -60,7 +60,7 @@ static void jpeg_table_header(AVCodecContext *avctx, PutBitContext *p, ScanTable *intra_scantable, uint16_t luma_intra_matrix[64], uint16_t chroma_intra_matrix[64], - int hsample[3]) + int hsample[3], int use_slices) { int i, j, size; uint8_t *ptr; @@ -91,7 +91,7 @@ static void jpeg_table_header(AVCodecContext *avctx, PutBitContext *p, } } - if(avctx->active_thread_type & FF_THREAD_SLICE){ + if (use_slices) { put_marker(p, DRI); put_bits(p, 16, 4); put_bits(p, 16, (avctx->width-1)/(8*hsample[0]) + 1); @@ -216,7 +216,8 @@ void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, MJpegContext *m, ScanTable *intra_scantable, int pred, uint16_t luma_intra_matrix[64], - uint16_t chroma_intra_matrix[64]) + uint16_t chroma_intra_matrix[64], + int use_slices) { const int lossless = !m; int hsample[4], vsample[4]; @@ -236,7 +237,8 @@ void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, jpeg_put_comments(avctx, pb); jpeg_table_header(avctx, pb, m, intra_scantable, - luma_intra_matrix, chroma_intra_matrix, hsample); + luma_intra_matrix, chroma_intra_matrix, hsample, + use_slices); switch (avctx->codec_id) { case AV_CODEC_ID_MJPEG: put_marker(pb, SOF0 ); break; diff --git a/libavcodec/mjpegenc_common.h b/libavcodec/mjpegenc_common.h index ac753bf153..ba7c4f93fa 100644 --- a/libavcodec/mjpegenc_common.h +++ b/libavcodec/mjpegenc_common.h @@ -33,7 +33,8 @@ void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, struct MJpegContext *m, ScanTable *intra_scantable, int pred, uint16_t luma_intra_matrix[64], - uint16_t chroma_intra_matrix[64]); + uint16_t chroma_intra_matrix[64], + int use_slices); void ff_mjpeg_encode_picture_trailer(PutBitContext *pb, int header_bits); void ff_mjpeg_escape_FF(PutBitContext *pb, int start); void ff_mjpeg_build_huffman_codes(uint8_t *huff_size, uint16_t *huff_code, From patchwork Sun Jan 30 06:27:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33904 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1769731iov; Sat, 29 Jan 2022 22:28:31 -0800 (PST) X-Google-Smtp-Source: ABdhPJzpAe9xfUGz/rQepLOyj/uLAIFg3ZrpPWOXNIJFa3LAChcn4158eEHbIg6ANMq1ru3cfnfL X-Received: by 2002:a05:6402:718:: with SMTP id w24mr15587804edx.35.1643524111371; Sat, 29 Jan 2022 22:28:31 -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 2si5975979ejl.123.2022.01.29.22.28.31; Sat, 29 Jan 2022 22:28:31 -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=gK0jx4t5; 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 B154D68B0E6; Sun, 30 Jan 2022 08:28:18 +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-oln040092074062.outbound.protection.outlook.com [40.92.74.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 872C368B04C for ; Sun, 30 Jan 2022 08:28:11 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QbKCRWkETqlmGn6Kpj7joW9ad9+C8LBTxrCflPDfEJV6/nDC5+IfmXSfxaXP02hzrDwKfI9OEqY4o5spiiwqLZKQD4mMIcFDWvtidUKY0qMJ5loOBSVvBIYnCgZ4DQxC+ejqIXt4Jv0C9NnX8qgx5CLHjGY6gj6gbmDqJXn/eSyn07uyqt+t8ZWzFye8Hvx3E7xygbYUkSvuDyOqxtrgpwpK5dA6JlJWLZPlTz9Wvz68gQeKP4JxyOycXXjVbqFoAA5AtKwNc1RzNvxmHPljYaLjysRn9cs4zovSA6++mPm2LPG9fEKOv9hdMHJtG+eLhnWQyscCA9r1hN3Cs0jmwQ== 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=O4NyTRryiZm93aKcWEND1jsZaHCvzMdraiJ6cP/aATo=; b=md7jZjmHX6uqfu7axrI3k6dh/pLr+fI+wKptyylBhOJZdcsKGoy5X9nRdBlN25/7A3RwQJ8ht7qeMI5ATWzUl13S6ZiU0BZn9QXD2ug/YAJWOLyyoc+TUYyfMSKPOvzv2jbLODh/D4T3FLHF52AHrov/0BbvHVjCQnycj8HUc9O1JXV54fezlY3dN6sLUExe0HZoe9udvIL59CUroCwb4fizB4Nz1IkJ79PgKikgJHOFk0JmbwhltuxZYN1vliXE0u6VgKWXj9On1bp8bQL6l9w1eQEeVueM++zyj4GCZUms01gzFpxD/PEeWG0ALQVQ8v/Ar4WIRWZ4f/EFMmHf8Q== 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=O4NyTRryiZm93aKcWEND1jsZaHCvzMdraiJ6cP/aATo=; b=gK0jx4t5kHBHh+z0bAW96IgZMQcgIC8M2k7YT3awODu/gnyQpBdOfzFuPv+5q1W49/jZbXNgmo5wHUgFgEzARDWDd1IBKkA5Q4hecnwWwOu3S5M1JnNysIYILDFIpRNwzR5hl0Df8iNipSteCH0XwiDn73plTY+w8xE2y/zfgkPLuUVkKKmVbHXnDTjzW68w4MItLuzaPR2LJoQ/WORMHjTeZRQpPAjqGaa48v+USW+JqHQaxjM6z16jw5JeLy3Gz6G4WeRlF7p30ib8psAAYceo8+HfqO9pc3NP/h2hnS8MNI/hLmhhMsa3b7NXkkTlCyCULU5xIia/QF181T4ZMA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4247.eurprd03.prod.outlook.com (2603:10a6:20b:7::26) 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:28:07 +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:28:07 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:12 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [c0/Hd7rL5SXABp+qq6Akkk0nYMP0g+dC] 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-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 83915fcf-e21b-4907-96a4-08d9e3b9adc7 X-MS-TrafficTypeDiagnostic: AM6PR03MB4247:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pNMnC1Wr4t88yAO6HZ2hoIcdm6xiCWtPqKP0J3tAHnhHqOlWZrvTowzdHAUsSPRTtWcQC+AD2vVPMDuLXacrIw6mz/rry+HXy7q2paDNocQbdQYTCTyVOx5fek/iZcBjpbbR2gUlBmNooI1jmVyXIA9DhxEJFljCxXoOySvbL9esrrIqZGNEcxQXXm8rsC1V9zTsjKUzVxEpaOkGgbZbQYeMvU4cHjYHb75+irk9aa1AlbBjUfNDFN/EE9CEqszAYv9IeLr3Db3MXUj/YTgCIdYg/8GNCfJyIz12PraWRc2mf3HbDJSwwTaidYi/LxgkKg4rZqGhyHOISLGvS+jFt3EwRfoW9t9xKRTBGCtAxJ21dx5QdF4sfwEjzhT7ZS7c/zQhlWh0RzqmRLIXkXYOJAHrb4jcgl406hXJrDGT6guozKkUh6GE48+jK4lu1VgXcSb2Oxs+8cA6+WK0K9RW1Puv94+wSqsNQbiJbv27yr6xdPG/j9p4OEJvNskWvnzpZoZvs+etCCrsnAIz3ido4vFKjZN9PaSy+Mc+SgVYNATJLvmefJOxxrI5b1k1ZdLg X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: sxLgn2CxEmgKNjaU3S2uphdziE2pufY7VLvRTKSOGFTsVUDwgbatj4y2CNFOd+srL+0iEB8fzjAlmHet16XQL9IQht6prJj5PYgJ5V6qT+MGPxbGI7m9V6f7y+m1kz1zQ3XDdmsJhMRHtvjeokKlIYfS3KnfDC8mbu6rP8lSG1nMDlA5gJtfnnDfrmXxSv7tCeZ4HeEI6ydSbjQvveq2K2am+RIceZDPB1GEZIuAO75XvPgOGvBfQHdCcc1lxDAhERMGtdxYN81HaPyb1asIUzTcBSZKOifHIkWA9uRfQRg1783g5GdrdU4xbkx1DWcusmsxicHrCP8XnqcrfkrQzBJl/0YbZO9G2I/4Ckaa16Arz5ZFpCZ/rAMz9MDmUQPVconfTNPF8+jC0HGc6V8qLtm0c/CgAG38A6Ugr5PxgAZOF5DKV1pQz8z6KH/sQ3Bk1+KCc9Lzy24kzutUvXAi/6aH4gJ/Zp9zXlm1DG5M2mRrNhPPbzTeWPbQA89vSRHgIIBaKYkpyqjLSVd31vcd1UCbVOiPfuqU3dkm3bMjLwoE8AZH54OxfAHDejyJqEpbLEBJMrTfgdxn+emdmae+UYEAXcnHXnKbyenG9CfIRluDJnF/hfKiRxMJFWg33krK/ZecgOoFc7/pqv+2CRAmOVTUcBWjd1uFmwWc7hmeZyy8ECBNElePs4DsvaB4uvro0I8O1RP7L0qWN6FMGezBgeysLCS1UAoj2zlO4BicbwtjufilmrDTjnKqj34BqPXdnxj5P5AWGi4NZle5vGEc/4PnofvQUh3m1O9zUK4YBFx1P6+J1aKFnkIjUVH3cfxnrQ9et+P9G3XZiT/Xp0XXbDW7O7lzQ1I/mU/9ArWOFYgr3IrDyP2yEzaClhvkVk2jOpBjf8+7Y3Xk2+BHM/Xosnqs84wV1Li7jgiaIlFodaQ4m7+9VpW7EfSfOvGpIBup5hX2aWsbBTQo6zUGpS/cNw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 83915fcf-e21b-4907-96a4-08d9e3b9adc7 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:28:07.4410 (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: AM6PR03MB4247 Subject: [FFmpeg-devel] [PATCH 04/41] avcodec/mpegvideo: Enable private contexts 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: 9+wx00rcwnEd MpegEncContext is used by many different codecs and every one of these uses just a subset of its fields. If one tries to separate this and e.g. add a real MpegContext and extension structures (say MpegDecContext and MpegEncContext), one runs into two difficulties: a) Some code is shared between decoder and encoder of the same format and they therefore use the same contexts, either MpegEncContext itself or identical extensions thereof. The latter is the case for H.261 as well as WMV2. b) In case of slice threading, the generic code can only allocate and initialize the structure it knows about; right now this is an MpegEncContext. If the codec has an even more extensive structure, it is only available for the main thread's MpegEncContext. Fixing this would involve making ff_mpv_common_init() aware of the size the size of slice context to allocate and would be part of separating the main thread's context from the slice contexts in general. This commit only intends to tackle the first issue by adding a pointer to MpegEncContext that codecs can set to a common context so that the aforementioned codecs can use this context (together with the MpegEncContext) in their common code. This will allow to move fields only used by the main thread to more specialized contexts. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 3 +++ libavcodec/mpegvideo_dec.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 84d79d2e59..5e406b9a9c 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -84,6 +84,9 @@ typedef struct MpegEncContext { * offsets used in ASM. */ struct AVCodecContext *avctx; + /* The following pointer is intended for codecs sharing code + * between decoder and encoder and in need of a common context to do so. */ + void *private_ctx; /* the following parameters must be initialized before encoding */ int width, height;///< picture size. must be a multiple of 16 int gop_size; diff --git a/libavcodec/mpegvideo_dec.c b/libavcodec/mpegvideo_dec.c index 1e238bd1e1..dc38f6b267 100644 --- a/libavcodec/mpegvideo_dec.c +++ b/libavcodec/mpegvideo_dec.c @@ -62,10 +62,12 @@ int ff_mpeg_update_thread_context(AVCodecContext *dst, // FIXME can parameters change on I-frames? // in that case dst may need a reinit if (!s->context_initialized) { + void *private_ctx = s->private_ctx; int err; memcpy(s, s1, sizeof(*s)); s->avctx = dst; + s->private_ctx = private_ctx; s->bitstream_buffer = NULL; s->bitstream_buffer_size = s->allocated_bitstream_buffer_size = 0; From patchwork Sun Jan 30 06:27:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33908 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1769813iov; Sat, 29 Jan 2022 22:28:44 -0800 (PST) X-Google-Smtp-Source: ABdhPJxytH1CM8eYF26EzjsaDaQWvwtGYZz7UqDfeS5mOtAIA08/fozDxDvW7YJbArPurl4gr7oS X-Received: by 2002:a05:6402:2683:: with SMTP id w3mr15701849edd.405.1643524124617; Sat, 29 Jan 2022 22:28:44 -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 nb8si7162002ejc.464.2022.01.29.22.28.44; Sat, 29 Jan 2022 22:28:44 -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="PX/1cfxT"; 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 AE25668B12D; Sun, 30 Jan 2022 08:28:23 +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-oln040092074062.outbound.protection.outlook.com [40.92.74.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A9EC368B0D6 for ; Sun, 30 Jan 2022 08:28:16 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NbeJMQhcEpigH1rlMJ5szGRM9G8SO5qr1ZKWxk1bFboH7Sti8CKy6FwuM0mXPMASGZHvJUkXmbM5NKRmnuwpIjWl/jOLnwq+OatAaWd+I6F44KvytRA7+vRyf/gmXw2PUtr+vF7mhy9V4vLPCPv5NZXBDaqU0w1654WBmwsbDOT+HWy07jcAFEbMIRovGzqCruvP7tEVZTa3RAvForW/jH5ALAr7WId74kgfFB6E/we5DsQvnUjr1VHfrZ4+BHRlzUZxQ45WLNVrsSbq4ovPRFaGUsx24YSiwSa5w+puiJx62fHQQsBk4j+gFPOx8sEwb6Jm0MgdvN2lT0WBntscMg== 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=e5RcdzWXrLSzX913ql4rGxTnzdBVcWgeF8FZ5CLLymw=; b=a8VZSz667e9RwwtHU5wgodD9HFzEEXxpON/5wCtOgHwCzX4GTSalPpVi0oUshDAm/cCyWwEpAwOgOZ3atzMGgiFnjv8Z6swhja6FxAeM1p3fJCiMIkZKN7+YstIMveH/F0EYaN/b/Ia6qiGlTPPMyCEqrq9hJy9Yx7ZmUDQwj9Fsm3f6YFdSRSHgPw2SOfv79AvmLlKNE76NdmMYP3KY4Kp+kmb8iDP+7BLL89Dd3ZiBCepMrPKrG5i35bdIuBQq+lJIHuMtRhXkjK0e7H6kLQI9VOC3tL2dqbpIWX58wyNQruLF/Fg2L5UMTkWApXHjPlxPWtsTleDGFbhX+9sbUw== 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=e5RcdzWXrLSzX913ql4rGxTnzdBVcWgeF8FZ5CLLymw=; b=PX/1cfxTZgLEBI/KXs8mU0+OyT9UuH6UFwiUc7AjQ/FBOaLMzoppL3jz7nuw1oH0NQAWJcwScsQjXBzHTQU+O4TPAuXQnm9amXd/9+87sXMBiq4yY86I5izyFOCx7jFUNw0VfjIcyDe8s21lWpZ+w5Ubl1vf82CMky1QULotEDlWs0YlCDtpcVWqOYE4Bs44M6qmEEwVlqyPzZLeWICazyTb+ek740EU12mkVKLiDDNk/5NU0iCiVz5WfLK/CtkEOPKgO1xQVfX0kzBKB1jTIrjhzQfqRCmA9St6AbPVUSbpQDggBHibL+HuKXj2lcjWy5vhgfMUR9ZUKxt/4NcWtQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4247.eurprd03.prod.outlook.com (2603:10a6:20b:7::26) 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:28:09 +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:28:09 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:13 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [FsKEacg8d9iJnN2lSYLFQVOrYCzGbOVU] 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-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 046a3b32-6693-421b-5d3f-08d9e3b9af0e X-MS-TrafficTypeDiagnostic: AM6PR03MB4247:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +HIQjmMj1+V1UKBzVGatkiN8QDzfqxQTsGzFD7se2Ams1JhJUmnEws3MJis4QgUMrLO1rgsWwZBujTVu83VJF4ghqd5Pb3sCDFaBDtU0J6oXZ5BBsXmbDgZ6b5b2/+DGdTNoP8m9MlBycdepc/5jYp4BQ05sGmFSEA+V3HlnRqL6sFkL9o6R2W5y1TQNndr2pmBLHUo4GGFbvo4tKJP0Vf6eaNA+czGj3vYbolPy59TMCdON6U+a187fhu0q8tplJ1d1HoYrgQ1PcNdPhzN2MbkglZiH2ZIqNaTjk7zLAXutchdc76znbupRTxFOIwUuvB29+B7/c8hwdfyL1u9jpHMXeuEvPOsQxAvwiXJkmaLzGZMra/woD/PKlkCk03W2vCG1HmVWALJzF+kPFc3oTg2AasrcxmiDJYk618dHaakMuFZmr51OQTuud+L0FKoIRI9MiV73hbbceKsrYHShOLMSEGDSF2ytN1wFel5B8MP736a9h7HMamhsxg4gHjapIlA+hQZG/toPKC5jSgE/2iFpPknmN07pjyjpyHB3Jtwac2kTDL+W6nj34rv+9ECs X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: N5c/z3fQ/WWAdiPGu9mWHbpGXfv187FQM+/cVF87as63s8YzGnxe1ej02ouk3ahZUVkqsreTQipoN3YJ22snD5o2/J8/z42I1ihsEldioSGVxIwYddFne7P7/9LJvIj9I1uEji3xUXjO+HZ7Ijcs2qSsnSKW3bTzz5Yhnytny7Z8Jm/W7VWwl1pnZJw98cznqiKf2B7m85/xNMcf/hgLB1+7SLyys9Ii0ORZqd/4/zYdnVgKL1zVfvyrLvm3kjaCBGby8MOgX2cNDCpXwHEn9+VXn2NHpfAww1cS1xvf3mn7c3WUoGICWdBdfjs6BNqu52QQv+N7TgatCpIULBfJwWmPJbACbOWVkbk1TigUNoXjYda26M8Mx3mBVEYHVFimtkhTE0w6paQTT8/eKSpcsE7QXUqwq+5BgVWj8urNXcgD+kW+G0rNBArMXNDp2XZ/95JxpzOAHLAYgVaaHFC+DiKdBRBmxaw8FnoTYusPg/XSYyE+U28qpY6tinJ8ygqwYF/3qJOKLXia70FhdG1inaEqPymvjKBK6YLL/6O/jx2aIzZifXvnDXrYcO4UtVrG2KrQLb/36K3LE6nYnD0WtaC+BIHbVnCexuDCIps/gnEgwXbqnMgrr70xCEcsjEDtwqvQNZEmMonbxMGQdiASYVDYg9UqLMr5UZH5wrQXWh+GbYR1qedAhUG8GOBBPFPgtE3eLoNvsKgi5VMGWtG7wMUPGnELKFnQyjqRIy9Q3PGgP/1HlPEPcPdaTNwrq84TbS3Y18nkTr+ppko8WTHGQ7HmBH05iwTudtIndamwL1sAudzU+aKfB8GpDsPkofSpXqdOgGvjgKigeCLoRXhwcopmTuo6Zms05OLxlLOB2TuCepUENfhbL8ZApOi4ImOvRcbPsZlxgUiKQVdqQDnlFkG6KKB3qf4gLN+lOWkI6V68wtoQVxCaZ+6+KS94OAxhS7TEVObob9Osipfvgbyf4w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 046a3b32-6693-421b-5d3f-08d9e3b9af0e 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:28:09.6450 (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: AM6PR03MB4247 Subject: [FFmpeg-devel] [PATCH 05/41] avcodec/h261: Separate decode and encode contexts 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: FzAtLNK6qfbm Signed-off-by: Andreas Rheinhardt --- libavcodec/h261.c | 2 +- libavcodec/h261.h | 8 ------ libavcodec/h261dec.c | 59 +++++++++++++++++++++++++++----------------- libavcodec/h261enc.c | 54 +++++++++++++++++++++++++--------------- 4 files changed, 72 insertions(+), 51 deletions(-) diff --git a/libavcodec/h261.c b/libavcodec/h261.c index 1290c040cd..7dfaee7dc4 100644 --- a/libavcodec/h261.c +++ b/libavcodec/h261.c @@ -60,7 +60,7 @@ static void h261_loop_filter(uint8_t *src, int stride) void ff_h261_loop_filter(MpegEncContext *s) { - H261Context *h = (H261Context *)s; + H261Context *const h = s->private_ctx; const int linesize = s->linesize; const int uvlinesize = s->uvlinesize; uint8_t *dest_y = s->dest[0]; diff --git a/libavcodec/h261.h b/libavcodec/h261.h index 25728a295d..ff1903e508 100644 --- a/libavcodec/h261.h +++ b/libavcodec/h261.h @@ -35,15 +35,7 @@ * H261Context */ typedef struct H261Context { - MpegEncContext s; - - int current_mba; - int mba_diff; int mtype; - int current_mv_x; - int current_mv_y; - int gob_number; - int gob_start_code_skipped; // 1 if gob start code is already read before gob header is read } H261Context; #define MB_TYPE_H261_FIL 0x800000 diff --git a/libavcodec/h261dec.c b/libavcodec/h261dec.c index 2fd8d94df1..17f1067b15 100644 --- a/libavcodec/h261dec.c +++ b/libavcodec/h261dec.c @@ -47,6 +47,19 @@ static VLC h261_mtype_vlc; static VLC h261_mv_vlc; static VLC h261_cbp_vlc; +typedef struct H261DecContext { + MpegEncContext s; + + H261Context common; + + int current_mba; + int mba_diff; + int current_mv_x; + int current_mv_y; + int gob_number; + int gob_start_code_skipped; // 1 if gob start code is already read before gob header is read +} H261DecContext; + static av_cold void h261_decode_init_static(void) { INIT_VLC_STATIC(&h261_mba_vlc, H261_MBA_VLC_BITS, 35, @@ -67,9 +80,10 @@ static av_cold void h261_decode_init_static(void) static av_cold int h261_decode_init(AVCodecContext *avctx) { static AVOnce init_static_once = AV_ONCE_INIT; - H261Context *h = avctx->priv_data; + H261DecContext *const h = avctx->priv_data; MpegEncContext *const s = &h->s; + s->private_ctx = &h->common; // set defaults ff_mpv_decode_init(s, avctx); @@ -89,7 +103,7 @@ static av_cold int h261_decode_init(AVCodecContext *avctx) * Decode the group of blocks header or slice header. * @return <0 if an error occurred */ -static int h261_decode_gob_header(H261Context *h) +static int h261_decode_gob_header(H261DecContext *h) { unsigned int val; MpegEncContext *const s = &h->s; @@ -143,7 +157,7 @@ static int h261_decode_gob_header(H261Context *h) * Decode the group of blocks / video packet header. * @return <0 if no resync found */ -static int h261_resync(H261Context *h) +static int h261_resync(H261DecContext *h) { MpegEncContext *const s = &h->s; int left, ret; @@ -184,7 +198,7 @@ static int h261_resync(H261Context *h) * Decode skipped macroblocks. * @return 0 */ -static int h261_decode_mb_skipped(H261Context *h, int mba1, int mba2) +static int h261_decode_mb_skipped(H261DecContext *h, int mba1, int mba2) { MpegEncContext *const s = &h->s; int i; @@ -209,7 +223,7 @@ static int h261_decode_mb_skipped(H261Context *h, int mba1, int mba2) s->mv[0][0][0] = 0; s->mv[0][0][1] = 0; s->mb_skipped = 1; - h->mtype &= ~MB_TYPE_H261_FIL; + h->common.mtype &= ~MB_TYPE_H261_FIL; if (s->current_picture.motion_val[0]) { int b_stride = 2*s->mb_width + 1; @@ -254,7 +268,7 @@ static int decode_mv_component(GetBitContext *gb, int v) * Decode a macroblock. * @return <0 if an error occurred */ -static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded) +static int h261_decode_block(H261DecContext *h, int16_t *block, int n, int coded) { MpegEncContext *const s = &h->s; int level, i, j, run; @@ -346,9 +360,10 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded) return 0; } -static int h261_decode_mb(H261Context *h) +static int h261_decode_mb(H261DecContext *h) { MpegEncContext *const s = &h->s; + H261Context *const com = &h->common; int i, cbp, xy; cbp = 63; @@ -386,23 +401,23 @@ static int h261_decode_mb(H261Context *h) ff_update_block_index(s); // Read mtype - h->mtype = get_vlc2(&s->gb, h261_mtype_vlc.table, H261_MTYPE_VLC_BITS, 2); - if (h->mtype < 0) { + com->mtype = get_vlc2(&s->gb, h261_mtype_vlc.table, H261_MTYPE_VLC_BITS, 2); + if (com->mtype < 0) { av_log(s->avctx, AV_LOG_ERROR, "Invalid mtype index %d\n", - h->mtype); + com->mtype); return SLICE_ERROR; } - av_assert0(h->mtype < FF_ARRAY_ELEMS(ff_h261_mtype_map)); - h->mtype = ff_h261_mtype_map[h->mtype]; + av_assert0(com->mtype < FF_ARRAY_ELEMS(ff_h261_mtype_map)); + com->mtype = ff_h261_mtype_map[com->mtype]; // Read mquant - if (IS_QUANT(h->mtype)) + if (IS_QUANT(com->mtype)) ff_set_qscale(s, get_bits(&s->gb, 5)); - s->mb_intra = IS_INTRA4x4(h->mtype); + s->mb_intra = IS_INTRA4x4(com->mtype); // Read mv - if (IS_16X16(h->mtype)) { + if (IS_16X16(com->mtype)) { /* Motion vector data is included for all MC macroblocks. MVD is * obtained from the macroblock vector by subtracting the vector * of the preceding macroblock. For this calculation the vector @@ -425,7 +440,7 @@ static int h261_decode_mb(H261Context *h) } // Read cbp - if (HAS_CBP(h->mtype)) + if (HAS_CBP(com->mtype)) cbp = get_vlc2(&s->gb, h261_cbp_vlc.table, H261_CBP_VLC_BITS, 1) + 1; if (s->mb_intra) { @@ -449,7 +464,7 @@ static int h261_decode_mb(H261Context *h) intra: /* decode each block */ - if (s->mb_intra || HAS_CBP(h->mtype)) { + if (s->mb_intra || HAS_CBP(com->mtype)) { s->bdsp.clear_blocks(s->block[0]); for (i = 0; i < 6; i++) { if (h261_decode_block(h, s->block[i], i, cbp & 32) < 0) @@ -470,7 +485,7 @@ intra: * Decode the H.261 picture header. * @return <0 if no startcode found */ -static int h261_decode_picture_header(H261Context *h) +static int h261_decode_picture_header(H261DecContext *h) { MpegEncContext *const s = &h->s; int format, i; @@ -534,7 +549,7 @@ static int h261_decode_picture_header(H261Context *h) return 0; } -static int h261_decode_gob(H261Context *h) +static int h261_decode_gob(H261DecContext *h) { MpegEncContext *const s = &h->s; @@ -580,9 +595,9 @@ static int get_consumed_bytes(MpegEncContext *s, int buf_size) static int h261_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt) { + H261DecContext *const h = avctx->priv_data; const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; - H261Context *h = avctx->priv_data; MpegEncContext *s = &h->s; int ret; AVFrame *pict = data; @@ -657,7 +672,7 @@ retry: static av_cold int h261_decode_end(AVCodecContext *avctx) { - H261Context *h = avctx->priv_data; + H261DecContext *const h = avctx->priv_data; MpegEncContext *s = &h->s; ff_mpv_common_end(s); @@ -669,7 +684,7 @@ const AVCodec ff_h261_decoder = { .long_name = NULL_IF_CONFIG_SMALL("H.261"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_H261, - .priv_data_size = sizeof(H261Context), + .priv_data_size = sizeof(H261DecContext), .init = h261_decode_init, .close = h261_decode_end, .decode = h261_decode_frame, diff --git a/libavcodec/h261enc.c b/libavcodec/h261enc.c index af65c1f3b1..13fe5bbfb2 100644 --- a/libavcodec/h261enc.c +++ b/libavcodec/h261enc.c @@ -37,6 +37,14 @@ static uint8_t uni_h261_rl_len [64*64*2*2]; #define UNI_ENC_INDEX(last,run,level) ((last)*128*64 + (run)*128 + (level)) +typedef struct H261EncContext { + MpegEncContext s; + + H261Context common; + + int gob_number; +} H261EncContext; + int ff_h261_get_picture_format(int width, int height) { // QCIF @@ -52,7 +60,7 @@ int ff_h261_get_picture_format(int width, int height) void ff_h261_encode_picture_header(MpegEncContext *s, int picture_number) { - H261Context *h = (H261Context *)s; + H261EncContext *const h = (H261EncContext *)s; int format, temp_ref; align_put_bits(&s->pb); @@ -90,7 +98,7 @@ void ff_h261_encode_picture_header(MpegEncContext *s, int picture_number) */ static void h261_encode_gob_header(MpegEncContext *s, int mb_line) { - H261Context *h = (H261Context *)s; + H261EncContext *const h = (H261EncContext *)s; if (ff_h261_get_picture_format(s->width, s->height) == 0) { h->gob_number += 2; // QCIF } else { @@ -132,7 +140,7 @@ void ff_h261_reorder_mb_index(MpegEncContext *s) } } -static void h261_encode_motion(H261Context *h, int val) +static void h261_encode_motion(H261EncContext *h, int val) { MpegEncContext *const s = &h->s; int sign, code; @@ -166,7 +174,7 @@ static inline int get_cbp(MpegEncContext *s, int16_t block[6][64]) * @param block the 8x8 block * @param n block index (0-3 are luma, 4-5 are chroma) */ -static void h261_encode_block(H261Context *h, int16_t *block, int n) +static void h261_encode_block(H261EncContext *h, int16_t *block, int n) { MpegEncContext *const s = &h->s; int level, run, i, j, last_index, last_non_zero, sign, slevel, code; @@ -237,12 +245,15 @@ static void h261_encode_block(H261Context *h, int16_t *block, int n) void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y) { - H261Context *h = (H261Context *)s; + /* The following is only allowed because this encoder + * does not use slice threading. */ + H261EncContext *const h = (H261EncContext *)s; + H261Context *const com = &h->common; int mvd, mv_diff_x, mv_diff_y, i, cbp; cbp = 63; // avoid warning mvd = 0; - h->mtype = 0; + com->mtype = 0; if (!s->mb_intra) { /* compute cbp */ @@ -270,34 +281,34 @@ void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], /* calculate MTYPE */ if (!s->mb_intra) { - h->mtype++; + com->mtype++; if (mvd || s->loop_filter) - h->mtype += 3; + com->mtype += 3; if (s->loop_filter) - h->mtype += 3; + com->mtype += 3; if (cbp) - h->mtype++; - av_assert1(h->mtype > 1); + com->mtype++; + av_assert1(com->mtype > 1); } if (s->dquant && cbp) { - h->mtype++; + com->mtype++; } else s->qscale -= s->dquant; put_bits(&s->pb, - ff_h261_mtype_bits[h->mtype], - ff_h261_mtype_code[h->mtype]); + ff_h261_mtype_bits[com->mtype], + ff_h261_mtype_code[com->mtype]); - h->mtype = ff_h261_mtype_map[h->mtype]; + com->mtype = ff_h261_mtype_map[com->mtype]; - if (IS_QUANT(h->mtype)) { + if (IS_QUANT(com->mtype)) { ff_set_qscale(s, s->qscale + s->dquant); put_bits(&s->pb, 5, s->qscale); } - if (IS_16X16(h->mtype)) { + if (IS_16X16(com->mtype)) { mv_diff_x = (motion_x >> 1) - s->last_mv[0][0][0]; mv_diff_y = (motion_y >> 1) - s->last_mv[0][0][1]; s->last_mv[0][0][0] = (motion_x >> 1); @@ -306,7 +317,7 @@ void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], h261_encode_motion(h, mv_diff_y); } - if (HAS_CBP(h->mtype)) { + if (HAS_CBP(com->mtype)) { av_assert1(cbp > 0); put_bits(&s->pb, ff_h261_cbp_tab[cbp - 1][1], @@ -316,7 +327,7 @@ void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], /* encode each block */ h261_encode_block(h, block[i], i); - if (!IS_16X16(h->mtype)) { + if (!IS_16X16(com->mtype)) { s->last_mv[0][0][0] = 0; s->last_mv[0][0][1] = 0; } @@ -371,8 +382,11 @@ static av_cold void h261_encode_init_static(void) av_cold void ff_h261_encode_init(MpegEncContext *s) { + H261EncContext *const h = (H261EncContext*)s; static AVOnce init_static_once = AV_ONCE_INIT; + s->private_ctx = &h->common; + s->min_qcoeff = -127; s->max_qcoeff = 127; s->y_dc_scale_table = @@ -390,7 +404,7 @@ const AVCodec ff_h261_encoder = { .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_H261, .priv_class = &ff_mpv_enc_class, - .priv_data_size = sizeof(H261Context), + .priv_data_size = sizeof(H261EncContext), .init = ff_mpv_encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, From patchwork Sun Jan 30 06:27:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33909 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1769906iov; Sat, 29 Jan 2022 22:28:58 -0800 (PST) X-Google-Smtp-Source: ABdhPJwQqMjENAzqhLrH+O4ymYSagc/kPWfSwsRpQpJ0hZO3AiCZTuSSIW4TwyQ5bvWWX5LQY2ha X-Received: by 2002:a05:6402:254d:: with SMTP id l13mr3094526edb.77.1643524138190; Sat, 29 Jan 2022 22:28:58 -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 13si5535422ejr.618.2022.01.29.22.28.57; Sat, 29 Jan 2022 22:28:58 -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="K1J/napY"; 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 8D85768B13D; Sun, 30 Jan 2022 08:28:24 +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-oln040092074062.outbound.protection.outlook.com [40.92.74.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DF76668B0D6 for ; Sun, 30 Jan 2022 08:28:21 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EduBULUAXdGFrarfhDyehqD/4DFV7jdsgp+C9HdMtQDLJoL2JC2gJP97oq3PpeCfIpfT8T/w+3EBIBdODxbdJFLvt6Is2qrNIcriaVPhMu1fGjd2u6Y750dcJU7vK2r0NtMK+1Yn+ciCdEnTKU1DYlJodeAbaH9cZjBZsB33QWS29EbKwyBQNrxWe3r7ildW0f5Bnjxn/VVIcJ+Ulqgdcpaw/H9yqVtP9zu4RwU8MkMa2lnYlVN6JPQpAwjog5Sq7TbFqvniuORTEBulgZkFux72h6Yt5KPic4bNXyjE5uSGHlBFpKll0eGZk0XOv0mBQQcEMw9fMibRLCSrbECycw== 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=20MP1lkTdB2JK8t6YQGNUsWJ/Yr/gOHFre6v3qTRfiw=; b=Kx7nlyX727tHGO6QU7xjZmXj0xqp7WRQI942869Y9/ScnwbDj/J8ObzqY8ZcQvORAnDt6LuZPixilAY0FF/8n6U4r3czUx2HstqVkJDRr00ZrA/0fR1LzCI+dtjpungEVLUdS44yFCww6dNnPIWRmFKI3zWbI0UmkaNB5p4zMwnvG8U7Arwc/Lwpxzgtf8xh8lG6fHRRoKU9zZpYY4EW/mvhho99QcUgg9rRvD3QYOctymj/eqnkRVfmUUFBt2ZKbWVx0j9boV19RCnsDeyP1LKfSZ+176UM2XUvAkCKUvBOGoPBYVk6h+td8EXmD32a8orjxb6Zaf5pSNeCFwjnzQ== 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=20MP1lkTdB2JK8t6YQGNUsWJ/Yr/gOHFre6v3qTRfiw=; b=K1J/napYLuOhI0WSGOnwL2aHlozlj+uAK70mahVrW9iPVeuZZzU2NfN2FGpN5V/0uRG2zJlxgmlxKLi0T7gxBY6CPp4DDBnUlNCtCjvwLiAiV/1E6OfkgwLKffpFZUxcBHwVdbvHEoH684ClhYsyWMPfFr0KvuaH1PBUfStx6KIJPYIyne7cTpUes1ZuHg2Oyj+RS+JFLugcTg66D306Jffu9DN78gtxAk8dRN0/Xlbgawzd7TNmVc5XpHCYEPfLJ0IKnIq7f2JWJDCkXfX20ulPUHeei0fzyXu8Y24/p6wh7AGYNFNMVb7JF95xgnL6We6gx/7TOwv8REMFttKQNQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4247.eurprd03.prod.outlook.com (2603:10a6:20b:7::26) 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:28:11 +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:28:11 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:14 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [5FrdBCmHf99Q6DfeI/r2jsX3zMcGN0eK] 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-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ea796fbc-8ba2-4007-04c4-08d9e3b9b02f X-MS-TrafficTypeDiagnostic: AM6PR03MB4247:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 10pKIS9H3pEO6iB0UVt8IIiEy/cGipVaJ456jwsSzNtDzaFLUvx4XNPEGX0JHk432szOZTwnVwInwDnbXECL1buLYiaf3jGhCWGzPa+SeMlY+i989Xm/W+M9jWB4yahRfxkT1lEgcRejnjPY6goS5xDom8uvi1x8bZUiEnjuBDxvLUxNgiIpAiLnPf23Ld+dB76NR9qZhM+xjejuAC2ruaMZlugPHwnaq6txLqOjVx3RCJeNELQtGrf9ork90gsslOMWMQNsvYfmRmY/9AsqMQa8/H/mh/tf5q2KpOVY0eL6xDuVW/Uk1tm9Aq42WLIE03juDXtEmZUaxtf66HxMPioiNuFvcxjRwp4aGD6IqMLd60WBT8hhPKxvHcaZ15/ww7cnaZQsimV4SRLH5CRozwpqN7GsF5TlmXQsdiZm/NHZETQ9NfoET80yhEhdL/aze7ShytMU8Ytek15Oy5Z53M1FTIEHhH3fBvqInWbtnbEViXcP3LASPJjVm8wbKIj6bx834oVappbGkD2fcNWp+FinRJdE/OG7u+zQAEL0g7m6CnymsT8x+k9c3VqHhErs X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: P3oK6P/9dAm8WDSmoEFzrwEApyA7TC4C00ceGTyugXRkjWcKJr3ZWAJTb5ZOy/6E1zXDgvuOp3JNsYGzVPna3mX/SXt3IG6rF2/Ddis2+2/98TzTUhsXVqDSyulJ8gAa4HsWGV2oGvn5oPUnB3awXbnpk0DJJCQ2F/SlnBNgc2ixvE1H1dnCzh8nnVkZ/I2B6IEaDD2kHMedMiIuIE5T/VQ3qwoDtZwYTXEgiM9deMTbzqspRi0K888znGGcT9Vir5KmoqDpPEQQ1KeYBI6K+Awqtft+HIZ6a07BIB6471hMpny5eow9otdMEJxXuG2cpMjhtZldHRUrRo6+UDzupUQKvj30HyXk5VhDUKvo+16XCFro0OyM1NZY3oVAQQM7KA9/n3ySnKpXl7Yua8U1/5YpnFdwwml5AW3PsAq9w0har6i0KPESWQP58V+F9+6GFIIgutD0Zzm1JtHeeeUvDbbCAFkGF4elZ7xz8eFqk8hQlEJyxSyWLAYh6mFVTsNrAh0bfvQPaLSnsvs71LyU1x3SyrDVuRqsbXbPoid4/z/1PwckBfsKYvYp0XSMd+XN74e3CERuWbMcUHTs4i+8uTY4+fLtElRHddu21DAumhpUvvDN6GDYseE652p3dd7F9QzVKRdO+0uYaq2vzeJV+z1q9ElpG1rJvwMYBEN9vjZGKDK0GhX/TgsKbhjeA1dKOhAj5rPIIPUrYhrgXMa/LIHSX5kn5PP+QIG+ZzhgbU06N4bVLGi5yyi1F1ErcCiwEXJhmVkihya87G0z9P1iRtcoVgocxyHwGyYoDl1CwANbgNDYD2+EZV880zdpIMt156H2YHp4VIJSw12wGNOgIBvmm3Ip/wIMdvFBrKiZCuSKxmfWyAI7OR+CSSGGxzgysjxkx4hSZT8yBVt6gM+7hYyFvrE9kuN9fLQag+C05LD+jjloY+4omOwYnlGMfVTzq/pGJ3dSAk3rHYKv9+ZAWw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ea796fbc-8ba2-4007-04c4-08d9e3b9b02f 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:28:11.4743 (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: AM6PR03MB4247 Subject: [FFmpeg-devel] [PATCH 06/41] avcodec/h261enc: Pass PutBitContext directly in h261_encode_motion() 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: c2hCGyi2c4tF Signed-off-by: Andreas Rheinhardt --- libavcodec/h261enc.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/libavcodec/h261enc.c b/libavcodec/h261enc.c index 13fe5bbfb2..7e3af1ff9e 100644 --- a/libavcodec/h261enc.c +++ b/libavcodec/h261enc.c @@ -140,13 +140,12 @@ void ff_h261_reorder_mb_index(MpegEncContext *s) } } -static void h261_encode_motion(H261EncContext *h, int val) +static void h261_encode_motion(PutBitContext *pb, int val) { - MpegEncContext *const s = &h->s; int sign, code; if (val == 0) { code = 0; - put_bits(&s->pb, ff_h261_mv_tab[code][1], ff_h261_mv_tab[code][0]); + put_bits(pb, ff_h261_mv_tab[code][1], ff_h261_mv_tab[code][0]); } else { if (val > 15) val -= 32; @@ -154,8 +153,8 @@ static void h261_encode_motion(H261EncContext *h, int val) val += 32; sign = val < 0; code = sign ? -val : val; - put_bits(&s->pb, ff_h261_mv_tab[code][1], ff_h261_mv_tab[code][0]); - put_bits(&s->pb, 1, sign); + put_bits(pb, ff_h261_mv_tab[code][1], ff_h261_mv_tab[code][0]); + put_bits(pb, 1, sign); } } @@ -313,8 +312,8 @@ void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], mv_diff_y = (motion_y >> 1) - s->last_mv[0][0][1]; s->last_mv[0][0][0] = (motion_x >> 1); s->last_mv[0][0][1] = (motion_y >> 1); - h261_encode_motion(h, mv_diff_x); - h261_encode_motion(h, mv_diff_y); + h261_encode_motion(&s->pb, mv_diff_x); + h261_encode_motion(&s->pb, mv_diff_y); } if (HAS_CBP(com->mtype)) { From patchwork Sun Jan 30 06:27:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33910 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1769986iov; Sat, 29 Jan 2022 22:29:10 -0800 (PST) X-Google-Smtp-Source: ABdhPJxC69fxnqyDDgY+imKgzcc+HLsWxBevgin0B3vydj5ViUUXHjclOaDohZwZoLxseP9yc5Mo X-Received: by 2002:a05:6402:11d0:: with SMTP id j16mr14256074edw.323.1643524150178; Sat, 29 Jan 2022 22:29:10 -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 w28si5762612edi.496.2022.01.29.22.29.09; Sat, 29 Jan 2022 22:29:10 -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=KE4aQZHr; 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 5AE9168B0D7; Sun, 30 Jan 2022 08:28:25 +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-oln040092074062.outbound.protection.outlook.com [40.92.74.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1F40A68B0D6 for ; Sun, 30 Jan 2022 08:28:22 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aI9VRaqHM8ebo3vG2y5I9nGAp/ZPj6a2TaHLxwP9L4exAtcu1+FEHkRSImL/u6qvrVF9+2V+1RPSTmJ0/XxS9Us9649u6PMM0Tv3vuJfXz4kmX7OmqvI89r/rhYhiIWLGK8Gt9p+3fQyYkmXibbcR0xIdBGrBYq77SpgWFUw6Fy3FH82EctgvxZi46tOxdUQxyft9JwUulpgEQ3r7NhrD8uN9ZnjjJsr2AibjY/5ZbxllowtdLqzWjpHbvJVU/2j1S4aMBH0XX+0TlVDbRCdm2Oxh/P3KVMUVR7zxFNrDtMFg48IwExoT47EMuWhdVvEOQnDFOOWA9TWuLEOCwZgqw== 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=QDzJ2CAjddPdFf4qSKiPRWOuO3lgPg11FCh82Wxghfs=; b=YPTgBSgqVxSRUR7s8e49XVaUQGypZdEW04xRCRyM9F95rr5YJJZrP3z3xRWaMRP0aJQiGS39Me4BcwY4l34n0F/NPNMdNxFR4Th252m+YGLMcJnDJOWdfpyGZai/jYRhCAfV7uehYbTVW5lYNVlC/pelMxrXkgtu+ZXRdPzbCkrR37rTZhUP72mbitmnqXDgXpk2RXhuMS35szbXZAZ8IeJxVWISGnk6YPbWjT5EFxuQmGnk2H7C41qboxY3n5hc/Sj8qfB28l5WA3e71mxggBUJCEIHhz5DR4D63hTMOsnmAlBemvukJExEhI51U7VU1YbNe/g6UKSIbhOodzZlnA== 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=QDzJ2CAjddPdFf4qSKiPRWOuO3lgPg11FCh82Wxghfs=; b=KE4aQZHr0LE58RclRdCMFKpjK9h8eW6T0F4XXMPNu5DhgrG80JoXHj7rIcnSIUjRGg3MFCoyHvli3Gpd2r0BclvMUtf9IrHXajoiE+er1Ju1AQUOK+EPA8hu26pQR98RrF3Jp5DTTIFzfZHs0gBOnuFa9b9dnmD2Qi5jJdPDRFBXzifFsyz4pG8MCHqvt/y703BzOxjTq8ZlYWKbDz9xffFZXGtroDvlZqMlibWMXPqHR+NTMj/or7f1SmyKSj9pvIeIzWNpEvvr2eMfCVUFgJ76xOYzfI/hjFgqrTkfnfb0ivu4NGdlT5BdDmPQoNxl/A+a/S/DvWRgpDAM3n3QpA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4247.eurprd03.prod.outlook.com (2603:10a6:20b:7::26) 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:28:12 +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:28:12 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:15 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [vkhhxyHWq3Djhz0kFVFXAGGecjtG/0t8] 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-6-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 73dfea46-666b-4425-7624-08d9e3b9b100 X-MS-TrafficTypeDiagnostic: AM6PR03MB4247:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JncKjdTNfaSnXfTVGfdhRN4asMzeQpgv4W+4WiRw2Et6YQgfwnHVTh+BDIacgrP1QYkWHyrp8MmYZPKqQqYpsyTAXyQd8bh/gGwuTPnGGUb3iOHbXW8AcjQdOfypJUrtZ7WJk6eVQGTiAzXSjP6OIpZjmvz6tF72jX7+6AwCsCIwv5dpbpv8PXRWzO+xeyZDCkRPVrfr84YhEhT7pXdfFrWZ6yCcD9gaoivmMMPa+7jLJMfDCbD4FiluptNXY3o0vJzQpPJTkQK/27tO4NK6INqVkU5hu0IlxQb6r1fl58XZMVtWazGI1aOpeI2Tn22MQrsMx53gyoRUiLZVk+x8eM4zD+/bA5wE6bOdlopCm5brrNU1tiGY8KkIygBdX6AzguTxSGsHxQXcKla6xDVCPZlNI79Yk1uzxHK258UXt3DmXImV1pLsg1zpuWOteyyVPNLyD6cvpgjQEmWZLyxJMAZz/59qUA19Dvwbfv2WWXAX9z6Pyzds3f0LpL1uXOgG8UGm9/Qrglpc/ZHgoeDSQ354oj2TE/LJcUTiJhRw7asu4tkF/9rrcMPWgAOVMKXn X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: wdkLkDw3OO/EqSxHNP2C+hN7RQW95S9kmLCgf4dubLcSECmw/03sNJHrvKGsM+xaRRoZWN61WUyX+enB7/AryCzvp+jJwF1dom1kl7c3EL39D/ct67bmWrsjMJdcFr9pILIQ933PAN+T2B21VlhWsmidPDNnthMcT+JlUT2Jbz2ixd5Ji4FQDHPlsh0WstV8zhVFnT6krC+gSxGn3urOZ32UBEKzDYR6jyPBZ39yXU0PfladHb5ScnqiPiY8lSjJZonyRjxAB8S1om7KzJ9Af8hNJvDT5+28MdM0ZsLlXyBuV2g9QRSQ5y5/xgJqkOzO/L/gLCSFZCKkhCao3/5sA0vLITBfko5Um2YdfitJ+hjXTwQuwyWj+IABh5D2/2ADEi3bZqVgbP/aUj+KTfiqnLYet2ZIEqk6uKQLrQqn84mLS78Mh895y0VUZG5eMu0QFceyPECpQg7KGMb9LUmen3CDgZO9u4xLbkXznBaiilodf3rGY+Td2e9RE9NHkRQwU1NeyhK3ZhcU/ot2udq3OxDrr6YA4VVc8+kitEWOwATz5sk5yEz9iNw8Hsn4o3jYUvtQI/Gz7FdhXs+FAyg1WK2zYXN0nF3wenLqcbd6LYNnIheiSRHEGAss6fSV3HVr9x9IHv34auk4OGOwJaBs4pIB2329qx42xPFMRducXxkVbxQVUSi9xjqXr5tWg/m7IZ7RtuLE+PjlqcEjfvBC436mB9nmuexcGCWhUm/tExrLsBD1RHGQ/rVxP3D4P+w0O4FeeODJrc8Oh4KHdkcN/+0F8JuNiOwdaE3OUSo3r1YjccA2mSCu9n/58y2IL+u5FI5FFXTeN3a7S2QJT7BuycLGhjBCdycguasVv6qZTOpzJ++GqkceWLomFxtJDYxWOJyfI5Q8epvxfwBXTqPZCPSzwfpcC4NuYvwv55O9ithzzYr06mRkMHPo4GRHxxyXhKsONbZA2c0gIyOAbWHvrA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 73dfea46-666b-4425-7624-08d9e3b9b100 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:28:12.8781 (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: AM6PR03MB4247 Subject: [FFmpeg-devel] [PATCH 07/41] avcodec/idctdsp: Constify the permutation parameter of ff_init_scantable 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: qx8KrA88qM3Z Signed-off-by: Andreas Rheinhardt --- libavcodec/idctdsp.c | 2 +- libavcodec/idctdsp.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libavcodec/idctdsp.c b/libavcodec/idctdsp.c index 71bd03c606..d07dc29207 100644 --- a/libavcodec/idctdsp.c +++ b/libavcodec/idctdsp.c @@ -26,7 +26,7 @@ #include "simple_idct.h" #include "xvididct.h" -av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, +av_cold void ff_init_scantable(const uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable) { int i, end; diff --git a/libavcodec/idctdsp.h b/libavcodec/idctdsp.h index 014488aec3..e8f20acaf2 100644 --- a/libavcodec/idctdsp.h +++ b/libavcodec/idctdsp.h @@ -43,7 +43,7 @@ enum idct_permutation_type { FF_IDCT_PERM_SSE2, }; -void ff_init_scantable(uint8_t *permutation, ScanTable *st, +void ff_init_scantable(const uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable); void ff_init_scantable_permutation(uint8_t *idct_permutation, enum idct_permutation_type perm_type); From patchwork Sun Jan 30 06:27:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33911 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770084iov; Sat, 29 Jan 2022 22:29:20 -0800 (PST) X-Google-Smtp-Source: ABdhPJx9Hisk82W3TXLm/RgHqHhCrWK/gIvkZydpX9yL3s9vY+vnC9XoDc+SQgFIKU1fAriHyEhg X-Received: by 2002:a17:907:d0f:: with SMTP id gn15mr12746870ejc.43.1643524160478; Sat, 29 Jan 2022 22:29:20 -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 n3si5898551edd.566.2022.01.29.22.29.20; Sat, 29 Jan 2022 22:29:20 -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=BQVj73qO; 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 3B44F68B150; Sun, 30 Jan 2022 08:28:26 +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-oln040092074062.outbound.protection.outlook.com [40.92.74.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4209C68B10B for ; Sun, 30 Jan 2022 08:28:22 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fcAzwdR24z7ca8sBQEBH813+nMrnwt7C/vVrwyljDVCrUAD7PW8Ub9PcCx9pp4o05nJYC/hmz8CXsISR9kIBvRTq7AJBBoCLTC4FwsF/fe1JzJr4omxN6jZIHqT1z440PcEoXwINWShbRk+RjJ1Tl7JTt/LzFoKqQGCmtXqu/dx/jFK8Wlf5xTQ1JMR+cEBEQt87EdGKfNsaFN/VQ9cyIVpAlYsMTmqXZzmvKH0iS8fnv/gkUKE6lxF1rnvw3csq88cp/MBT4xw220Q0GR2REL+62fx1XQD6CCgpgCCjRKRwfeoR6f+ob3q89SZC/+N8QNvfhq1yYNe9jasL7PSCjA== 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=HABDUQ8uO4qiV3YQ+txT2vA8zW66V3hs226HYDQ0puE=; b=CYvnqg/6K9fFKjqeHJcZRuSosMZO269DU12M0pQRHQwVCWmDvVoWPT49xeV0KaC9uFMIWj/d6zL8JzGFupB3CDrKB9t4GdWAXNZDxBm/CeO95uqjZlTr+Jmiwru2hsWMC10MOPn8F2mQqTAeJpw3hMMIMq0+59AOAUz74i7DWm02pPAm8tR9d+QNcEk3CTxtvCTqqeffqEgMkSrRQYxhi3ZfBrCroYHNstx9ZwzSgmxUrPdSr1mLs/9jW0JQEoRnxp+OmCIpyM5puTJ9eDwVDUO9DReeW4tXQD5WRM5+UgPEnqsfdjBipvNYUGYWkdjbVvxP4OLmGwJnA6S/KSMC6Q== 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=HABDUQ8uO4qiV3YQ+txT2vA8zW66V3hs226HYDQ0puE=; b=BQVj73qOBatf+i+KMkaDSnrEtZ12bCasK3UMKC6ffqqqd21n0J+yS8bwSiXQ9ywZL7jPK7ZecStW6ekbV1/R4ZiPXmDYNaxYU370vWsE2yn3TmEHNSKjCRFvpoPTx/h3wW8SRYPQi3gl0Nfc03Az8UCtxgCa5nh6pzJS/4aw2y0b+2hKeCCKd3oaJbouBv3iGRVuLW6umqXfQh7UWpSkb0ukgejIMV6SUa0upyUvydRy5bsZpei8CA7678P/zj8/j2BRwsEVhOmLCs/6/QKUwfjmCbycruQcJmAUEYoBkEppNIFDe6IgqGRyrw3C/sYE5X/JULeemL43rNoOaKIX3A== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4247.eurprd03.prod.outlook.com (2603:10a6:20b:7::26) 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:28:19 +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:28:19 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:16 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [r8moX9uyhEW3mm2qP+3W/MoxNr6hRvEN] 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-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2597359c-ff89-4e1d-7d9d-08d9e3b9b4de X-MS-TrafficTypeDiagnostic: AM6PR03MB4247:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PUQd6H2iQHDaeZeFdd0Imh+fqgZBmEHeGrhmzbHUR2yTSZGew6cV8uqYAjUWGLTFdgalhdXxIq+YGYUXu9UUfHg1YGu8kkM9UQbOFiMzJ0328ugPGe9aBTXYbhFXtt9K1wN0Bi49blWLmuu7AwbyO4IXbDPYdY5UHZd4yNE0JRuSrj5I+6hhBG3ltorg3/6G04BhrJB4ssCBPI/oHMWpPo3XbLdBkCwM4jqe7hUGR4KoKas/jEcwLztDJ7TXUZF0sWQGxS1g7ZWrYv6YUyQMGDgGGaGzR5aUsxiRjqxF4X2/LDowGiSNcVNFXlvWpXG1c7byLbFkeqgst3Q3uCtmymHfB7IBrgz2Wv1WQfE5CqjeKZN4Cg5YAQa+UXfAbVt/yzOhywMnJynP3nZE/aHuCNhkI4N9AQZwhzIh35YSs6gDgVZVQsGllq0Q+5Wt0RfTT2AwPeQ4XTpZd8m3j44wK5HpZMAAqhdXVfwlUe4wv7s/Px7gWhpetgJhog60aOdifvifRe9LrMjs5pO3LZ0ozbLkjD8AdUg1qksAKvBW3xLWZbAFIx9AWYj+R4iU7CSe X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KM97F/8oXS+YzRoK9w6m5HlL1XOpFNkvZtjYjHNPH+xESal0w6WI5fENpBVOaC36zkR2nEiBw/kAvI81bvA9kOkLOjrwpZ9LVZwiasU5xoSNr1cyxDgVsgsvxod1SX/aD2CEPXylqJjxFklC2eY5B9BKNR85gif5jbCd2hg4UWyWhUcbRdfFu8ySVdBh0lq883jK7KBSeLJOdIWMf9Oj2rwLSwyHiJtRtBraBsIOuPm902xfgALYxs/UY4u8QOT/eUlXFyZoaTI/KjyjUj60HyzPAi8k6QlK5IjqvVLvSaoraxuPraJsh+LXER2JpSl1Hb54WJfbaOrjgGOh+RGYCJFo0V1JJWrAo7QzOnb6AkBdq4o5gFOD9VYRBZi599RdInfYsp7lQl3uYQ/3bmYvxBiiswCc/pARtTFtcX1IXZv8EGiAXyOTH5nHmsy5Zzzk0V+vEz9s8M8F/zMdK9LOZZs8kzLyYwmOxKlx38Cm49ygFsFoG/3EaKpdUQmxY2PJOGsFHHJRqSJc+cE1YgZuMzo8woUUgxEsTuBqKMuVzCQBcC/KS765mgqVZAzZXXolDD7cr5K/vDsLkaJ+7oE2ttKcf7zJupBsgmFHJh8WEP/j/DdR4jLba6DzrpWEpaER9Ad7uDeK2xXgO4UCjpzq3+K9k8zXLAeYDZsBUcGsgzOA2hw+ER7re9IopV7XLyzqhIAOxKtkAXkDIdOyO0mVT0fuGmQ9O0UiY3Fes2UBccUsJvIhOcliiTtQ4ew+51x+T/2KskXY4uyo8JYj75/InOxkfw3E39UVbt7xA5lSG6nlwsyluzGr/aqaK/+xIXZaYA3qDsQojg0eK/XIOWEsLevCP7bUjvcMgtoyD2x/O4fD6SQsM5prwd763RKrV+lKmsxXYZIKH3DVXJjdszhsPCXsAFYYBXCiK7nNJ4j1ir1ihc9KYoymvEesx9FOt5BktlJmUiiMWzo7BStMln1JHg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2597359c-ff89-4e1d-7d9d-08d9e3b9b4de 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:28:19.3664 (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: AM6PR03MB4247 Subject: [FFmpeg-devel] [PATCH 08/41] avcodec/wmv2: Move initializing abt_scantables to the decoder 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: EwQYIWlkGYlR They are not used by the encoder at all. Signed-off-by: Andreas Rheinhardt --- libavcodec/wmv2.c | 6 ------ libavcodec/wmv2dec.c | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libavcodec/wmv2.c b/libavcodec/wmv2.c index fd64a0938f..57e1267782 100644 --- a/libavcodec/wmv2.c +++ b/libavcodec/wmv2.c @@ -20,11 +20,9 @@ #include "avcodec.h" #include "idctdsp.h" -#include "mpegutils.h" #include "mpegvideo.h" #include "msmpeg4data.h" #include "wmv2.h" -#include "wmv2data.h" av_cold void ff_wmv2_common_init(Wmv2Context *w) @@ -36,10 +34,6 @@ av_cold void ff_wmv2_common_init(Wmv2Context *w) s->idsp.perm_type = w->wdsp.idct_perm; ff_init_scantable_permutation(s->idsp.idct_permutation, w->wdsp.idct_perm); - ff_init_scantable(s->idsp.idct_permutation, &w->abt_scantable[0], - ff_wmv2_scantableA); - ff_init_scantable(s->idsp.idct_permutation, &w->abt_scantable[1], - ff_wmv2_scantableB); ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable, ff_wmv1_scantable[1]); ff_init_scantable(s->idsp.idct_permutation, &s->intra_h_scantable, diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c index 7518088b6a..dd0e2683f5 100644 --- a/libavcodec/wmv2dec.c +++ b/libavcodec/wmv2dec.c @@ -29,6 +29,7 @@ #include "msmpeg4data.h" #include "simple_idct.h" #include "wmv2.h" +#include "wmv2data.h" static void wmv2_add_block(Wmv2Context *w, int16_t *block1, @@ -537,12 +538,17 @@ int ff_wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64]) static av_cold int wmv2_decode_init(AVCodecContext *avctx) { Wmv2Context *const w = avctx->priv_data; + MpegEncContext *const s = &w->s; int ret; if ((ret = ff_msmpeg4_decode_init(avctx)) < 0) return ret; ff_wmv2_common_init(w); + ff_init_scantable(s->idsp.idct_permutation, &w->abt_scantable[0], + ff_wmv2_scantableA); + ff_init_scantable(s->idsp.idct_permutation, &w->abt_scantable[1], + ff_wmv2_scantableB); return ff_intrax8_common_init(avctx, &w->x8, &w->s.idsp, w->s.block, w->s.block_last_index, From patchwork Sun Jan 30 06:27:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33912 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770168iov; Sat, 29 Jan 2022 22:29:31 -0800 (PST) X-Google-Smtp-Source: ABdhPJy4k2hiYkPAZGikyimKEIVUyqQDqLLfLbJEJNPU6u09IDoFKG3z0ZxAj4CLC9vpcTnF1QEI X-Received: by 2002:a05:6402:518e:: with SMTP id q14mr15227692edd.155.1643524171800; Sat, 29 Jan 2022 22:29:31 -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 w16si5879527edl.87.2022.01.29.22.29.31; Sat, 29 Jan 2022 22:29:31 -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=qqeFU7TI; 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 171B868B15C; Sun, 30 Jan 2022 08:28:27 +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-oln040092074062.outbound.protection.outlook.com [40.92.74.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 666CC68B0D6 for ; Sun, 30 Jan 2022 08:28:22 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f40xnG3gBbHLRsy6biMi3wil6ntW/Gvr9SOzIs2MDo8EQVRCAc5pissGE8FdySvixMGSUCyvc9nG91h+q1MceCWsEDsf9KziM9K4PG32E47vvPat3mGMfx633d4YKhS7gspydiw/NlQObNq+n54nNxNLIEcJ/mtxpdbNlykKmo9Jjj1S0A/mi90QB6TZILHBWNIF3JMY0uWWYWkzUQl08sw0l4WTah+jOiNZyijl4ArvB86/DWp9PoG6sTCwWUYIMwafqqfa4uG1oW/35B1Yzklf90lE4FRO027JlNxd1HL/YJZJpakGZXWzqrHEP+Q8XAqkZj1K/04jYtxM8UbwtA== 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=CBV717XShyx/F2OPF+V3xGJaFv57BybeWkXFJskLAbo=; b=M/DMVgLRCvlX4tNsrH9PsAucbJQ+IFqXju68o4zLzNVP6WtwygyxQEUZtlPIx3QVOn/v5nen4nrCiMlyNbp5qV85FmmBEptYnONJtlu1wZrajUrCyJzc/GmE1p9uYExa3atzwzI+XLuc1Wr6/8ByTYO6AIc9fDjb+1ES40kTbYuwUSScMhmGzIRNMcZ1POkLXU86aUFsaGGybSLhZ4PRf57So35oGUBYXrQFv4cp4yeMzY64Z6YEH11TjeFCfMkZOm+BXojSzE+8mExKNluXJXz9OKLiujcWUlkxfO8I9WfclayP9wdBDMo87yq5n+hbievSaeqza32us5SVuVJbDg== 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=CBV717XShyx/F2OPF+V3xGJaFv57BybeWkXFJskLAbo=; b=qqeFU7TITNmvWbYp0GpRTF4/BgvBMIcgc0jNGrZtuR6E7nCxQlmskhUF8LZimi22DvgbuLuKGB3QtDQEI8G1m5c52lmslUNEbbjzyo+7eaWGaSYv84U7BFlTNb+WpXi69CBv7ePMCYjLNKXhQ1KwTFvQ999ElM8vmySPrNOXWpLZHH1CXg8FTVSeygBVs46r8ztR2VEEeLJ0rmXtDBRDYmCNb4yiXCTsnRtlLqeYeNUf5ClqmcJlZebfrRvY5F6s0VRZeoB9D4ZDP8L+LXxLA4EE9bfL9rWCnaMCSL9V9xyXNluuvy7pk4XSIKU36dBHJSEtW6yVln1y7gaJ8BQrvw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4247.eurprd03.prod.outlook.com (2603:10a6:20b:7::26) 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:28:20 +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:28:20 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:17 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [jZGZIsBqv9ymQz0EcHIO+y4dp8IzCYxJ] 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-8-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 49276df0-6c73-417c-1cd5-08d9e3b9b5a9 X-MS-TrafficTypeDiagnostic: AM6PR03MB4247:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PlizJ2IOavJ9JomRWCcQLmok3sTYLuPWxjY+tlDs4BQX2kIVqYcJd65rRocuUodJxlrtTjs+6Ynay+jppVI/3q4eAr915vJqJT6LyRevdZPsgunxjFuhAPsE/AYNgZF+PHe5+RQTbag3PZQKKJGsE/sYiL3U/CrDec1NsTPOHUPzfJBp6PABKtsS6ooqc2yNGA5v1YMEC+olnQiTaoUNmhyfOy6s7Mzuez8KfOtr8MamglXvukermDpKkE2eeUwW03OILLYlqy7pWzsmdpa5GqmMzSm0I1hHi7Gto9a8DAFCFwZXmHC9iZ88d26Y6K5BoGIXtqT9chkM2L1/BGZHfcIWimoNWEjnegFI7m5RbwIt8sm2NxvAH47dtROE7LzLCzL4XqLNoQK6dh0dEyiii57iIPrleyi9ZK/1FYjbPg9xKkcI9r0tpB0GImuxeLQAY/6JxCeK8O4AHGm81SvZZHfOm4fIPpD6inYPgwvHVCgfJDF+/akPBpcKXswfqkXHDd6CtaSjQ40mkOxGQX7pNq/t8G+QxHa2dH2+HuwN6dtUNaakbF+yN7vAAXfj9/EF X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: htXfhmYPiIob7vDPAXA0EPW022buqFpz6F6wzayfNL2dm64HEAHxkZDogjqOHa+QG4ZcNCQ4ak5CkGEwS9k59maUbUfwn8AyHuBh5T9hdReccWJGNuJg0CsnPPrTiBL55wvcZ6kmyJNjWjjxODMPmiFNQ0LsIFC8bUzSJymfDR7vTw9rhgoW0mkaMqFSVCKQ0AL0p+56+JgepW4wNGfKolm4XUl2rcN2z1/FCyA7Y3zrC46swKGHlzr3TEKUoh5osNGul1Ud3ZMF2JX3EGc5LkDGeDLzhoLLhBefLXvYC0jiuT9V8qCZGWj+Usvr5UBlSDywPn20Z9WED1veB5IhGgB8qXZMUCDxPcLRL98nlyMgLhmgpqQALRFlzNChrGlXr8/jH11We4c0izRPhHeh3EwSJTZcnDMPN5nG5HDOBANU1tkYhiepfM0bLptAD26XlfOIG+ZA1uz3WJIPWzLvQD4u/iv4VqoTfKQjN5NTbNlGalaQyd8YE8L4JttAGltrIL9KwTwjH7XPKpf4EyCHwZpXU0B/ohaS1reZQT5K6fPPyOkwd/7aSNQyYfeMtfZXRLGs+VZ1zQ4YT2Oo9neeSZOnGo3NmtY1gfDBpfu+HbpewuuHlwJmW11suFxVBtYRk6Dq7ZwEI4JBCLDT2XaIGEKBc9TgPmwJbzFpl5PsrI1ipcATnGozEgE6xmUCRKVFjyuM6M2mJHBExsPBYgqUCMYxQimTbZdt9fFF8KSSJ9cJCCC0pcfGpg50WbDSkOUEkIMVqcN+th4g0J5iKGrywHinwduQ5XPD+PL8+HMYI54W0zKodvlh1xdJgBnzv3AQnvHWnigr1Uuv2ZHfw1aMgCMnvRQxG6C0F39smG8k5DPHgBtbkdGP2tEPVRh51g47lSmrPMB7sa0zZJKAHfcoBJA44evrScJk2L9mNuMQMc07/GKJZ10sNpiZiux0IPe6Fq3R5bS9fJfBuQAmjCY7kw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 49276df0-6c73-417c-1cd5-08d9e3b9b5a9 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:28:20.7880 (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: AM6PR03MB4247 Subject: [FFmpeg-devel] [PATCH 09/41] avcodec/wmv2: Split Wmv2Context into decoder and encoder context 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: UfLC0AGOkOme Signed-off-by: Andreas Rheinhardt --- libavcodec/wmv2.c | 6 ++--- libavcodec/wmv2.h | 26 +++--------------- libavcodec/wmv2dec.c | 64 +++++++++++++++++++++++++++++++------------- libavcodec/wmv2enc.c | 29 +++++++++++++++----- 4 files changed, 73 insertions(+), 52 deletions(-) diff --git a/libavcodec/wmv2.c b/libavcodec/wmv2.c index 57e1267782..8d1d117dea 100644 --- a/libavcodec/wmv2.c +++ b/libavcodec/wmv2.c @@ -25,9 +25,9 @@ #include "wmv2.h" -av_cold void ff_wmv2_common_init(Wmv2Context *w) +av_cold void ff_wmv2_common_init(MpegEncContext *s) { - MpegEncContext *const s = &w->s; + WMV2Context *const w = s->private_ctx; ff_blockdsp_init(&s->bdsp, s->avctx); ff_wmv2dsp_init(&w->wdsp); @@ -52,7 +52,7 @@ void ff_mspel_motion(MpegEncContext *s, uint8_t *dest_y, uint8_t **ref_picture, op_pixels_func (*pix_op)[4], int motion_x, int motion_y, int h) { - Wmv2Context *const w = (Wmv2Context *) s; + WMV2Context *const w = s->private_ctx; uint8_t *ptr; int dxy, mx, my, src_x, src_y, v_edge_pos; ptrdiff_t offset, linesize, uvlinesize; diff --git a/libavcodec/wmv2.h b/libavcodec/wmv2.h index 1798dbabcd..4001093881 100644 --- a/libavcodec/wmv2.h +++ b/libavcodec/wmv2.h @@ -21,9 +21,6 @@ #ifndef AVCODEC_WMV2_H #define AVCODEC_WMV2_H -#include "libavutil/mem_internal.h" - -#include "intrax8.h" #include "mpegvideo.h" #include "wmv2dsp.h" @@ -33,29 +30,12 @@ #define SKIP_TYPE_COL 3 -typedef struct Wmv2Context { - MpegEncContext s; - IntraX8Context x8; +typedef struct WMV2Context { WMV2DSPContext wdsp; - int j_type_bit; - int j_type; - int abt_flag; - int abt_type; - int abt_type_table[6]; - int per_mb_abt; - int per_block_abt; - int mspel_bit; - int cbp_table_index; - int top_left_mv_flag; - int per_mb_rl_bit; - int skip_type; int hshift; +} WMV2Context; - ScanTable abt_scantable[2]; - DECLARE_ALIGNED(32, int16_t, abt_block2)[6][64]; -} Wmv2Context; - -void ff_wmv2_common_init(Wmv2Context *w); +void ff_wmv2_common_init(MpegEncContext *s); int ff_wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64]); int ff_wmv2_encode_picture_header(MpegEncContext * s, int picture_number); diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c index dd0e2683f5..f9d91f9571 100644 --- a/libavcodec/wmv2dec.c +++ b/libavcodec/wmv2dec.c @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/mem_internal.h" + #include "avcodec.h" #include "h263dec.h" #include "internal.h" @@ -31,8 +33,28 @@ #include "wmv2.h" #include "wmv2data.h" - -static void wmv2_add_block(Wmv2Context *w, int16_t *block1, +typedef struct WMV2DecContext { + MpegEncContext s; + WMV2Context common; + IntraX8Context x8; + int j_type_bit; + int j_type; + int abt_flag; + int abt_type; + int abt_type_table[6]; + int per_mb_abt; + int per_block_abt; + int mspel_bit; + int cbp_table_index; + int top_left_mv_flag; + int per_mb_rl_bit; + int skip_type; + + ScanTable abt_scantable[2]; + DECLARE_ALIGNED(32, int16_t, abt_block2)[6][64]; +} WMV2DecContext; + +static void wmv2_add_block(WMV2DecContext *w, int16_t *block1, uint8_t *dst, int stride, int n) { MpegEncContext *const s = &w->s; @@ -40,7 +62,7 @@ static void wmv2_add_block(Wmv2Context *w, int16_t *block1, if (s->block_last_index[n] >= 0) { switch (w->abt_type_table[n]) { case 0: - w->wdsp.idct_add(dst, stride, block1); + w->common.wdsp.idct_add(dst, stride, block1); break; case 1: ff_simple_idct84_add(dst, stride, block1); @@ -61,7 +83,7 @@ static void wmv2_add_block(Wmv2Context *w, int16_t *block1, void ff_wmv2_add_mb(MpegEncContext *s, int16_t block1[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr) { - Wmv2Context *const w = (Wmv2Context *) s; + WMV2DecContext *const w = (WMV2DecContext *) s; wmv2_add_block(w, block1[0], dest_y, s->linesize, 0); wmv2_add_block(w, block1[1], dest_y + 8, s->linesize, 1); @@ -75,7 +97,7 @@ void ff_wmv2_add_mb(MpegEncContext *s, int16_t block1[6][64], wmv2_add_block(w, block1[5], dest_cr, s->uvlinesize, 5); } -static int parse_mb_skip(Wmv2Context *w) +static int parse_mb_skip(WMV2DecContext *w) { int mb_x, mb_y; int coded_mb_count = 0; @@ -140,7 +162,7 @@ static int parse_mb_skip(Wmv2Context *w) return 0; } -static int decode_ext_header(Wmv2Context *w) +static int decode_ext_header(WMV2DecContext *w) { MpegEncContext *const s = &w->s; GetBitContext gb; @@ -180,7 +202,7 @@ static int decode_ext_header(Wmv2Context *w) int ff_wmv2_decode_picture_header(MpegEncContext *s) { - Wmv2Context *const w = (Wmv2Context *) s; + WMV2DecContext *const w = (WMV2DecContext *) s; int code; if (s->picture_number == 0) @@ -215,7 +237,7 @@ int ff_wmv2_decode_picture_header(MpegEncContext *s) int ff_wmv2_decode_secondary_picture_header(MpegEncContext *s) { - Wmv2Context *const w = (Wmv2Context *) s; + WMV2DecContext *const w = (WMV2DecContext *) s; if (s->pict_type == AV_PICTURE_TYPE_I) { if (w->j_type_bit) @@ -323,19 +345,19 @@ int ff_wmv2_decode_secondary_picture_header(MpegEncContext *s) return 0; } -static inline void wmv2_decode_motion(Wmv2Context *w, int *mx_ptr, int *my_ptr) +static inline void wmv2_decode_motion(WMV2DecContext *w, int *mx_ptr, int *my_ptr) { MpegEncContext *const s = &w->s; ff_msmpeg4_decode_motion(s, mx_ptr, my_ptr); if ((((*mx_ptr) | (*my_ptr)) & 1) && s->mspel) - w->hshift = get_bits1(&s->gb); + w->common.hshift = get_bits1(&s->gb); else - w->hshift = 0; + w->common.hshift = 0; } -static int16_t *wmv2_pred_motion(Wmv2Context *w, int *px, int *py) +static int16_t *wmv2_pred_motion(WMV2DecContext *w, int *px, int *py) { MpegEncContext *const s = &w->s; int xy, wrap, diff, type; @@ -380,7 +402,7 @@ static int16_t *wmv2_pred_motion(Wmv2Context *w, int *px, int *py) return mot_val; } -static inline int wmv2_decode_inter_block(Wmv2Context *w, int16_t *block, +static inline int wmv2_decode_inter_block(WMV2DecContext *w, int16_t *block, int n, int cbp) { MpegEncContext *const s = &w->s; @@ -422,7 +444,9 @@ static inline int wmv2_decode_inter_block(Wmv2Context *w, int16_t *block, int ff_wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64]) { - Wmv2Context *const w = (Wmv2Context *) s; + /* The following is only allowed because this encoder + * does not use slice threading. */ + WMV2DecContext *const w = (WMV2DecContext *) s; int cbp, code, i, ret; uint8_t *coded_val; @@ -440,7 +464,7 @@ int ff_wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64]) s->mv[0][0][0] = 0; s->mv[0][0][1] = 0; s->mb_skipped = 1; - w->hshift = 0; + w->common.hshift = 0; return 0; } if (get_bits_left(&s->gb) <= 0) @@ -537,14 +561,16 @@ int ff_wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64]) static av_cold int wmv2_decode_init(AVCodecContext *avctx) { - Wmv2Context *const w = avctx->priv_data; + WMV2DecContext *const w = avctx->priv_data; MpegEncContext *const s = &w->s; int ret; + s->private_ctx = &w->common; + if ((ret = ff_msmpeg4_decode_init(avctx)) < 0) return ret; - ff_wmv2_common_init(w); + ff_wmv2_common_init(s); ff_init_scantable(s->idsp.idct_permutation, &w->abt_scantable[0], ff_wmv2_scantableA); ff_init_scantable(s->idsp.idct_permutation, &w->abt_scantable[1], @@ -557,7 +583,7 @@ static av_cold int wmv2_decode_init(AVCodecContext *avctx) static av_cold int wmv2_decode_end(AVCodecContext *avctx) { - Wmv2Context *w = avctx->priv_data; + WMV2DecContext *const w = avctx->priv_data; ff_intrax8_common_end(&w->x8); return ff_h263_decode_end(avctx); @@ -568,7 +594,7 @@ const AVCodec ff_wmv2_decoder = { .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 8"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_WMV2, - .priv_data_size = sizeof(Wmv2Context), + .priv_data_size = sizeof(WMV2DecContext), .init = wmv2_decode_init, .close = wmv2_decode_end, .decode = ff_h263_decode_frame, diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c index ab5365d1f6..a7827f3194 100644 --- a/libavcodec/wmv2enc.c +++ b/libavcodec/wmv2enc.c @@ -25,8 +25,21 @@ #include "msmpeg4data.h" #include "wmv2.h" - -static int encode_ext_header(Wmv2Context *w) +typedef struct WMV2EncContext { + MpegEncContext s; + WMV2Context common; + int j_type_bit; + int j_type; + int abt_flag; + int abt_type; + int per_mb_abt; + int mspel_bit; + int cbp_table_index; + int top_left_mv_flag; + int per_mb_rl_bit; +} WMV2EncContext; + +static int encode_ext_header(WMV2EncContext *w) { MpegEncContext *const s = &w->s; PutBitContext pb; @@ -54,12 +67,14 @@ static int encode_ext_header(Wmv2Context *w) static av_cold int wmv2_encode_init(AVCodecContext *avctx) { - Wmv2Context *const w = avctx->priv_data; + WMV2EncContext *const w = avctx->priv_data; + MpegEncContext *const s = &w->s; + s->private_ctx = &w->common; if (ff_mpv_encode_init(avctx) < 0) return -1; - ff_wmv2_common_init(w); + ff_wmv2_common_init(&w->s); avctx->extradata_size = 4; avctx->extradata = av_mallocz(avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); @@ -73,7 +88,7 @@ static av_cold int wmv2_encode_init(AVCodecContext *avctx) int ff_wmv2_encode_picture_header(MpegEncContext *s, int picture_number) { - Wmv2Context *const w = (Wmv2Context *) s; + WMV2EncContext *const w = (WMV2EncContext *) s; put_bits(&s->pb, 1, s->pict_type - 1); if (s->pict_type == AV_PICTURE_TYPE_I) @@ -147,7 +162,7 @@ int ff_wmv2_encode_picture_header(MpegEncContext *s, int picture_number) void ff_wmv2_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y) { - Wmv2Context *const w = (Wmv2Context *) s; + WMV2EncContext *const w = (WMV2EncContext *) s; int cbp, coded_cbp, i; int pred_x, pred_y; uint8_t *coded_block; @@ -220,7 +235,7 @@ const AVCodec ff_wmv2_encoder = { .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_WMV2, .priv_class = &ff_mpv_enc_class, - .priv_data_size = sizeof(Wmv2Context), + .priv_data_size = sizeof(WMV2EncContext), .init = wmv2_encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, From patchwork Sun Jan 30 06:27:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33913 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770360iov; Sat, 29 Jan 2022 22:30:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJx4PHBiuztQTKOS7xu5V4cYwMB0khQlUX3iTkptpsbgPgOBR3tiBSpr5LtS6HgcUiKFkw70 X-Received: by 2002:a05:6402:490:: with SMTP id k16mr15311174edv.204.1643524203057; Sat, 29 Jan 2022 22:30:03 -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 ht19si1651017ejc.953.2022.01.29.22.30.02; Sat, 29 Jan 2022 22:30:03 -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=RUGyDO1+; 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 DED1468B18B; Sun, 30 Jan 2022 08:28:30 +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-oln040092074101.outbound.protection.outlook.com [40.92.74.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 307D368B167 for ; Sun, 30 Jan 2022 08:28:24 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FUhcPG6TAeS8rIl842lEpKVQ8wNvYlcyyuukaqaLfbhx6ApB4+Sg6M5GAZiqZIsaAB1qXBQTpeX1r4qWT0eB4oJa2hvgHLqfS0x5rQbHt+vULOa8ravilxkwyejAJNmzI22IXZ/FFfVYdwQdDcCa8vd0oKy11brLPOc23taRWKnxFGVPQ4I4bZcYxKLS34+HWZD3nHjd/hhU7iyxrUMyEVXorcKzFaSkwyI4N63kZR+sL+UTqLh3ya6LB73xaSTH2ojL7mHu+m+uDEt1AsN2bPec+Mi5wr+xWufHMS5xRZ9x+FfM9UeJqu6DlFmnrBHuq4DTo7h1LwQm9laQalqrOg== 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=N5+65sZgwzhWD8Vc9gie2LatzSRNiLQeapJmzfMlDfs=; b=i0iB2cHF7atxpNXhHuhP6EkBpyT02UW3bZDr6QC0N7O5sqanNV5pJGn8O7qAX//NH/Wg9L2VJifkPd9ER1FW7ssE27XkF+eOsu9YnkjmtgO8C/LffacwTAvKKEqGu9hVWXyoyvkyu80Qxy61PsUeAYHrhzx1cOTohKIoqwbwO2w4s6PMiDHI5Saievqdqrt2TU+QGCSys8ZWvSUFcweBGqJ90zMnaGjnlfxvhP+t4W56B76nFnHtE1ns4JrpmgMHRTt6jmYhnH9Asj8qwEa+Lj+Uhg8U7VtCYTFtfSOLFWRr+qrP7ef37wWp6wK/mDuzAye+aL7K52X3UkUivTVQQA== 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=N5+65sZgwzhWD8Vc9gie2LatzSRNiLQeapJmzfMlDfs=; b=RUGyDO1+EMBVY20gRXYVCwjRQrJJWoNi2egSYePh4X1DduUaUat+NonSgHNzrkiWNbZfdEmP7OmnjuZNgJtCtMx/IyAnKnFDehXCejs8RfHLh5WG4AzED8jrtCmzvLkmwlxZViMyddXoqKviildK3IbfuOykIhGfvffARGLKWqyWDrJ2gBfhrlC/7YmoFBuN9DAVpSzE/g8j5ET6TnPZkLy0J0PMcvdL90I8Tp0K4seUU+RaozZzeKLuU542AI91EatYvX7O0WCx3s/sxyJiZcCd1Yw24be71Be9Vv3z9T7XaMo4NtyA+hj1P6wr4TC60/+f881QRvhtVvFFadb2ng== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4247.eurprd03.prod.outlook.com (2603:10a6:20b:7::26) 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:28:23 +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:28:23 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:18 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [uj3pMsBGxBThoKUoIVNu+CD5gEd5FLwK] 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-9-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: db7d7db1-e829-4d64-06e5-08d9e3b9b719 X-MS-TrafficTypeDiagnostic: AM6PR03MB4247:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9Tl8AQ/k4yL15JyjCN7gIuH+E9mOoVFvD8VByHBdHqfdIzSWrg8+jagOo5L2eDiv7MbAaJYOgfQjXMGJS2MtpyuM2dhvXhkKYxdP0qZcynlovV02rPeBIOLIuPwR+mPq8aU312UQhfXdOZBNbMOQYO+Qlt/mREn86Vh7GwSL6L+fdPhWczAjNMMlZRTanaSzNo0grke0Ait5cgevK3xYWAaZkb1KT+KMOqtfF6R34wd7Ttet2HP9UDi3fri3uzKu3SwCTiMeglvG1xR+AulIuKH2VBkEacAyUZpdXsgA4rd6FX6UMKTLYAKISq9bzg95b907AZDur8o0mBRvHjva4KyPUfBnl1SSr5+z7LTxWwa4KGXI2N5V05IOLqscJ/lvnYHjPXxDkK8ql9EpPqtF9sP4RyFsniNTVtnu4yglGc9fm38Tfef8JtzqdioYAhc3wkPHdrqPYLj1Ql720X/vI+ojhPUKFxXTQLFTEiGRtE07PYcNEdoffAtpMspb4PSKtHeuXsJ9l8tpInisScPSV1usRhDCovbbYwQNE/b1dHzDSmmjxl1WkCHe97XUtaZ2 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KgDn4mwEQhulvwe+cpFWjGDE1PAusxZ0fPOI8KJoxHa3TCfGXbXVz6kKe6PEdsGf87OUJz7F+hEr06jMmDDC5jb9/fE44FRD8sizMG0/2qeM65LUjky/dAgJnK32wMVsnjv/k0443trTYZMM5BzFnDNb/U2kuZb5ERR3GHswGEeao4B4fQVmauxDnrfjVqQTf6173+iwv8tThkYVA1PcAjSjdHg83yWaqFu/jp6rJCFdISMGRZIy5bG0Au0fRQshxri2yjTDt/lGUvdW4Ts0ScCrxmMXlYVfupuitOppyGZADjekx4+QGF4gxzLEKcQ8RdfZOPNAkkiR2EAPJAmEMczLwMYTEc906PojZHP1AefcCCIWSivWphpc2mAkul/CFPXzOvoC1JzllLdEHB0JoE7vKRQBv1erVkjGcQsmN6tVPrCKNGt7EqtUsS4JrLOkTMaKW8td9+0fXOP00IrC/50VWfD5GHNZ+78+vZK+yF9aFTgrBFn3mwtIFNATTu2k8NO0zv74VfFhMcz6cYRH7zay3ucysQF2ACxLKTV3VTiNd2QoZ2azH/DdGDDdtIiU7OcgWKcM1mw5MwMAbOB8kYPhAyiyLnCwz/P/9BIio4ssA4wYFtEQQeBPd4c8VhYCIibEJRl8YAcOHMu5ZhPISueQ++rt3XFWtoZKTpWtMTRk5bnNRNMN3indvw0Q4gYf0Jde/ynV8gg+iyF7rnDN6DCrPffRYDL2wDkwU9tBBXWNGH6gL9y1YECt3UtQ15yRG9ypLSyCQjeAVaaseFiVgmwq159x/TNxiWPwxySHvqAjG2xMJ6yUsPkf6Cxlu5TjST6fg1/ETuzPg0ytQyY7Hs9PxNq1n+SSXI6dnqJkFGvrluvuULjbr+S8gGi3U2asWH/fg0sCCPYf6M81qTmj6R+XG1QUQWm2AtCBBvYflswANhhly+JlKt+5z9IDUi33tH61ROnAx8Ro/HJIJCjI7A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: db7d7db1-e829-4d64-06e5-08d9e3b9b719 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:28:23.0753 (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: AM6PR03MB4247 Subject: [FFmpeg-devel] [PATCH 10/41] avcodec/msmpeg4.h: Move encoder-only stuff to a new header 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: Wb7HzKykQgWX Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_enc.c | 2 +- libavcodec/msmpeg4.h | 15 ------------- libavcodec/msmpeg4enc.c | 1 + libavcodec/msmpeg4enc.h | 45 ++++++++++++++++++++++++++++++++++++++ libavcodec/wmv2enc.c | 1 + 5 files changed, 48 insertions(+), 16 deletions(-) create mode 100644 libavcodec/msmpeg4enc.h diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 6df2a46eaa..4bc78841ac 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -56,7 +56,7 @@ #include "mpegutils.h" #include "mjpegenc.h" #include "speedhqenc.h" -#include "msmpeg4.h" +#include "msmpeg4enc.h" #include "pixblockdsp.h" #include "qpeldsp.h" #include "faandct.h" diff --git a/libavcodec/msmpeg4.h b/libavcodec/msmpeg4.h index 483c965b9d..dbe650cbbc 100644 --- a/libavcodec/msmpeg4.h +++ b/libavcodec/msmpeg4.h @@ -28,7 +28,6 @@ #include "avcodec.h" #include "mpegvideo.h" #include "msmpeg4data.h" -#include "put_bits.h" #define INTER_INTRA_VLC_BITS 3 #define MB_NON_INTRA_VLC_BITS 9 @@ -42,20 +41,10 @@ extern VLC ff_mb_non_intra_vlc[4]; extern VLC ff_inter_intra_vlc; -void ff_msmpeg4_code012(PutBitContext *pb, int n); void ff_msmpeg4_common_init(MpegEncContext *s); -void ff_msmpeg4_encode_block(MpegEncContext * s, int16_t * block, int n); -void ff_msmpeg4_handle_slices(MpegEncContext *s); -void ff_msmpeg4_encode_motion(MpegEncContext * s, int mx, int my); int ff_msmpeg4_coded_block_pred(MpegEncContext * s, int n, uint8_t **coded_block_ptr); -void ff_msmpeg4_encode_init(MpegEncContext *s); -void ff_msmpeg4_encode_picture_header(MpegEncContext *s, int picture_number); -void ff_msmpeg4_encode_ext_header(MpegEncContext *s); -void ff_msmpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], - int motion_x, int motion_y); - int ff_msmpeg4_decode_init(AVCodecContext *avctx); int ff_msmpeg4_decode_picture_header(MpegEncContext *s); int ff_msmpeg4_decode_ext_header(MpegEncContext *s, int buf_size); @@ -72,9 +61,5 @@ int ff_msmpeg4_pred_dc(MpegEncContext *s, int n, CONFIG_WMV1_DECODER || \ CONFIG_WMV2_DECODER || \ CONFIG_VC1_DECODER) -#define CONFIG_MSMPEG4_ENCODER (CONFIG_MSMPEG4V2_ENCODER || \ - CONFIG_MSMPEG4V3_ENCODER || \ - CONFIG_WMV1_ENCODER || \ - CONFIG_WMV2_ENCODER) #endif /* AVCODEC_MSMPEG4_H */ diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c index 2c619e1210..31920b7f0d 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -39,6 +39,7 @@ #include "mpeg4video.h" #include "msmpeg4.h" #include "msmpeg4data.h" +#include "msmpeg4enc.h" #include "put_bits.h" #include "rl.h" #include "vc1data.h" diff --git a/libavcodec/msmpeg4enc.h b/libavcodec/msmpeg4enc.h new file mode 100644 index 0000000000..12f8f44232 --- /dev/null +++ b/libavcodec/msmpeg4enc.h @@ -0,0 +1,45 @@ +/* + * MSMPEG4 encoder header + * copyright (c) 2007 Aurelien Jacobs + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_MSMPEG4ENC_H +#define AVCODEC_MSMPEG4ENC_H + +#include "config.h" +#include "mpegvideo.h" +#include "put_bits.h" + +void ff_msmpeg4_encode_init(MpegEncContext *s); +void ff_msmpeg4_encode_picture_header(MpegEncContext *s, int picture_number); +void ff_msmpeg4_encode_ext_header(MpegEncContext *s); +void ff_msmpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], + int motion_x, int motion_y); +void ff_msmpeg4_encode_block(MpegEncContext * s, int16_t * block, int n); +void ff_msmpeg4_handle_slices(MpegEncContext *s); +void ff_msmpeg4_encode_motion(MpegEncContext * s, int mx, int my); + +void ff_msmpeg4_code012(PutBitContext *pb, int n); + +#define CONFIG_MSMPEG4_ENCODER (CONFIG_MSMPEG4V2_ENCODER || \ + CONFIG_MSMPEG4V3_ENCODER || \ + CONFIG_WMV1_ENCODER || \ + CONFIG_WMV2_ENCODER) + +#endif diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c index a7827f3194..6036a0dec9 100644 --- a/libavcodec/wmv2enc.c +++ b/libavcodec/wmv2enc.c @@ -22,6 +22,7 @@ #include "h263.h" #include "mpegvideo.h" #include "msmpeg4.h" +#include "msmpeg4enc.h" #include "msmpeg4data.h" #include "wmv2.h" From patchwork Sun Jan 30 06:27:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33905 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770225iov; Sat, 29 Jan 2022 22:29:42 -0800 (PST) X-Google-Smtp-Source: ABdhPJx0sHugwrxNAfkW3nqwVEtiXG637ldrBYm3E0OwtM9GaugB/FJ0mhi3vWtw1C3fu/qSV/E/ X-Received: by 2002:a17:907:1b21:: with SMTP id mp33mr12910588ejc.374.1643524182438; Sat, 29 Jan 2022 22:29:42 -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 p24si6223359ejn.56.2022.01.29.22.29.42; Sat, 29 Jan 2022 22:29:42 -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=Fvnv18nM; 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 1B6AE68B0E1; Sun, 30 Jan 2022 08:28:29 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2063.outbound.protection.outlook.com [40.92.90.63]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0A0AC68B158 for ; Sun, 30 Jan 2022 08:28:26 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lGGiF0rQZOtdc6SbmJafW50XMz1dFnL+mMovOc5gVNuy5SwdrabwgUMUSuPP5q8qYbVsyFxQGUgNSlGkHF0mvhlAy5azsnGK0szYBQURlYfreMltnMsPvdk9FD6EWoC7OugFaUh7x8++GHwv9qWAFx2kXoBb7pOmLZl24RLLjxR+VABq1E+IPj9BYwUmhuYoUpvK+m4disp5pwvrokJi0bChzR+al1NUYTL1Q6cQG7oIdWHCNsilJAd5HrkHhSG29Y5ezajAe1gGC11YArkXcBk8YHYdNNfxIJNHN1j2w82e5uy3/7fMTzKdw0mfbSRmmV8Wmf4961+KsL+rxSuq4g== 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=uiHiAgKTJFGRrSj2Ff7TtJkyNBNJKffTUpMsetshyTk=; b=YHk2seUaSoFEjqjY6R138dhrdvuG3+JSJESwE1al/pQ8f9F02+AHrwRsdtmBWbsxgQyCo+e7lDSun6MLAFpYcjFZMsmrcEad8hIGnq1VUIsbHbmazgeZvQ0OJI+aGSMkTkz7d8Uxfgj/+M9fhVUXYVHYBH7KWFcQYeunXzHuRUWKSIdg+c64SZlPafp9nYNgsuwSHiDqWiF9YZLnHjPOZlf6FEKpwcmp2ZD/0+gIw/ned0eIAFLcKcoM85VwnkI4SMfe0mqEv6uZc61Bw1djOK39l1mwOQyEmD9E6rycRB+Ea5y2Piv11J4cmach/cookKYggyZYRrftzv060aHJnw== 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=uiHiAgKTJFGRrSj2Ff7TtJkyNBNJKffTUpMsetshyTk=; b=Fvnv18nM/6nW1JXMEAwBugZkt7MC2VxGbxl19+l9t5o++Y04o98+cKGe5p3AlGBWdDSnkZfY6k+ez7tIZoU4ZHvo2KS/rGhvvzkp+ck6MIiSC6KcYCtHal/v6iuM92TOcwJgAZ5GOw35rcjmJFNlk+8bb6HzTRTgOyBVoYm7uKqrCvPF+dPu3O5CO5k3E6aMrmaDth7tR/7sDQLCWUnoeb2giszrZAz9GLJtTTI0L9q7Qh83i4v1UCsUj9MufYiEvQm9O+uo129a1zdSh24N0RUomgN+aiFWLdua5vZUcg1GOT3kksBSyMtMFc7zeryt7A32nQXZEt/cUR5WJd7baw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:25 +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:28:24 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:19 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [kgGbs0zs+R+iUcMBVnVJGmrC+fhYzYXz] 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-10-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 27a2a1fb-8267-43b3-0e15-08d9e3b9b835 X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hOtNH3v7Bvo35rn75DGM8KLqqCg672eYTKtXycy07FjbcxGWPeEkCSYDTO+uHBrztdNJmQ5N8vNWmvh19QyPR6HdR2KGmSyEWTaHkTFJHn//lFbZQdOLjV0s66nuKK3/nFNSLJbBT/I/ifTZvTXDsoi5vlDL4x4vgEN85UZDSNQkNM+YFmej6sSc1r3tVpZvgR/IAOUbZbT5qxqntZL8ZIxp/5LRPTX8dOds8COUNk4wgljKxG36KQz4iTy06FmvEfEPwlm2wGAgk/4QhK8Fehwd29t+fWnjH3Aj0LxBBb+uaRK8lPNdqXLrhwIfdBSpycFbT926XLihgn58kyFwKsMnagqraakU0j6c9uunlCs3ljZFCeh0QntuaMM9976giJ9QRX5wOJInvibMk3tZIhCtucq3GPzEWLUtcqEcGvs2xKOtZPAVenrP/pz7IkqS2IQo/ZiXRNrbrNKJArxCpyu4Dmnl1AZEbn5XuAz8VH1NgtQGxcUhP8eiRCkjWNkY9/ccImV0EfVs3mOSdVxjEyehp3Vab3AkB48vkAwkz9+UqmobNU9IOn9RxMACd4nl X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: b0kSGa5aBfbgnP9YVCxx5BPN4ApJxkoAGjixL3rrGyGMbUpd5AbDR8EOwF0y/1mk0+7PEPARE/K0UE5mYk+5q4O4kQhJkvO9dAAp5f1W0xqmWReGHtWs/X9UsqtzEZiH9310xAeC6YFjS61WCywloLs46omLEUW2IP1WCX/YdQGyI7rDFeQdf4GSEgKahdW4GSHusIOkQrWSrqapiCo2rN+U/LTV4Q3UHKe2TY2q70bkQz3mvJiF1bWaJyBqDqQ5nJ81PmDPAhvHZUa5bOdzM1b9K73RFjwU4w0NYOCx40pibRc/cOYXaIS1XCsYhaFfyOEqptQSkwgW3/cISFPsdXHOJLj/aq54L7ikZK0QMwBbk3P8pK5S//DhNmcVkrWtMHasAm1KacZ/xSwypdm3I0jeiGuMsKMrtFdeaZx38u5CVDSz56E6crM7RkH0bLZxjFO1uf2IvfA9uwOAwDv2uRdAVIY69ZZ2dna8/aM13u1g3DYocnTYBJ9XKTmqNUiH2AGlt4hGH4fHP+768EaxgHnkYyiDubz3aAiCRRYovCVjPvrJ4Va3CGP1IECcNKMjEhnjtJHV+Btj6dDpcp2O2CCOJ9OJAQFQmaPT02i3/qczfDTYaOGvKRJdUmOW0wigMqBjIGR7EusGHFeq8U7zfGv5RXMZlkS8JNus+ZkuB8JR+dq4x8rK1n2J5/CM0Bnp8n+jigXx/k1knE47vPQIQcFlMdOWb5pCtT2/xf3haGiOo/HeoKsIlXniKgcuCtdHFI99lMDiLXqu4qzFuBUYaZoLcvg/FLqPbrAPrmHnCKAcFZ5HZy3OXkr/uBYH08gw/PJ84eM3qvb5hlgcWuBDi9NNwidW1ulNu0Oml97ZsSU+uBdY0ig9/fEmVTZMTGIq9e63ss8sNz14IElLdBVeBF8CBJSZEktfq6+gPGI0FTlSeC2J2mu1pu7A5Z54ucT7QPsgmfxCiAla+2pAP1i3dg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 27a2a1fb-8267-43b3-0e15-08d9e3b9b835 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:28:24.9356 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 11/41] avcodec/msmpegenc: Add MSMPEG4EncContext and move ac_stats to it 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: YvX+7tRj4Uqd Also avoid the allocation by making it part of the context. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 2 -- libavcodec/mpegvideo_enc.c | 7 ------- libavcodec/msmpeg4enc.c | 26 +++++++++++++++----------- libavcodec/msmpeg4enc.h | 8 ++++++++ libavcodec/wmv2enc.c | 8 ++++---- 5 files changed, 27 insertions(+), 24 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 5e406b9a9c..f5c9789fea 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -422,8 +422,6 @@ typedef struct MpegEncContext { int per_mb_rl_table; int esc3_level_length; int esc3_run_length; - /** [mb_intra][isChroma][level][run][last] */ - int (*ac_stats)[2][MAX_LEVEL+1][MAX_RUN+1][2]; int inter_intra_pred; int mspel; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 4bc78841ac..0e38824cca 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -813,12 +813,6 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) ff_pixblockdsp_init(&s->pdsp, avctx); ff_qpeldsp_init(&s->qdsp); - if (s->msmpeg4_version) { - int ac_stats_size = 2 * 2 * (MAX_LEVEL + 1) * (MAX_RUN + 1) * 2 * sizeof(int); - if (!(s->ac_stats = av_mallocz(ac_stats_size))) - return AVERROR(ENOMEM); - } - if (!(avctx->stats_out = av_mallocz(256)) || !FF_ALLOCZ_TYPED_ARRAY(s->q_intra_matrix, 32) || !FF_ALLOCZ_TYPED_ARRAY(s->q_chroma_intra_matrix, 32) || @@ -944,7 +938,6 @@ av_cold int ff_mpv_encode_end(AVCodecContext *avctx) ff_mpv_picture_free(avctx, &s->new_picture); av_freep(&avctx->stats_out); - av_freep(&s->ac_stats); 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/msmpeg4enc.c b/libavcodec/msmpeg4enc.c index 31920b7f0d..c436f78f9d 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -148,8 +148,9 @@ av_cold void ff_msmpeg4_encode_init(MpegEncContext *s) ff_thread_once(&init_static_once, msmpeg4_encode_init_static); } -static void find_best_tables(MpegEncContext * s) +static void find_best_tables(MSMPEG4EncContext *ms) { + MpegEncContext *const s = &ms->s; int i; int best = 0, best_size = INT_MAX; int chroma_best = 0, best_chroma_size = INT_MAX; @@ -169,9 +170,9 @@ static void find_best_tables(MpegEncContext * s) int last; const int last_size= size + chroma_size; for(last=0; last<2; last++){ - int inter_count = s->ac_stats[0][0][level][run][last] + s->ac_stats[0][1][level][run][last]; - int intra_luma_count = s->ac_stats[1][0][level][run][last]; - int intra_chroma_count= s->ac_stats[1][1][level][run][last]; + int inter_count = ms->ac_stats[0][0][level][run][last] + ms->ac_stats[0][1][level][run][last]; + int intra_luma_count = ms->ac_stats[1][0][level][run][last]; + int intra_chroma_count= ms->ac_stats[1][1][level][run][last]; if(s->pict_type==AV_PICTURE_TYPE_I){ size += intra_luma_count *rl_length[i ][level][run][last]; @@ -197,7 +198,7 @@ static void find_best_tables(MpegEncContext * s) if(s->pict_type==AV_PICTURE_TYPE_P) chroma_best= best; - memset(s->ac_stats, 0, sizeof(int)*(MAX_LEVEL+1)*(MAX_RUN+1)*2*2*2); + memset(ms->ac_stats, 0, sizeof(ms->ac_stats)); s->rl_table_index = best; s->rl_chroma_table_index= chroma_best; @@ -215,7 +216,9 @@ static void find_best_tables(MpegEncContext * s) /* write MSMPEG4 compatible frame header */ void ff_msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number) { - find_best_tables(s); + MSMPEG4EncContext *const ms = (MSMPEG4EncContext*)s; + + find_best_tables(ms); align_put_bits(&s->pb); put_bits(&s->pb, 2, s->pict_type - 1); @@ -553,6 +556,7 @@ static void msmpeg4_encode_dc(MpegEncContext * s, int level, int n, int *dir_ptr * escape coding (same as H.263) and more VLC tables. */ void ff_msmpeg4_encode_block(MpegEncContext * s, int16_t * block, int n) { + MSMPEG4EncContext *const ms = (MSMPEG4EncContext*)s; int level, run, last, i, j, last_index; int last_non_zero, sign, slevel; int code, run_diff, dc_pred_dir; @@ -603,10 +607,10 @@ void ff_msmpeg4_encode_block(MpegEncContext * s, int16_t * block, int n) } if(level<=MAX_LEVEL && run<=MAX_RUN){ - s->ac_stats[s->mb_intra][n>3][level][run][last]++; + ms->ac_stats[s->mb_intra][n>3][level][run][last]++; } - s->ac_stats[s->mb_intra][n > 3][40][63][0]++; //esc3 like + ms->ac_stats[s->mb_intra][n > 3][40][63][0]++; //esc3 like code = get_rl_index(rl, last, run, level); put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]); @@ -679,7 +683,7 @@ const AVCodec ff_msmpeg4v2_encoder = { .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .priv_class = &ff_mpv_enc_class, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MSMPEG4EncContext), .init = ff_mpv_encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, @@ -693,7 +697,7 @@ const AVCodec ff_msmpeg4v3_encoder = { .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .priv_class = &ff_mpv_enc_class, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MSMPEG4EncContext), .init = ff_mpv_encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, @@ -707,7 +711,7 @@ const AVCodec ff_wmv1_encoder = { .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .priv_class = &ff_mpv_enc_class, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MSMPEG4EncContext), .init = ff_mpv_encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, diff --git a/libavcodec/msmpeg4enc.h b/libavcodec/msmpeg4enc.h index 12f8f44232..98044913b1 100644 --- a/libavcodec/msmpeg4enc.h +++ b/libavcodec/msmpeg4enc.h @@ -25,6 +25,14 @@ #include "config.h" #include "mpegvideo.h" #include "put_bits.h" +#include "rl.h" + +typedef struct MSMPEG4EncContext { + MpegEncContext s; + + /** [mb_intra][isChroma][level][run][last] */ + unsigned ac_stats[2][2][MAX_LEVEL + 1][MAX_RUN + 1][2]; +} MSMPEG4EncContext; void ff_msmpeg4_encode_init(MpegEncContext *s); void ff_msmpeg4_encode_picture_header(MpegEncContext *s, int picture_number); diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c index 6036a0dec9..d6962448a6 100644 --- a/libavcodec/wmv2enc.c +++ b/libavcodec/wmv2enc.c @@ -27,7 +27,7 @@ #include "wmv2.h" typedef struct WMV2EncContext { - MpegEncContext s; + MSMPEG4EncContext msmpeg4; WMV2Context common; int j_type_bit; int j_type; @@ -42,7 +42,7 @@ typedef struct WMV2EncContext { static int encode_ext_header(WMV2EncContext *w) { - MpegEncContext *const s = &w->s; + MpegEncContext *const s = &w->msmpeg4.s; PutBitContext pb; int code; @@ -69,13 +69,13 @@ static int encode_ext_header(WMV2EncContext *w) static av_cold int wmv2_encode_init(AVCodecContext *avctx) { WMV2EncContext *const w = avctx->priv_data; - MpegEncContext *const s = &w->s; + MpegEncContext *const s = &w->msmpeg4.s; s->private_ctx = &w->common; if (ff_mpv_encode_init(avctx) < 0) return -1; - ff_wmv2_common_init(&w->s); + ff_wmv2_common_init(s); avctx->extradata_size = 4; avctx->extradata = av_mallocz(avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); From patchwork Sun Jan 30 06:27:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33907 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770284iov; Sat, 29 Jan 2022 22:29:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJxJL73QY3DpuCs71m66G8YPrgxMuOLaKzu2F6j2tpLOegWQGw4e9hkwQjPHZiND9X+wCGhc X-Received: by 2002:a17:906:99c3:: with SMTP id s3mr13171841ejn.696.1643524192819; Sat, 29 Jan 2022 22:29:52 -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 go12si5889309ejc.4.2022.01.29.22.29.52; Sat, 29 Jan 2022 22:29:52 -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=GmT5YnSq; 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 F173E68B180; Sun, 30 Jan 2022 08:28:29 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2063.outbound.protection.outlook.com [40.92.90.63]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 32C2C68B10D for ; Sun, 30 Jan 2022 08:28:27 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I/6LEi13tH60o9kHp0TsP7imPz68vdC9xp4WAhrQTSWr0F43c3f0PEviFwtperDjAS3tb35b+lSScQztyfmSaErN7mIWG7EN6X/jo2PPluCWsVz6naIj2Luy+hT7CSLLn3SsQbxx0TVVvzKYGS71Ce9T7g6OWhWX6R/o/7OHa1CU5RpAzsnS9VfOsLDU1WMEiUyRYIjbZs/BY/YjYdrUcc45Levfo83FTPJHC8TWwTemfwisvucJBGQfKtKXxIGLzFQJFwT/xj9LqMcLLvWqvhKHWHxZ1TeOgC8nv59LGSB92PXE8JBzgSM4aOowoHad8PSU6cm+rmH8yxgqxqypXA== 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=1x1l4k7cXiV2pw5ziidNoRrUCclCxOeI06oZBAzYMJU=; b=aTh2NmQdmZLTLlWhUFDx7mRB4e1dG437GQo4r/RaCZ3GxrmL9CvH1xZdai9npjZo8YhEG2nYdhAO89LuOqD+zKK4GHAhNifJy1Mq8UtHRLQG25zVt2wgu9PakMxNS03U9uWeT5f4lP9jKEMIuuEPQpiT+NgNkdpPrrsuUU2TI8Rq8SJ14DsMz+6MgKThDap7o5tum+aapZdDSazYG1zg5wgtwQWGbHs1cFZDtgSUz3IFP99zPDkCE30msO3mQTmeWbtMJanhUh14XKbie0LY362WeV0MdmIbTASVgDds6H2Sajjfl32GzwzWOzNmGzsMqK9AAa+iq154+2PuMRimnQ== 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=1x1l4k7cXiV2pw5ziidNoRrUCclCxOeI06oZBAzYMJU=; b=GmT5YnSqImXoGn9oDg0bOHS2WhfIiScgxE5G26DCbdoESSxnjgMY9FYsuu47Ti0FCoYD4T5IeOaN6ZqpF1a51a5HPN4Tva7YiWBjHX5NyN3DMK8UbaNqxhrvinyx9x8kWCEQkg59ANNunPGLgiHs1EpNUi6TSWvsAg2f7meOHY+N3WAAFc2R40OYZv/l2jNf32UJ8EQTfGPYGUs4e30Rbdk+g/06FwltQjcXfq46KywqV/pHjaz9mZswgGmesgsedpjBV3OTV+LrFmIwYYdIY+kp2Rxh8iZP4h7hUaAjLI4UECzDK1925NwJKc6AGFHtS3heTJ1cMTYgbiDmlvHHTA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:26 +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:28:26 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:20 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [WAeBdTZ2KL7BZSZC+g1tzufHCApfFZaG] 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-11-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cb20b4b0-b93d-45a8-63ce-08d9e3b9b909 X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SVWxbvjEyDBhOkLag3RgX+vsijSCQwxIVC5dO2avcZOuNlQOlnHP4nWd/a5qBRuWPoo4rXpJK1bDJBnupatXR3eQk/kcZU9L8WuK3sDiTkkZFzRYWa6DLeY0A8HgmMcf8tigjGgDKP+mm2VFguqWt1cdkB/aDI0TeOIhIbIKsHigzRjqpCkDjxZqHFKM3cBj4ASpLvsYzijthPwd02e2MU0UNAkbFojliVNQdgJzd0/I2jWF6t1hZluevgX3N+M3lvU0M8HGj6lVa+fzuxsLSNW7HFwc/8GVoUm2PMJENYec5+MKksvJh8MEhNE0kEDREBl/dZXh4lEqNUQrABZ3oa7JRZJiyxFNXbWLsWN+v1ZJmyrgbegZF7uBQT3mT9JWAjibIMKI0oX9feoHasYH0TyP8QhzzKlrb5TySzDZrhU2BFCZSZ/Uzo28b5aEvwoz4vEv1wZeTXXYj8OCRgo1BquEfAZWzYKSr/tA8tlG0mBQaybtMRSUIIDBJHW19ODbL+BzJLvQ68o8LY1+E0ZaQwUv2uoINMMyUt0SXM8JKhVitdfiR+uqkkvLzCvG1e/1 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XFDRuIXS4VyK0rkx+MK+OOT8zqF1Y76RwNVv5JwoWpDhb9zWQdjxVSvyHltOG7gQjP4D15vIRhQjDaf5ImhhBMUtFuNTWjGFgVwjJQlcBJOIgkdriP08ZkNkYzZp8Cwb4aWp/1Ace2w2YUhJJpDmb+9RtlHQM4qTlWUsC/t/omQGzUmFUxZQoUTc1+GnOMQoWF268GIN69JoNHag5zJYW4zejJ2XL3/m4daotDC9+u6EMZbGXK80OuVSBUnXe2oGleFDT4CpdtC2lpL9a+WBMWIQZn1RsHaBtMsvmrpmJmxd7jx4IkJslDec8v3cWYxwc5DPSi+vbUEAUVokRIe+VTDsTbB5/+bLV6nNW9+qZaDI2bTohw90fwzcyKBZISEDgK2pm3qLMB79md8Jysg6uInodIDWElB44Fyn5NXaUnzhd04hopvOsK63enSXpG1i2LvXg1fu1jzp4Q/Ixjh7fP7jDRB8Dimd3S1YvalsS2Ov+wlFZuqzUKhx37Tn2rBCVfCxUEGaKPUMGIVprFe83wuz3CXH0mt/TIAOF1Fz+NyNY00L3vqe1F+uEf1deAnbajbPof5EHtE1X+lZJtzUSO37Ek+oJR2ppmuvMP+X1GjS3U6RZdB5s8pgLwR1aVOmEnM9f2WAueD7IdJo43Hthgt7MPz2rD2EFwX/Hvq9XavALm5xKQOQ+t6xcN7wgyjsO9YmfQvDop762iHayaJ+vzIwHuagbPgew0ArOo2ovAVlltaLXDr6uwziVtHGxvKMyHOAlGnVU9IyzhIDQ859fqOEez1mz9Q45P4sitrQMcgPoiL2ipIGnpF1oXmdWeSz1Lm5zrzbjmulOLuPsrb+FRMD5BsQzV8a7d750WxrEJSi0wuaVK+ZNRUhJwMxZnPHLUZY65Fdfn4FmFwp6HyOOxapYfFX7orGCiOdkrK+4PyxYIPAXB4Z221MFPj55AXabhtDVOZ3I4nHjaPtRukRmg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: cb20b4b0-b93d-45a8-63ce-08d9e3b9b909 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:28:26.4835 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 12/41] avcodec/h263.h: Move encoder-only stuff to a new header h263enc.h 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: yb4nO36FNATu Signed-off-by: Andreas Rheinhardt --- libavcodec/h263.h | 99 ---------------------------- libavcodec/h263enc.h | 130 +++++++++++++++++++++++++++++++++++++ libavcodec/ituh263enc.c | 1 + libavcodec/mpeg4videodec.c | 1 + libavcodec/mpeg4videoenc.c | 1 + libavcodec/mpegvideo_enc.c | 1 + libavcodec/msmpeg4dec.c | 1 + libavcodec/msmpeg4enc.c | 1 + libavcodec/rv20enc.c | 2 +- libavcodec/snowenc.c | 2 +- libavcodec/svq1enc.c | 1 + 11 files changed, 139 insertions(+), 101 deletions(-) create mode 100644 libavcodec/h263enc.h diff --git a/libavcodec/h263.h b/libavcodec/h263.h index 6dd5d2295a..5e4a5bc6e5 100644 --- a/libavcodec/h263.h +++ b/libavcodec/h263.h @@ -20,119 +20,20 @@ #ifndef AVCODEC_H263_H #define AVCODEC_H263_H -#include #include "libavutil/rational.h" #include "mpegvideo.h" -#include "h263data.h" #define FF_ASPECT_EXTENDED 15 #define H263_GOB_HEIGHT(h) ((h) <= 400 ? 1 : (h) <= 800 ? 2 : 4) av_const int ff_h263_aspect_to_info(AVRational aspect); -void ff_h263_encode_mb(MpegEncContext *s, - int16_t block[6][64], - int motion_x, int motion_y); -void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number); -void ff_h263_encode_gob_header(MpegEncContext * s, int mb_line); int16_t *ff_h263_pred_motion(MpegEncContext * s, int block, int dir, int *px, int *py); -void ff_h263_encode_init(MpegEncContext *s); void ff_h263_init_rl_inter(void); void ff_h263_update_motion_val(MpegEncContext * s); void ff_h263_loop_filter(MpegEncContext * s); -void ff_h263_encode_mba(MpegEncContext *s); -void ff_init_qscale_tab(MpegEncContext *s); -void ff_clean_h263_qscales(MpegEncContext *s); -void ff_h263_encode_motion(PutBitContext *pb, int val, int f_code); - - -static inline int h263_get_motion_length(int val, int f_code){ - int bit_size, code, sign; - - if (val == 0) { - return 1; /* ff_mvtab[0][1] */ - } else { - bit_size = f_code - 1; - /* modulo encoding */ - val = sign_extend(val, 6 + bit_size); - sign = val >> 31; - val = (val ^ sign) - sign; /* val = FFABS(val) */ - val--; - code = (val >> bit_size) + 1; - - return ff_mvtab[code][1] + 1 + bit_size; - } -} - -static inline void ff_h263_encode_motion_vector(MpegEncContext * s, int x, int y, int f_code){ - if (s->avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) { - skip_put_bits(&s->pb, - h263_get_motion_length(x, f_code) - +h263_get_motion_length(y, f_code)); - }else{ - ff_h263_encode_motion(&s->pb, x, f_code); - ff_h263_encode_motion(&s->pb, y, f_code); - } -} - -static inline int get_p_cbp(MpegEncContext * s, - int16_t block[6][64], - int motion_x, int motion_y){ - int cbp, i; - - if (s->mpv_flags & FF_MPV_FLAG_CBP_RD) { - int best_cbpy_score= INT_MAX; - int best_cbpc_score= INT_MAX; - int cbpc = (-1), cbpy= (-1); - const int offset= (s->mv_type==MV_TYPE_16X16 ? 0 : 16) + (s->dquant ? 8 : 0); - const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6); - - for(i=0; i<4; i++){ - int score= ff_h263_inter_MCBPC_bits[i + offset] * lambda; - if(i&1) score += s->coded_score[5]; - if(i&2) score += s->coded_score[4]; - - if(score < best_cbpc_score){ - best_cbpc_score= score; - cbpc= i; - } - } - - for(i=0; i<16; i++){ - int score= ff_h263_cbpy_tab[i ^ 0xF][1] * lambda; - if(i&1) score += s->coded_score[3]; - if(i&2) score += s->coded_score[2]; - if(i&4) score += s->coded_score[1]; - if(i&8) score += s->coded_score[0]; - - if(score < best_cbpy_score){ - best_cbpy_score= score; - cbpy= i; - } - } - cbp= cbpc + 4*cbpy; - if ((motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16){ - if(best_cbpy_score + best_cbpc_score + 2*lambda >= 0) - cbp= 0; - } - - for (i = 0; i < 6; i++) { - if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i))&1)==0 ){ - s->block_last_index[i]= -1; - s->bdsp.clear_block(s->block[i]); - } - } - }else{ - cbp= 0; - for (i = 0; i < 6; i++) { - if (s->block_last_index[i] >= 0) - cbp |= 1 << (5 - i); - } - } - return cbp; -} #endif /* AVCODEC_H263_H */ diff --git a/libavcodec/h263enc.h b/libavcodec/h263enc.h new file mode 100644 index 0000000000..31f00665ce --- /dev/null +++ b/libavcodec/h263enc.h @@ -0,0 +1,130 @@ +/* + * H.263 encoder header + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef AVCODEC_H263ENC_H +#define AVCODEC_H263ENC_H + +#include +#include "h263data.h" +#include "mpegvideo.h" + +void ff_h263_encode_init(MpegEncContext *s); +void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number); +void ff_h263_encode_gob_header(MpegEncContext * s, int mb_line); +void ff_h263_encode_mb(MpegEncContext *s, + int16_t block[6][64], + int motion_x, int motion_y); +void ff_h263_encode_mba(MpegEncContext *s); + +void ff_init_qscale_tab(MpegEncContext *s); +void ff_clean_h263_qscales(MpegEncContext *s); + +void ff_h263_encode_motion(PutBitContext *pb, int val, int f_code); + + +static inline int h263_get_motion_length(int val, int f_code) +{ + int bit_size, code, sign; + + if (val == 0) { + return 1; /* ff_mvtab[0][1] */ + } else { + bit_size = f_code - 1; + /* modulo encoding */ + val = sign_extend(val, 6 + bit_size); + sign = val >> 31; + val = (val ^ sign) - sign; /* val = FFABS(val) */ + val--; + code = (val >> bit_size) + 1; + + return ff_mvtab[code][1] + 1 + bit_size; + } +} + +static inline void ff_h263_encode_motion_vector(MpegEncContext * s, + int x, int y, int f_code) +{ + if (s->avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) { + skip_put_bits(&s->pb, + h263_get_motion_length(x, f_code) + + h263_get_motion_length(y, f_code)); + } else { + ff_h263_encode_motion(&s->pb, x, f_code); + ff_h263_encode_motion(&s->pb, y, f_code); + } +} + +static inline int get_p_cbp(MpegEncContext * s, + int16_t block[6][64], + int motion_x, int motion_y){ + int cbp; + + if (s->mpv_flags & FF_MPV_FLAG_CBP_RD) { + int best_cbpy_score = INT_MAX; + int best_cbpc_score = INT_MAX; + int cbpc = (-1), cbpy = (-1); + const int offset = (s->mv_type == MV_TYPE_16X16 ? 0 : 16) + (s->dquant ? 8 : 0); + const int lambda = s->lambda2 >> (FF_LAMBDA_SHIFT - 6); + + for (int i = 0; i < 4; i++) { + int score = ff_h263_inter_MCBPC_bits[i + offset] * lambda; + if (i & 1) score += s->coded_score[5]; + if (i & 2) score += s->coded_score[4]; + + if (score < best_cbpc_score) { + best_cbpc_score = score; + cbpc = i; + } + } + + for (int i = 0; i < 16; i++) { + int score= ff_h263_cbpy_tab[i ^ 0xF][1] * lambda; + if (i & 1) score += s->coded_score[3]; + if (i & 2) score += s->coded_score[2]; + if (i & 4) score += s->coded_score[1]; + if (i & 8) score += s->coded_score[0]; + + if (score < best_cbpy_score) { + best_cbpy_score = score; + cbpy = i; + } + } + cbp = cbpc + 4 * cbpy; + if (!(motion_x | motion_y | s->dquant) && s->mv_type == MV_TYPE_16X16) { + if (best_cbpy_score + best_cbpc_score + 2 * lambda >= 0) + cbp= 0; + } + + for (int i = 0; i < 6; i++) { + if (s->block_last_index[i] >= 0 && !((cbp >> (5 - i)) & 1)) { + s->block_last_index[i] = -1; + s->bdsp.clear_block(s->block[i]); + } + } + } else { + cbp = 0; + for (int i = 0; i < 6; i++) { + if (s->block_last_index[i] >= 0) + cbp |= 1 << (5 - i); + } + } + return cbp; +} + +#endif diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c index 9253d60a16..70ac1f643b 100644 --- a/libavcodec/ituh263enc.c +++ b/libavcodec/ituh263enc.c @@ -35,6 +35,7 @@ #include "mpegvideo.h" #include "mpegvideodata.h" #include "h263.h" +#include "h263enc.h" #include "h263data.h" #include "mathops.h" #include "mpegutils.h" diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index 2aea845580..c0eaa00eba 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -36,6 +36,7 @@ #include "mpeg4video.h" #include "mpeg4videodata.h" #include "h263.h" +#include "h263data.h" #include "h263dec.h" #include "profiles.h" #include "thread.h" diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c index 27e16c3b72..8a1a6cbcc8 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -27,6 +27,7 @@ #include "mpegutils.h" #include "mpegvideo.h" #include "h263.h" +#include "h263enc.h" #include "mpeg4video.h" #include "mpeg4videodata.h" #include "profiles.h" diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 0e38824cca..5717b7422e 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -51,6 +51,7 @@ #include "h261.h" #include "h263.h" #include "h263data.h" +#include "h263enc.h" #include "mjpegenc_common.h" #include "mathops.h" #include "mpegutils.h" diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c index 3d2dcb9429..77ad8a8ff4 100644 --- a/libavcodec/msmpeg4dec.c +++ b/libavcodec/msmpeg4dec.c @@ -29,6 +29,7 @@ #include "msmpeg4.h" #include "libavutil/imgutils.h" #include "h263.h" +#include "h263data.h" #include "h263dec.h" #include "mpeg4video.h" #include "msmpeg4data.h" diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c index c436f78f9d..16e19083da 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -35,6 +35,7 @@ #include "libavutil/thread.h" #include "mpegvideo.h" #include "h263.h" +#include "h263enc.h" #include "internal.h" #include "mpeg4video.h" #include "msmpeg4.h" diff --git a/libavcodec/rv20enc.c b/libavcodec/rv20enc.c index 19b6aab278..204cd03a24 100644 --- a/libavcodec/rv20enc.c +++ b/libavcodec/rv20enc.c @@ -27,8 +27,8 @@ #include "mpegvideo.h" #include "mpegvideodata.h" -#include "h263.h" #include "h263data.h" +#include "h263enc.h" #include "put_bits.h" #include "rv10.h" diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index df31eb8132..e169ae601d 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -34,7 +34,7 @@ #include "mathops.h" #include "mpegvideo.h" -#include "h263.h" +#include "h263enc.h" static av_cold int encode_init(AVCodecContext *avctx) { diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c index 11cbd97185..9cef3d8ef6 100644 --- a/libavcodec/svq1enc.c +++ b/libavcodec/svq1enc.c @@ -32,6 +32,7 @@ #include "me_cmp.h" #include "mpegvideo.h" #include "h263.h" +#include "h263enc.h" #include "internal.h" #include "mpegutils.h" #include "packet_internal.h" From patchwork Sun Jan 30 06:27:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33914 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770450iov; Sat, 29 Jan 2022 22:30:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJyt0dcRUSs/nEhwCdckVX9R+5b/PZHmBk7cW8AvtwBh+tPBB4XbnBz9B9XmCoM1M93hwS2O X-Received: by 2002:a17:907:16a3:: with SMTP id hc35mr13174619ejc.299.1643524212959; Sat, 29 Jan 2022 22:30: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 nc37si6146007ejc.697.2022.01.29.22.30.12; Sat, 29 Jan 2022 22:30: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=n4BIUDPE; 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 EDD0F68B1A8; Sun, 30 Jan 2022 08:28:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2086.outbound.protection.outlook.com [40.92.90.86]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0B20468B18C for ; Sun, 30 Jan 2022 08:28:30 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RAHMGVaxV1SQnfPi7fK0/RR7QBQOhiA6r/XP33d/0ESAO+A2W53StJJF8eYGTlPjyfEL+KquQXfapPHGkoEb1H7Lq+QGvNHm1sxIoBefCyOBXy3pMmC2/OnHJjGVW/RTv8HJQeiKLc13Sd7LjpkGuX1h3z6oO447ZD/FlPqAuXVjyRLKQIOI5KQaHGwOqg+GJko10UgVZNxgvCO1ctWWnwdbdPO9PszWUx+NM6Ovt1qCO/zVt3juGWGY7Ns3MruF3VWyl6StzVRSF829p31tv/GVedVvg3Phaxr+FcauDr6XN9WOZDYF1HlzYO6KxshTo/2cyiFu5ATqGaGSxbkd+A== 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=l6uHVUI4KyVGxT9r11YLx2MerrKBr4EFbkRTzAX9MVo=; b=U8NUSPYD2zRSpJRfK3+9qfcazqIiMUFKJ3r0AIxdSle6Eo8msCHdS7I6mQbPaz5CCFUTO6FhUQrp9tEfWshgKJKyuQXN7KrjOKDN51t+32yJ5kTyo8gDjj/7qYQgR75UeEUlChatybGUX+L90KB1km+aFPMuo3adzL8kWUg7GZLdJmNXLTaGgCJkHaS7rYAljxmu9Obc9LEQ6bnVraU+Yg6+DCsTmZ2ykaq4/0RL54u/3swrS2Qbls4EvVNuf6S1WYkqM6Y2k0UvofqdIrumIwJdj0cMDtQVyW5g5qAd+hm5wuOL8OaGfKxklqB3u7OeLIkFoc8vH5kFmbPIYlXu3w== 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=l6uHVUI4KyVGxT9r11YLx2MerrKBr4EFbkRTzAX9MVo=; b=n4BIUDPEi+UYLDcplI4B29CXd1ad+u5QgMA23hAfbtjBeB8iGiAMub0fa9Kf5Sr1JJG0rKfSUtQaZvbClUaiatG6pjD+KRrBIzQJDvzZVhz7ALNOfILfzztvo2WxbNTZkqk+cF9+OKs9eltVlTrnF1A+ASE0D9Wx8iEdJMFzEeRDODpcXUa+6pqGt+dhG/ze2KLsAzJxmmW8XPCHS7yLxknGKYO0jOQOmt8E9uwMcgF8Qai9vuigBJsNc6n5/XsZ5rGBN00LUqYJYTmluBinvrSEcGjgbRmHjtpMnQWwNYRSq2CD5pfANXLlcoWIBiHwkAn7u0rgUkJEbBXOEsvhOA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:28 +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:28:28 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:21 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [0upNtHp1xzE9gxKzup49I5Tdof/z6BzH] 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-12-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1bd0966e-40ee-44b4-9df7-08d9e3b9ba0f X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: byCBFlADPphQwdlzyCuqZTDd26HwurW/srcvrt2aEvXV+21/C6tSQ9l2OBCs//OphXp1E7ydLNe7sxd2Z4MQTYzMeFNkKrJZ7mhemECs2eFE8bbQs7nx4ORnOk+eUw6sL4dBrm9XqBz6OGzZxySU5BzCk+FnUM4YPMTGbJ3XboyQJNTqRIwJR8yzAge+odM1phyqqWlg6jPZ6ZsFgLlqjwA6nzofLGrc1Z1JwOsDSBeE6eyHI+sOP1hQb8uePFIi22v/ahn9ndSXQ/d8VhqLC8HVmRvIGw+1PoBnKXnazFnQoNqVbZu1OM8McFnuwC/fCBbxKauGwLtfAFbjk97pIyBHufP/FsoxKGk48tuoFqrh2o7txSQqkFOiuNerA+PVD9Oirc2TMgB4KlIvdCBZ7/x8kUlxw/NhyNfk4XHI0ox6EDej+XeH8RgdDr+lwavuCGxSEBp9/l8bLobCSx2YIzMuesrUWzH0tvmcKS5kicjxJKnb1IOl7Iib42JeoFQFlRZdMB/K35gUxb7j8I1LLwmBuaT4I0OoYT0jycIU9sPIF/d1rLa7xku5Rj/gD/0t X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: S+otLHIYSWfS2ew8F+sRMbitqi92vya7yPLhknNNS3oF1Z255pGU10JjrpIRbfVSy1DlworI/v4r4j/gMdOrySOpKCfqfn+2xlF1if6KGuc/LJ9b7tu+aSpHca87TlVhlOgoYW8BN9GSxgWjvSWnw1n18c/x+GHdJx3O5Iv4wo9KcgX8xm0+hfF6roAq2eOAbn49VGMpYadTtdTX9WliRI2DAjbmrL+VIXQMKZawnWHaueI0eT+0RP/zH9Zd5viabpOe1QxZOXIQf5vt3KK0IRLzlUwM+vsJSXHfmKvUxhx82LepOvBgiXZwF0KpCjXWen6DK/AC7fZN3eYRnCKIK+R60RifSx3066yEZ/ykdOzntKS8DTZHyAKNBtbXrGEC+K8qSXwvQqxDfjwXovtKGDGf5npedN1Fxc4Ex380SC3H6aw7e/Hk7DBBaQJh+tSDGD7SmHE6uDndTsp1Vm7bxoXI19S8Jd9Aj1mifnrEcCzfYmAg1hweqeMR56PehGxYrYF9dog4i6ZTUtNBIBQYyjuPe67ANChQ5kyLx6iLmb8XUx+fPY1k2MRI83ss5lV04Fhf9ryd77U4Bxm9t9IQRyct7OPoUC8laLcaxPUieVK18xtXj1abdXDJCAi6kJ47twnWWCJLOPrux5gNiWcuWxGYjF0KKQ/CSZE5524fSUAf34UTDE3gXsrEZ3CxYii8+6jWMqDjgNi3+2TXzefY2tR1hOgUmxfgDHuRuDKise+SSiRuh4EblHpBbvAXfNDLfYC1KtU7wMsG08vHJnkA/XEi1pS4ixfd8lGn8N1NU0a7nky8R/vHvtsvresVX3kwDfAe95BTn/wWG8ojNvazscPAe6RsHrk6JILB9ejrqedggyAT9+bo9DBnrHdTPh1VHMu4a0EMvl39LXDsHdp/FAWP+ZgbrN/qUHWNHPBJ4J9ivhFhEVsZE3j12Po9+Nas3AA4m20Ed1QiOvtgyQwsGQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1bd0966e-40ee-44b4-9df7-08d9e3b9ba0f 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:28:28.1706 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 13/41] avcodec/mpegvideo: Move encoder-only stuff to a new header 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: vS8n/vtXccvY Signed-off-by: Andreas Rheinhardt --- libavcodec/dnxhdenc.c | 1 + libavcodec/flvdec.c | 1 + libavcodec/flvenc.c | 1 + libavcodec/h261enc.c | 1 + libavcodec/h263enc.h | 2 +- libavcodec/intelh263dec.c | 1 + libavcodec/ituh263enc.c | 1 + libavcodec/libxavs2.c | 2 + libavcodec/mdec.c | 1 + libavcodec/mjpegenc.c | 1 + libavcodec/motion_est.c | 2 +- libavcodec/mpeg12.h | 1 + libavcodec/mpeg12enc.c | 1 + libavcodec/mpeg4videoenc.c | 1 + libavcodec/mpegvideo.h | 126 ------------------------- libavcodec/mpegvideo_enc.c | 1 + libavcodec/mpegvideoenc.h | 161 ++++++++++++++++++++++++++++++++ libavcodec/msmpeg4enc.c | 1 + libavcodec/nvdec_mpeg12.c | 1 + libavcodec/nvdec_mpeg4.c | 1 + libavcodec/ratecontrol.c | 2 +- libavcodec/rv10enc.c | 1 + libavcodec/rv20enc.c | 1 + libavcodec/rv30.c | 1 + libavcodec/rv40.c | 1 + libavcodec/speedhqenc.c | 1 + libavcodec/vaapi_encode_mpeg2.c | 2 + libavcodec/wmv2enc.c | 1 + libavcodec/x86/mpegvideoenc.c | 2 +- 29 files changed, 190 insertions(+), 130 deletions(-) create mode 100644 libavcodec/mpegvideoenc.h diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c index ca67964330..ac92474e56 100644 --- a/libavcodec/dnxhdenc.c +++ b/libavcodec/dnxhdenc.c @@ -34,6 +34,7 @@ #include "fdctdsp.h" #include "internal.h" #include "mpegvideo.h" +#include "mpegvideoenc.h" #include "pixblockdsp.h" #include "packet_internal.h" #include "profiles.h" diff --git a/libavcodec/flvdec.c b/libavcodec/flvdec.c index 2bd86b5b47..108cf88e34 100644 --- a/libavcodec/flvdec.c +++ b/libavcodec/flvdec.c @@ -22,6 +22,7 @@ #include "flv.h" #include "h263dec.h" +#include "internal.h" #include "mpegvideo.h" #include "mpegvideodata.h" diff --git a/libavcodec/flvenc.c b/libavcodec/flvenc.c index 158b399c40..6824327734 100644 --- a/libavcodec/flvenc.c +++ b/libavcodec/flvenc.c @@ -22,6 +22,7 @@ #include "h263data.h" #include "mpegvideo.h" #include "mpegvideodata.h" +#include "mpegvideoenc.h" void ff_flv_encode_picture_header(MpegEncContext *s, int picture_number) { diff --git a/libavcodec/h261enc.c b/libavcodec/h261enc.c index 7e3af1ff9e..710d292df6 100644 --- a/libavcodec/h261enc.c +++ b/libavcodec/h261enc.c @@ -33,6 +33,7 @@ #include "mpegvideo.h" #include "h261.h" #include "mpegvideodata.h" +#include "mpegvideoenc.h" static uint8_t uni_h261_rl_len [64*64*2*2]; #define UNI_ENC_INDEX(last,run,level) ((last)*128*64 + (run)*128 + (level)) diff --git a/libavcodec/h263enc.h b/libavcodec/h263enc.h index 31f00665ce..fff85a18f2 100644 --- a/libavcodec/h263enc.h +++ b/libavcodec/h263enc.h @@ -22,7 +22,7 @@ #include #include "h263data.h" -#include "mpegvideo.h" +#include "mpegvideoenc.h" void ff_h263_encode_init(MpegEncContext *s); void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number); diff --git a/libavcodec/intelh263dec.c b/libavcodec/intelh263dec.c index 9dde247298..b61effa4df 100644 --- a/libavcodec/intelh263dec.c +++ b/libavcodec/intelh263dec.c @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "internal.h" #include "mpegutils.h" #include "mpegvideo.h" #include "h263data.h" diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c index 70ac1f643b..ef7caf8009 100644 --- a/libavcodec/ituh263enc.c +++ b/libavcodec/ituh263enc.c @@ -34,6 +34,7 @@ #include "avcodec.h" #include "mpegvideo.h" #include "mpegvideodata.h" +#include "mpegvideoenc.h" #include "h263.h" #include "h263enc.h" #include "h263data.h" diff --git a/libavcodec/libxavs2.c b/libavcodec/libxavs2.c index 9c5a576e90..4742b18f9f 100644 --- a/libavcodec/libxavs2.c +++ b/libavcodec/libxavs2.c @@ -24,8 +24,10 @@ #include "xavs2.h" #include "encode.h" +#include "internal.h" #include "mpeg12.h" #include "libavutil/avstring.h" +#include "libavutil/opt.h" #define xavs2_opt_set2(name, format, ...) do{ \ char opt_str[16] = {0}; \ diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c index 007e7fada8..f340bdf385 100644 --- a/libavcodec/mdec.c +++ b/libavcodec/mdec.c @@ -33,6 +33,7 @@ #include "blockdsp.h" #include "bswapdsp.h" #include "idctdsp.h" +#include "internal.h" #include "mpeg12.h" #include "mpeg12data.h" #include "thread.h" diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 6a47503ab4..b9b17a50df 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -39,6 +39,7 @@ #include "mpegvideo.h" #include "mjpeg.h" #include "mjpegenc.h" +#include "mpegvideoenc.h" #include "profiles.h" /* The following is the private context of MJPEG/AMV decoder. diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c index 5b0958733c..35ca40b90a 100644 --- a/libavcodec/motion_est.c +++ b/libavcodec/motion_est.c @@ -36,7 +36,7 @@ #include "mathops.h" #include "motion_est.h" #include "mpegutils.h" -#include "mpegvideo.h" +#include "mpegvideoenc.h" #define P_LEFT P[1] #define P_TOP P[2] diff --git a/libavcodec/mpeg12.h b/libavcodec/mpeg12.h index fb2b37e7c8..7ab2527a36 100644 --- a/libavcodec/mpeg12.h +++ b/libavcodec/mpeg12.h @@ -24,6 +24,7 @@ #include "mpeg12vlc.h" #include "mpegvideo.h" +#include "rl.h" /* Start codes. */ #define SEQ_END_CODE 0x000001b7 diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c index 9c0be69ded..3ec3ac1860 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -43,6 +43,7 @@ #include "mpeg12data.h" #include "mpegutils.h" #include "mpegvideo.h" +#include "mpegvideoenc.h" #include "profiles.h" #if CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c index 8a1a6cbcc8..d09e20605d 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -30,6 +30,7 @@ #include "h263enc.h" #include "mpeg4video.h" #include "mpeg4videodata.h" +#include "mpegvideoenc.h" #include "profiles.h" /* The uni_DCtab_* tables below contain unified bits+length tables to encode DC diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index f5c9789fea..18d2d0902f 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -39,7 +39,6 @@ #include "h263dsp.h" #include "hpeldsp.h" #include "idctdsp.h" -#include "internal.h" #include "me_cmp.h" #include "motion_est.h" #include "mpegpicture.h" @@ -54,11 +53,8 @@ #endif #include "mpegutils.h" #include "qpeldsp.h" -#include "rl.h" #include "videodsp.h" -#include "libavutil/opt.h" - #define MAX_THREADS 32 #define MAX_B_FRAMES 16 @@ -558,101 +554,6 @@ typedef struct MpegEncContext { #endif } MpegEncContext; -/* mpegvideo_enc common options */ -#define FF_MPV_FLAG_SKIP_RD 0x0001 -#define FF_MPV_FLAG_STRICT_GOP 0x0002 -#define FF_MPV_FLAG_QP_RD 0x0004 -#define FF_MPV_FLAG_CBP_RD 0x0008 -#define FF_MPV_FLAG_NAQ 0x0010 -#define FF_MPV_FLAG_MV0 0x0020 - -#define FF_MPV_OPT_CMP_FUNC \ -{ "sad", "Sum of absolute differences, fast", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "sse", "Sum of squared errors", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "satd", "Sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SATD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "dct", "Sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "psnr", "Sum of squared quantization errors, low quality", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_PSNR }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "bit", "Number of bits needed for the block", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_BIT }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "rd", "Rate distortion optimal, slow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_RD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "zero", "Zero", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_ZERO }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "vsad", "Sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "vsse", "Sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "nsse", "Noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_NSSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "dct264", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT264 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_CHROMA }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "msad", "Sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" } - -#ifndef FF_MPV_OFFSET -#define FF_MPV_OFFSET(x) offsetof(MpegEncContext, x) -#endif -#define FF_MPV_OPT_FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) -#define FF_MPV_COMMON_OPTS \ -FF_MPV_OPT_CMP_FUNC, \ -{ "mpv_flags", "Flags common for all mpegvideo-based encoders.", FF_MPV_OFFSET(mpv_flags), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "skip_rd", "RD optimal MB level residual skipping", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_SKIP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "strict_gop", "Strictly enforce gop size", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_STRICT_GOP }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "qp_rd", "Use rate distortion optimization for qp selection", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_QP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "cbp_rd", "use rate distortion optimization for CBP", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_CBP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "naq", "normalize adaptive quantization", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_NAQ }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_MV0 }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\ - FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\ -{ "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\ - FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\ -{ "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\ -{ "error_rate", "Simulate errors in the bitstream to test error concealment.", \ - FF_MPV_OFFSET(error_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\ -{"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", \ - FF_MPV_OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0, 99, FF_MPV_OPT_FLAGS}, \ -{"rc_qmod_amp", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ -{"rc_qmod_freq", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS}, \ -{"rc_eq", "Set rate control equation. When computing the expression, besides the standard functions " \ - "defined in the section 'Expression Evaluation', the following functions are available: " \ - "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " \ - "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", \ - FF_MPV_OFFSET(rc_eq), AV_OPT_TYPE_STRING, .flags = FF_MPV_OPT_FLAGS }, \ -{"rc_init_cplx", "initial complexity for 1-pass encoding", FF_MPV_OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ -{"rc_buf_aggressivity", "currently useless", FF_MPV_OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ -{"border_mask", "increase the quantizer for macroblocks close to borders", FF_MPV_OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ -{"lmin", "minimum Lagrange factor (VBR)", FF_MPV_OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 = 2*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"lmax", "maximum Lagrange factor (VBR)", FF_MPV_OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 31*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"ibias", "intra quant bias", FF_MPV_OFFSET(intra_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"pbias", "inter quant bias", FF_MPV_OFFSET(inter_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"motion_est", "motion estimation algorithm", FF_MPV_OFFSET(motion_est), AV_OPT_TYPE_INT, {.i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, FF_MPV_OPT_FLAGS, "motion_est" }, \ -{ "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ -{ "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ -{ "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ -{"skip_threshold", "Frame skip threshold", FF_MPV_OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"skip_factor", "Frame skip factor", FF_MPV_OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"skip_exp", "Frame skip exponent", FF_MPV_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"skip_cmp", "Frame skip compare function", FF_MPV_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{"sc_threshold", "Scene change threshold", FF_MPV_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"noise_reduction", "Noise reduction", FF_MPV_OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"ps", "RTP payload size in bytes", FF_MPV_OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"mepc", "Motion estimation bitrate penalty compensation (1.0 = 256)", FF_MPV_OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"mepre", "pre motion estimation", FF_MPV_OFFSET(me_pre), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"intra_penalty", "Penalty for intra blocks in block decision", FF_MPV_OFFSET(intra_penalty), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX/2, FF_MPV_OPT_FLAGS }, \ - -#define FF_MPV_COMMON_BFRAME_OPTS \ -{"b_strategy", "Strategy to choose between I/P/B-frames", FF_MPV_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS }, \ -{"b_sensitivity", "Adjust sensitivity of b_frame_strategy 1", FF_MPV_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"brd_scale", "Downscale frames for dynamic B-frame decision", FF_MPV_OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS }, - -#if FF_API_MPEGVIDEO_OPTS -#define FF_MPV_DEPRECATED_MPEG_QUANT_OPT \ - { "mpeg_quant", "Deprecated, does nothing", FF_MPV_OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 0, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, -#define FF_MPV_DEPRECATED_A53_CC_OPT \ - { "a53cc", "Deprecated, does nothing", FF_MPV_OFFSET(dummy), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, -#define FF_MPV_DEPRECATED_MATRIX_OPT \ - { "force_duplicated_matrix", "Deprecated, does nothing", FF_MPV_OFFSET(dummy), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, -#define FF_MPV_DEPRECATED_BFRAME_OPTS \ - { "b_strategy", "Deprecated, does nothing", FF_MPV_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ - { "b_sensitivity", "Deprecated, does nothing", FF_MPV_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, { .i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ - { "brd_scale", "Deprecated, does nothing", FF_MPV_OFFSET(brd_scale), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, -#endif - -extern const AVClass ff_mpv_enc_class; /** * Set the given MpegEncContext to common defaults (same for encoding @@ -661,8 +562,6 @@ extern const AVClass ff_mpv_enc_class; */ void ff_mpv_common_defaults(MpegEncContext *s); -void ff_dct_encode_init_x86(MpegEncContext *s); - int ff_mpv_common_init(MpegEncContext *s); void ff_mpv_common_init_arm(MpegEncContext *s); void ff_mpv_common_init_axp(MpegEncContext *s); @@ -703,14 +602,6 @@ void ff_mpv_report_decode_progress(MpegEncContext *s); int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx); void ff_mpv_frame_end(MpegEncContext *s); -int ff_mpv_encode_init(AVCodecContext *avctx); -void ff_mpv_encode_init_x86(MpegEncContext *s); - -int ff_mpv_encode_end(AVCodecContext *avctx); -int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, - const AVFrame *frame, int *got_packet); -int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t size_increase); - void ff_clean_intra_table_entries(MpegEncContext *s); void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h); void ff_mpeg_flush(AVCodecContext *avctx); @@ -719,19 +610,11 @@ void ff_print_debug_info(MpegEncContext *s, Picture *p, AVFrame *pict); int ff_mpv_export_qp_table(MpegEncContext *s, AVFrame *f, Picture *p, int qp_type); -void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix); - int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src); int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src); void ff_set_qscale(MpegEncContext * s, int qscale); void ff_mpv_idct_init(MpegEncContext *s); -int ff_dct_encode_init(MpegEncContext *s); -void ff_convert_matrix(MpegEncContext *s, int (*qmat)[64], uint16_t (*qmat16)[2][64], - const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra); -int ff_dct_quantize_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow); -void ff_block_permute(int16_t *block, uint8_t *permutation, - const uint8_t *scantable, int last); void ff_init_block_index(MpegEncContext *s); void ff_mpv_motion(MpegEncContext *s, @@ -756,15 +639,6 @@ static inline void ff_update_block_index(MpegEncContext *s){ s->dest[2]+= (2 >> s->chroma_x_shift) * block_size; } -static inline int get_bits_diff(MpegEncContext *s){ - const int bits= put_bits_count(&s->pb); - const int last= s->last_bits; - - s->last_bits = bits; - - return bits - last; -} - static inline int mpeg_get_qscale(MpegEncContext *s) { int qscale = get_bits(&s->gb, 5); diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 5717b7422e..a76b4b9f60 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -48,6 +48,7 @@ #include "mpeg12data.h" #include "mpegvideo.h" #include "mpegvideodata.h" +#include "mpegvideoenc.h" #include "h261.h" #include "h263.h" #include "h263data.h" diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h new file mode 100644 index 0000000000..21e7a55e13 --- /dev/null +++ b/libavcodec/mpegvideoenc.h @@ -0,0 +1,161 @@ +/* + * Generic DCT based hybrid video encoder + * Copyright (c) 2000, 2001, 2002 Fabrice Bellard + * Copyright (c) 2002-2004 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * mpegvideo header. + */ + +#ifndef AVCODEC_MPEGVIDEOENC_H +#define AVCODEC_MPEGVIDEOENC_H + +#include "libavutil/opt.h" +#include "internal.h" +#include "mpegvideo.h" + +/* mpegvideo_enc common options */ +#define FF_MPV_FLAG_SKIP_RD 0x0001 +#define FF_MPV_FLAG_STRICT_GOP 0x0002 +#define FF_MPV_FLAG_QP_RD 0x0004 +#define FF_MPV_FLAG_CBP_RD 0x0008 +#define FF_MPV_FLAG_NAQ 0x0010 +#define FF_MPV_FLAG_MV0 0x0020 + +#define FF_MPV_OPT_CMP_FUNC \ +{ "sad", "Sum of absolute differences, fast", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "sse", "Sum of squared errors", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "satd", "Sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SATD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "dct", "Sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "psnr", "Sum of squared quantization errors, low quality", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_PSNR }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "bit", "Number of bits needed for the block", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_BIT }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "rd", "Rate distortion optimal, slow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_RD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "zero", "Zero", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_ZERO }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "vsad", "Sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "vsse", "Sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "nsse", "Noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_NSSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "dct264", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT264 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_CHROMA }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{ "msad", "Sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" } + +#ifndef FF_MPV_OFFSET +#define FF_MPV_OFFSET(x) offsetof(MpegEncContext, x) +#endif +#define FF_MPV_OPT_FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) +#define FF_MPV_COMMON_OPTS \ +FF_MPV_OPT_CMP_FUNC, \ +{ "mpv_flags", "Flags common for all mpegvideo-based encoders.", FF_MPV_OFFSET(mpv_flags), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "mpv_flags" },\ +{ "skip_rd", "RD optimal MB level residual skipping", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_SKIP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ +{ "strict_gop", "Strictly enforce gop size", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_STRICT_GOP }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ +{ "qp_rd", "Use rate distortion optimization for qp selection", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_QP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ +{ "cbp_rd", "use rate distortion optimization for CBP", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_CBP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ +{ "naq", "normalize adaptive quantization", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_NAQ }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ +{ "mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_MV0 }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ +{ "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\ + FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\ +{ "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\ + FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\ +{ "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\ +{ "error_rate", "Simulate errors in the bitstream to test error concealment.", \ + FF_MPV_OFFSET(error_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\ +{"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", \ + FF_MPV_OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0, 99, FF_MPV_OPT_FLAGS}, \ +{"rc_qmod_amp", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +{"rc_qmod_freq", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS}, \ +{"rc_eq", "Set rate control equation. When computing the expression, besides the standard functions " \ + "defined in the section 'Expression Evaluation', the following functions are available: " \ + "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " \ + "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", \ + FF_MPV_OFFSET(rc_eq), AV_OPT_TYPE_STRING, .flags = FF_MPV_OPT_FLAGS }, \ +{"rc_init_cplx", "initial complexity for 1-pass encoding", FF_MPV_OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +{"rc_buf_aggressivity", "currently useless", FF_MPV_OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +{"border_mask", "increase the quantizer for macroblocks close to borders", FF_MPV_OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +{"lmin", "minimum Lagrange factor (VBR)", FF_MPV_OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 = 2*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"lmax", "maximum Lagrange factor (VBR)", FF_MPV_OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 31*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"ibias", "intra quant bias", FF_MPV_OFFSET(intra_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"pbias", "inter quant bias", FF_MPV_OFFSET(inter_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"motion_est", "motion estimation algorithm", FF_MPV_OFFSET(motion_est), AV_OPT_TYPE_INT, {.i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, FF_MPV_OPT_FLAGS, "motion_est" }, \ +{ "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ +{ "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ +{ "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ +{"skip_threshold", "Frame skip threshold", FF_MPV_OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"skip_factor", "Frame skip factor", FF_MPV_OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"skip_exp", "Frame skip exponent", FF_MPV_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"skip_cmp", "Frame skip compare function", FF_MPV_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{"sc_threshold", "Scene change threshold", FF_MPV_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"noise_reduction", "Noise reduction", FF_MPV_OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"ps", "RTP payload size in bytes", FF_MPV_OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"mepc", "Motion estimation bitrate penalty compensation (1.0 = 256)", FF_MPV_OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"mepre", "pre motion estimation", FF_MPV_OFFSET(me_pre), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"intra_penalty", "Penalty for intra blocks in block decision", FF_MPV_OFFSET(intra_penalty), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX/2, FF_MPV_OPT_FLAGS }, \ + +#define FF_MPV_COMMON_BFRAME_OPTS \ +{"b_strategy", "Strategy to choose between I/P/B-frames", FF_MPV_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS }, \ +{"b_sensitivity", "Adjust sensitivity of b_frame_strategy 1", FF_MPV_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"brd_scale", "Downscale frames for dynamic B-frame decision", FF_MPV_OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS }, + +#if FF_API_MPEGVIDEO_OPTS +#define FF_MPV_DEPRECATED_MPEG_QUANT_OPT \ + { "mpeg_quant", "Deprecated, does nothing", FF_MPV_OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 0, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, +#define FF_MPV_DEPRECATED_A53_CC_OPT \ + { "a53cc", "Deprecated, does nothing", FF_MPV_OFFSET(dummy), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, +#define FF_MPV_DEPRECATED_MATRIX_OPT \ + { "force_duplicated_matrix", "Deprecated, does nothing", FF_MPV_OFFSET(dummy), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, +#define FF_MPV_DEPRECATED_BFRAME_OPTS \ + { "b_strategy", "Deprecated, does nothing", FF_MPV_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ + { "b_sensitivity", "Deprecated, does nothing", FF_MPV_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, { .i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ + { "brd_scale", "Deprecated, does nothing", FF_MPV_OFFSET(brd_scale), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, +#endif + +extern const AVClass ff_mpv_enc_class; + +int ff_mpv_encode_init(AVCodecContext *avctx); +void ff_mpv_encode_init_x86(MpegEncContext *s); + +int ff_mpv_encode_end(AVCodecContext *avctx); +int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, + const AVFrame *frame, int *got_packet); +int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t size_increase); + +void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix); + +int ff_dct_encode_init(MpegEncContext *s); +void ff_dct_encode_init_x86(MpegEncContext *s); + +int ff_dct_quantize_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow); +void ff_convert_matrix(MpegEncContext *s, int (*qmat)[64], uint16_t (*qmat16)[2][64], + const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra); + +void ff_block_permute(int16_t *block, uint8_t *permutation, + const uint8_t *scantable, int last); + +static inline int get_bits_diff(MpegEncContext *s) +{ + const int bits = put_bits_count(&s->pb); + const int last = s->last_bits; + + s->last_bits = bits; + + return bits - last; +} + +#endif diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c index 16e19083da..5e1ed9cc27 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -34,6 +34,7 @@ #include "libavutil/avutil.h" #include "libavutil/thread.h" #include "mpegvideo.h" +#include "mpegvideoenc.h" #include "h263.h" #include "h263enc.h" #include "internal.h" diff --git a/libavcodec/nvdec_mpeg12.c b/libavcodec/nvdec_mpeg12.c index 9a9030d8d3..b8db4250bb 100644 --- a/libavcodec/nvdec_mpeg12.c +++ b/libavcodec/nvdec_mpeg12.c @@ -21,6 +21,7 @@ */ #include "avcodec.h" +#include "internal.h" #include "mpegvideo.h" #include "nvdec.h" #include "decode.h" diff --git a/libavcodec/nvdec_mpeg4.c b/libavcodec/nvdec_mpeg4.c index 739b049933..2b2b1b87a1 100644 --- a/libavcodec/nvdec_mpeg4.c +++ b/libavcodec/nvdec_mpeg4.c @@ -21,6 +21,7 @@ */ #include "avcodec.h" +#include "internal.h" #include "mpeg4video.h" #include "nvdec.h" #include "decode.h" diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index 6b77ccd006..f814e23ed5 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -32,7 +32,7 @@ #include "internal.h" #include "ratecontrol.h" #include "mpegutils.h" -#include "mpegvideo.h" +#include "mpegvideoenc.h" #include "libavutil/eval.h" void ff_write_pass1_stats(MpegEncContext *s) diff --git a/libavcodec/rv10enc.c b/libavcodec/rv10enc.c index 72b25e0c55..0c74da1b3c 100644 --- a/libavcodec/rv10enc.c +++ b/libavcodec/rv10enc.c @@ -26,6 +26,7 @@ */ #include "mpegvideo.h" +#include "mpegvideoenc.h" #include "put_bits.h" #include "rv10.h" diff --git a/libavcodec/rv20enc.c b/libavcodec/rv20enc.c index 204cd03a24..9f935d61e2 100644 --- a/libavcodec/rv20enc.c +++ b/libavcodec/rv20enc.c @@ -27,6 +27,7 @@ #include "mpegvideo.h" #include "mpegvideodata.h" +#include "mpegvideoenc.h" #include "h263data.h" #include "h263enc.h" #include "put_bits.h" diff --git a/libavcodec/rv30.c b/libavcodec/rv30.c index 751647bebe..d11b8430e7 100644 --- a/libavcodec/rv30.c +++ b/libavcodec/rv30.c @@ -25,6 +25,7 @@ */ #include "avcodec.h" +#include "internal.h" #include "mpegutils.h" #include "mpegvideo.h" #include "golomb.h" diff --git a/libavcodec/rv40.c b/libavcodec/rv40.c index 31a7a04e51..0b3f733bc6 100644 --- a/libavcodec/rv40.c +++ b/libavcodec/rv40.c @@ -29,6 +29,7 @@ #include "libavutil/imgutils.h" #include "avcodec.h" +#include "internal.h" #include "mpegutils.h" #include "mpegvideo.h" #include "golomb.h" diff --git a/libavcodec/speedhqenc.c b/libavcodec/speedhqenc.c index 967774931c..806eae7cf1 100644 --- a/libavcodec/speedhqenc.c +++ b/libavcodec/speedhqenc.c @@ -34,6 +34,7 @@ #include "mpeg12.h" #include "mpeg12data.h" #include "mpegvideo.h" +#include "mpegvideoenc.h" #include "speedhqenc.h" extern RLTable ff_rl_speedhq; diff --git a/libavcodec/vaapi_encode_mpeg2.c b/libavcodec/vaapi_encode_mpeg2.c index af3a63dab7..d084d8c4b9 100644 --- a/libavcodec/vaapi_encode_mpeg2.c +++ b/libavcodec/vaapi_encode_mpeg2.c @@ -20,10 +20,12 @@ #include #include "libavutil/avassert.h" +#include "libavutil/opt.h" #include "avcodec.h" #include "cbs.h" #include "cbs_mpeg2.h" +#include "internal.h" #include "mpeg12.h" #include "vaapi_encode.h" diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c index d6962448a6..d8481301e1 100644 --- a/libavcodec/wmv2enc.c +++ b/libavcodec/wmv2enc.c @@ -21,6 +21,7 @@ #include "avcodec.h" #include "h263.h" #include "mpegvideo.h" +#include "mpegvideoenc.h" #include "msmpeg4.h" #include "msmpeg4enc.h" #include "msmpeg4data.h" diff --git a/libavcodec/x86/mpegvideoenc.c b/libavcodec/x86/mpegvideoenc.c index 4bad6a87ef..3691cce26c 100644 --- a/libavcodec/x86/mpegvideoenc.c +++ b/libavcodec/x86/mpegvideoenc.c @@ -26,7 +26,7 @@ #include "libavutil/x86/cpu.h" #include "libavcodec/avcodec.h" #include "libavcodec/dct.h" -#include "libavcodec/mpegvideo.h" +#include "libavcodec/mpegvideoenc.h" /* not permutated inverse zigzag_direct + 1 for MMX quantizer */ DECLARE_ALIGNED(16, static const uint16_t, inv_zigzag_direct16)[64] = { From patchwork Sun Jan 30 06:27:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33915 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770533iov; Sat, 29 Jan 2022 22:30:23 -0800 (PST) X-Google-Smtp-Source: ABdhPJxoqRkqh4GpqTfbIOjeE/ch/DW8iXRd5T1K5fB1nrErn0z9oynqugHI7+Od+9J1iuYTvJd3 X-Received: by 2002:a17:907:1c11:: with SMTP id nc17mr12556464ejc.675.1643524223258; Sat, 29 Jan 2022 22:30:23 -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 m20si3532602edc.403.2022.01.29.22.30.22; Sat, 29 Jan 2022 22:30:23 -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=mzfWEzIM; 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 0D28D68B1B6; Sun, 30 Jan 2022 08:28:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2083.outbound.protection.outlook.com [40.92.90.83]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D50A568B160 for ; Sun, 30 Jan 2022 08:28:33 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BrgTF6kHWMp1Od+t8E3gW8vcwN3DsgAtgU0ByUs73zBCgkz50tkWrnGyFrX7kWKjKfoZiq8FciNs54R7SOED7elCdti1p/BbqH2L/3KM+ahGxAWdIAQPx2liUIlcmqvgAbSSxfORrNeQtEhn8QkCT+cPkQaBO7A7kEIT+n2i+GngRDSTfvkld0Rr5bmRWqK2eIA/ftVOKKuGW8zKiOLrtJz2tJNnbkmRNUCVT1QjAt5qq+SJnaLX2XMJpS0wTpKBf7qqBVOiTEqFzQQBaqseY3JEDVdwCbhMtIaZZWTohLgCwN3puSeOph2edxr2KlOXPWs5JaYicC6fDS12/OOadw== 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=6KPC/r1Ul6GViifhG5bKe7ZiHwxAeCn9i54QmoAtOZg=; b=mlkLdLLcqMYcM2ldDJQXt0mJ/RGMVNwxS2XtLyzpzOs2315Ttt9zCtPkI+yCdBc0+e7CWTZHIsarpfe/HOpgdqbE+rK4ZQflnk/YgD9T3Q7QSOjrnxUPy6ZxoSqgGiHuuALZim1smJYp/xuWth42mlSjr+e4FFio6ZgQnUR52Rb8lqqqJGQp/s6pf99X6IfX38Ty+ixfVFjn17iRxw2wnajqZJuUhvEHRJi+QjcFxn9iksTANYc22HqWn81bsVhtNQla/fV+RKmQJv0RdhJ5F+gqalmp72V0r6GqZ7LBv0XolZGSWCmuRDi9KEycgdqrU9+88FpsIb58e6/PflCBtw== 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=6KPC/r1Ul6GViifhG5bKe7ZiHwxAeCn9i54QmoAtOZg=; b=mzfWEzIMPT23fOfJAXfP9gJNQVschGM9vbfgFo7pqxJaBO+eZw0J93iBlPTyfXm8tmtG7dxIeexjfc9HDsjm7Y6iroed3mDb/kl9uvW4XD0KjHtQu2/eTVzbjoW9T+5Y3B1H74qR16V5De7c90WZV5DspbvOKcv+K2NQUUJQXTdA2kml42JDJFl4Pg5QdHqjFQCo6WwUUhK4Oy1sZrhAB+w8b8q9ze17TWmiXappWc/E7NGUaGlsO4JiKs8sze65r7ngrj71lOuZu0JWtOBCnRD5BQWPdO80CrTvCDSrqyT90a4OEZkYB5kIOSe16uvgU3TAvtOtGkREqGsMvsLiQw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:32 +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:28:32 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:22 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [37ppy6KXGxyoxcWaVQyVA7XVYa0NNejN] 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-13-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 56eea807-b64d-4835-d34b-08d9e3b9bcbb X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sBx+dR6lY/OQWHieM2/Fz3JhiNDTGy0zWAjLMOy50pXi7aRhBT5BMqk6GvmxfcgwMFgacDyNldHnneelsFS7Kym40+VWy0+87Je7G2Ex4KamtBCfFJW6YjG8gq0tXMI7snUI/oP4h2d/ltD7l/Og0zo+N8SmPYSnW8v+fzDUna542PFJ6/LdKPu3CzDIKuW9kd+VIyktcgol3eFee/uB0pcxR/nA1jZ5LkPHBvaFESc6RFTKopcKogg8Yce4BJfij0aQ5dh9j+pCfVy1neuThSOFOFLX6fVm9MrM9LmcB5vJxGzTL9XJtwD0UryEFc38lGi3wJZIsFKQKcuJyn/PrH24VaC/t2Wci39PhJRmC0LtEdqY4+rKeekE9cz7ut0CjUgurYNiWfaIz5arvqznc/u7jMZ3xbmwA1BVTYYMPOdABlS9jzY8/dTDvUKy0zrwftQNSUfmDJQoQm7p9JRuxvoXHgmZUu7xs0B00vfSN/j0cP3o7TnlTs7beiEYRWbBRGfPRhW+btI4cY9QaQxxcxYnxXEsda3SMJ2+Md/0Xbb+KBEwiySvvULCHatDf+Px X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: AyWIfzR9jZuMycqFASr2hpHRqu4cBU56rescQMdVW5hCOiseVPl7zjVGSFeuk6NWKQr6deytFFx/+p10Zr8Uvzo83KdMcRMuF9qo/ISepVQAdc0AvxJEMLnWgkELn6eONyjhXuQI0JMMQUL3s8JvXhWJzon1yYJv+skppj8PqBge9I1BALBSd8FtiPzAsDxNLdjx108ZBzb9fNLgeFL2YXU5Fl8OluIyOimYHk0yBxPvX2bmYYqU6aj3mslVTMG/0dCdySAmfe7hKbTIHoEXTXx7ezdquf6q8QFc0m2z2bBSR1YrTuPJy91C4QneInu+oKnqYO7XiD/LVrxshduGY+R8sFO843XtWkFZNyzEoig2LTdZhWt3TzTfN1j0jQPa26jKLMyERSuqk16p3eRtJCqVdvlL2uXIcjNG2+wIxvKh2aocNeB7TEhDvi3Vvyd+oI2Dc6RY4q6/tUC+EcJKGnw8zuyPYYJgNt8mrxzjR3rCW8uF1NVvRfDIhpz9lMc16Cz5S1TZUm8K1BbabJTt4zPx5ugMu008AGaTiy0leXq9MAyT51stl+TK3FkvapIEyTSckUyMEUWlC/W33UpWxdz2DvE++xR1Gv6netQO2lrwu3pMPe9ZwF1njJpatTgZgJAfhIuYSp4bnT65yl6MqQw03uLx18INqRt/nBSxDsmSecMKucs07Ph8rvb+Wjb90PJ5cJbsfN1p+BDYkRENtWEdtFjvRibBg4ezsPC100/DXykeqk7npPPp9X9GoLnkYJ6JBkE1rEPv9+84m4uKoH90Lgb+pOuwNNu17FG37wCs6BptK6xUD/TlnQm6B7hA+hQCD0qc4FKrkyEunPtLygpvr2hBi0vGZg+RRrIz66juVy2GOH3TM8GBot0tm/7UKZHg7Znr600rO/VwYbpDS9iuyK6nJmQpD8a2emskALMpRW1T/WTrsm8P3V3KruzCGTvrmFC3yKnAgm+VaEMEkg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 56eea807-b64d-4835-d34b-08d9e3b9bcbb 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:28:32.5297 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 14/41] avcodec/avcodec: Avoid MpegEncContext in AVHWAccel.decode_mb 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: 2Tkx29UOA4Mb Use an opaque pointer to void instead. Signed-off-by: Andreas Rheinhardt --- libavcodec/avcodec.h | 6 +----- libavcodec/mpegvideo_xvmc.c | 3 ++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index ec1a0566a4..918753fd0e 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2026,8 +2026,6 @@ typedef struct AVCodecContext { int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags); } AVCodecContext; -struct MpegEncContext; - /** * @defgroup lavc_hwaccel AVHWAccel * @@ -2154,10 +2152,8 @@ typedef struct AVHWAccel { * XvMC uses it to replace the ff_mpv_reconstruct_mb(). * Instead of decoding to raw picture, MB parameters are * stored in an array provided by the video driver. - * - * @param s the mpeg context */ - void (*decode_mb)(struct MpegEncContext *s); + void (*decode_mb)(void *opaque); /** * Initialize the hwaccel private data. diff --git a/libavcodec/mpegvideo_xvmc.c b/libavcodec/mpegvideo_xvmc.c index f06583768c..bfeb453834 100644 --- a/libavcodec/mpegvideo_xvmc.c +++ b/libavcodec/mpegvideo_xvmc.c @@ -168,8 +168,9 @@ static int ff_xvmc_field_end(AVCodecContext *avctx) * Synthesize the data needed by XvMC to render one macroblock of data. * Fill all relevant fields, if necessary do IDCT. */ -static void ff_xvmc_decode_mb(struct MpegEncContext *s) +static void ff_xvmc_decode_mb(void *opaque) { + MpegEncContext *const s = opaque; XvMCMacroBlock *mv_block; struct xvmc_pix_fmt *render; int i, cbp, blocks_per_mb; From patchwork Sun Jan 30 06:27:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33916 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770608iov; Sat, 29 Jan 2022 22:30:31 -0800 (PST) X-Google-Smtp-Source: ABdhPJzN+0wu4UnqkWNZqPEwFxmszrVVBX32P5G3NCFwgSjjWmf3uJCLujtIr9RjWdZATOzrOjK/ X-Received: by 2002:aa7:d59a:: with SMTP id r26mr15428840edq.46.1643524231469; Sat, 29 Jan 2022 22:30:31 -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 r12si5478198edd.608.2022.01.29.22.30.31; Sat, 29 Jan 2022 22:30:31 -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=YO8R1ByM; 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 2744768B1D8; Sun, 30 Jan 2022 08:28:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2062.outbound.protection.outlook.com [40.92.90.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0EDAC68B1B9 for ; Sun, 30 Jan 2022 08:28:34 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WNyJBBYpNd+BlGYXFpMc3YV77AuHZKyDVezdG+1YB32ANggUBYI94h/i91W5t7mmqtaMAQnodddx/XWLWhmD374PmhmMbEKWBN/f9HTvgPxZCzIg0a1HEzJ4me8CnK7cqTdi6qHNMvIMMWL2Xt+KbgFpqQGbw/XeEEQhrQW2zr2BigG/fPx4bZaqfXLt33riVX3j1zTKhri0YTQBh6GE6d/bS/bw8noyJtjPAvIGY+bVlVMO2Lw5ymj9FRHpU2mWGhINxzYCIlVb1ohJ/sBypv4ejhlIcTykkyLpr6oq/nSpaeOrrIVxWAWtzUpkyuCLOuY3YBcmjxUaIyfypeD9ag== 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=1tdVZM6r+Je3BRQZ0mJWjP6Kwl8HJStZbrdGeRRhjQs=; b=ROCOWauxjWQKqCxjYUSVdhVebCr8y4X674zqSkBeJQnOUX2VlOFPZGJ8Vg3sxvNYHxuxCbGZwkpWwTcWGuW/blrfw4TpwAAHB2l/BH5I8xvRWRH6Zf5JvZdWlsxMx8qqrHEAtjgADu3JQS00E31plumJH1agEN6xq2CG6q+sYgE3XmYtz9gCVzhboLIGikbQmLV+VU+qMMyZW0EGqYXpxskZjvbPYiifDhB2QxTnD98gK6BfqOmWKrl4V/7Dz1s7gzDuEuQzuwJprheSBIX584uYsPqXSpOTBpWeoys6NS7KZHqG8nH/4WssRcan0gFjqKg5sTMDfWhnbB5gcPHBVA== 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=1tdVZM6r+Je3BRQZ0mJWjP6Kwl8HJStZbrdGeRRhjQs=; b=YO8R1ByMg1JglIIasm+G8vxOgUNw0ugXcNx+iixVoEpSmcmzqjArQYdiePUH/eD1YQ7LSrGgNo7OU+A9++MG6nu+twtJ6H4OQ/OtGWefTIYaTW3aZ04l1ShDfE5vQAGk9vzkbEwPRRWmNJcqbJTR6Ttx0CbnPUxeikmPZqukPjPMiXRZ3h7NIDTMbLZaL3amzay1roeB48+MxIVvV0eGbNUGmPRzMkkJygzGKYdCW0wxcoptCIiaTCXaX8wxfSAExXYF3cMkhRilROFRzEMPmrn/XOamrpDtRVrernLdVH7hKsaOoypUN+O1PoK+Wp4eJYyzND7tBToUCOOzOaoURg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:34 +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:28:34 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:23 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [iGrGDF4FUEFHG5QbROxfB6JnRToOS77n] 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-14-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 57e00dac-2543-4396-ef0d-08d9e3b9bd8e X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: D0XLna9zwHWuUw0SPcpPcefiAqFaJzhgyFUzvFrc5k/47oh7N8M9aQJYMlbPlslnR9Ja9QDeYWCa6ZESxCIAeijxFTLWX3BkRHArk8S3vrVOOmv6SjkZyFPGuX4xvQf4SMFmZRhryOk2ZVMrJ0JhIWt4agAH+VnlQjNQO7IwRKgoXMOigdChaJk/HFcdUNvfILuLqsyVIcAmMJevPzMMHQaXMCbY/UAyyLRjXfQ1o/aTs9NlftmTX8a9PxyZfygvLIeYHHnfvhuyD+9H6bc9powU3yCuBO9jjd3W03uiYccdQ8tdUoKyOPjZfFXnlhp7C980YIxiAWPtpg/5x2io2pDBmUsGPYDD8AW8L3xuNPVXGbb6v5C9iMhG6gQ/QFoXVO3s0j5IiuCoz7tQNr88xHG+J8dL+NrAAcTVB6Fhk+G8LKpGAMvqsLMSmwUmXFH50Q+n91PSudBpI8XJpytjF5W+EDguQNJ3Z1tjEQIYrb/LF9m21drEQHtZOLqkipwS0sna8X6LUGvNZwVJ5oLWYzlR4m1uoaTPWWTo2oyLssWYZGAJIsFKtKaWbxToepMN X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: fBoQmMwmUFQt98wK+gVbZUHvS17XfmFqNBGaOPpzIadcBqsFVzxgCCwsaCl3cO+bMCc07OYA7Yf07QV7VSqlJUtMjtORAGPIsyyfpInbQhY3Q84aJg8dyGigfSPBCh80Z3zuTyvpNPCdU59lzk8OSt+rWdS9jUl/5iCQS25nhVHwFGti7AtRWZuIs7qdblUt0z9959t1g9AvfsEDjULB+j+/GYdMwS9IXAcD8p0oekDKB7XQ/NshJUUoXJ7cqQ19Y0l5Jdb+v8sEdYwEqAwetbKIvvq+aato3DJtZqzyL0yDqKAOkJS6oVCzab5Yrp0K7f+ev8CQLU0rWqe790Tj1RQq1R95qsWmv7sfadH8o68XoNLKfQPJ3Bi0MXad8H6foEfLulXa6q8u6t92LvW7X1g+ak45f6KnTQYCWtjODr+lGCd0Vnron+XSXapMaXjWFYLdMCE4f8S9amr5O8j1sbPWZiUtoQUlZ9zGr3LqtYMyildXv6HFVdt4wniv8Zgl6ST4wfb6rs0Ve4bQfmojDwpOlxk3nmkLIOUo6PidGrpX1PloSZAfh9lpwDLGeLwKc5rxRP5k3tuWp2XyaGucmf0lyFKT7NmJYsbf2RMwqMobfOEBB9Nv3GNfHgPwv2yFcfQqYYZ+WSKqLjYrvK00UXSTBD+TjRc62ODExXrOjgttMqH3ezcZAVbf0D5bGTheiY1y4JEwkiRroDv1+DJKg4Ch6nO7A7qVDuHdQkLeuQc5j+rKXUBf2yB5ap30VIMooXZHbYl6+V7EZTfpPbGECDt0/OmKJ/AxL4ytrEWOpYYC1Uo9SPVAr8i/km097khIiuU691D8nqkOWzG912X8SR2BZwmKSpShka7dsEz/uuQJioCvKmUDt60fqKfxsojghCiYtaATbJfUXBW9CZOIlQDxkvIdr/n2PjlUCekNNht39iuR1Y56tJRAbkcLAYyuVGDi9nooiF9F7jq+xbby1A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 57e00dac-2543-4396-ef0d-08d9e3b9bd8e 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:28:33.9290 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 15/41] avcodec/speedhqenc: Add SpeedHQEncContext and move slice_start to it 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: CDtbB5Oy+yRq Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 3 --- libavcodec/speedhqenc.c | 19 ++++++++++++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 18d2d0902f..8f65f53c2a 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -421,9 +421,6 @@ typedef struct MpegEncContext { int inter_intra_pred; int mspel; - /* SpeedHQ specific */ - int slice_start; - /* decompression specific */ GetBitContext gb; diff --git a/libavcodec/speedhqenc.c b/libavcodec/speedhqenc.c index 806eae7cf1..ba3b1d9393 100644 --- a/libavcodec/speedhqenc.c +++ b/libavcodec/speedhqenc.c @@ -55,6 +55,12 @@ static uint32_t speedhq_chr_dc_uni[512]; static uint8_t uni_speedhq_ac_vlc_len[64 * 64 * 2]; +typedef struct SpeedHQEncContext { + MpegEncContext m; + + int slice_start; +} SpeedHQEncContext; + static av_cold void speedhq_init_static_data(void) { ff_rl_init(&ff_rl_speedhq, speedhq_static_rl_table_store); @@ -124,24 +130,27 @@ av_cold int ff_speedhq_encode_init(MpegEncContext *s) void ff_speedhq_encode_picture_header(MpegEncContext *s) { + SpeedHQEncContext *ctx = (SpeedHQEncContext*)s; + put_bits_le(&s->pb, 8, 100 - s->qscale * 2); /* FIXME why doubled */ put_bits_le(&s->pb, 24, 4); /* no second field */ + ctx->slice_start = 4; /* length of first slice, will be filled out later */ - s->slice_start = 4; put_bits_le(&s->pb, 24, 0); } void ff_speedhq_end_slice(MpegEncContext *s) { + SpeedHQEncContext *ctx = (SpeedHQEncContext*)s; int slice_len; flush_put_bits_le(&s->pb); - slice_len = s->pb.buf_ptr - (s->pb.buf + s->slice_start); - AV_WL24(s->pb.buf + s->slice_start, slice_len); + slice_len = put_bytes_output(&s->pb) - ctx->slice_start; + AV_WL24(s->pb.buf + ctx->slice_start, slice_len); /* length of next slice, will be filled out later */ - s->slice_start = s->pb.buf_ptr - s->pb.buf; + ctx->slice_start = put_bytes_output(&s->pb); put_bits_le(&s->pb, 24, 0); } @@ -274,7 +283,7 @@ const AVCodec ff_speedhq_encoder = { .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_SPEEDHQ, .priv_class = &ff_mpv_enc_class, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(SpeedHQEncContext), .init = ff_mpv_encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, From patchwork Sun Jan 30 06:27:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33921 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771020iov; Sat, 29 Jan 2022 22:31:25 -0800 (PST) X-Google-Smtp-Source: ABdhPJzynBlQ+2B7bOB2R1a2w+1ElYXqx8qBbI3ZvZnuBdbcHvhWOXCI5THXGPltBmql1n9hnA5A X-Received: by 2002:a17:906:c14d:: with SMTP id dp13mr13170157ejc.132.1643524285426; Sat, 29 Jan 2022 22:31:25 -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 w20si5522062eje.152.2022.01.29.22.31.25; Sat, 29 Jan 2022 22:31:25 -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="nMDgD/D2"; 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 4CD7C68B245; Sun, 30 Jan 2022 08:28:51 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2108.outbound.protection.outlook.com [40.92.90.108]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C964268B18C for ; Sun, 30 Jan 2022 08:28:48 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H7UTLSFqgfBqXzgrgM+R0/tT2LSqu7GnS+3mvCjJxb35q0j3n7U7iau0LxD+7sMpnHCr22llTYKjfHpYecnAgOvzOzeSeF0pyJjWpURuITBunCNxLAWvmqfbsLgq0OfLYy7iBWIhqGWT6jS55M/HXOWW3mZMnTn5+/yBxA9SCBrlHBgX62zWGwMfwZTdsK4V+kMYHdbErB8s0JOuXcEHvX6PzMqb2bg7yTLE9oOzLRhozp2VFCh6m4zzxIOIepqzt4XCrvZDjTK0/gmDkhnPXhgStDP9AVFGh7kZVuMeaUy42n8z5Zk61yHdkP3lFYhOBmY9a87H+fdqrwLChbyDJw== 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=9sf/9aLn+ty2MIriR5sCEE8B1Xq/99hckQUEdC90/tU=; b=jg4051/zDNh7dsLiFNJOVJID4uhe6kDiXlCvTD0NqquAKRMH49uievujgDiGb7bAvjb1xErsu49aIdN+mDLBi/x8ygXP6sRMvF41IzfTd3nfcUBYABMEuItAr5HtkdItEcWkRv+klnLXFga+TbwGkJ5YTsOIfbJZbQACw/ryvv1FFn2aShsg5LXZVgbZKWZV4ECIfVpKtSCaZCahXAHsHGD83NY/Kl7sHmuSfIfZMBc2+SQIrSMmk7HCXBkoVfE59ErMF/lW/O6YF3tjPwM/57WuQlu6MdNQuxy8Ml2FUba2n1T15cXCOxNQZcXSQGSEwmW3AiSJnC8KsX8I7aoOsQ== 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=9sf/9aLn+ty2MIriR5sCEE8B1Xq/99hckQUEdC90/tU=; b=nMDgD/D2Ljq/ApvjyX42YUXaPrwM4BUkdMxT2M/PtKA13wVBM+AWUKZXxHg7DFYAu1tHTpu8dDoLjKFHjpQ8LX+5/eWGbMTk0tDE5y2xsI962G9+jVUCk/JDKvexTJ3iCFaagNFPwEoaWYA5k46UTX6l1odYEG9hEbMpIXi9msWRDpfTO8pTdqpbVNMcD5GX4cxPtJN+eBVKmT2GCIrqToj3Q6QthKmssagsT6rQvnXVSAmXxquCFMsfAfQ0ILmADXqWPVzzZpYwgecjxgmNk9MNcA0HuRNPrVZ00L5VwiYmOelHPt+sfRmW5FqWDfEPs02fOEUEJLcURvUFWz72bg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:36 +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:28:36 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:24 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [Hk1CZuCy0klLgsIFbj4z8wzDnhISBafO] 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-15-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 08af58a7-e015-4949-9e7f-08d9e3b9bec2 X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LsLHpnX/Lm6eI+I21ryEMTs+5G4LFo9Y8OX8SGOftggO9JOos5ao8HzlZUZsHvvq7Ioy4jzc2m1178yyJ1mNOwC7wFyKSkgJnbeW9jsuFH39gqodn5TZ9WlO2ZF6Weivuw5zO3MRMcY4KtKKC89xtGeCI32KjtcssF1QOHj9fLfVWhOXRZzGDXttiUIjvG3Zp6KPGfzbB8t+HGdfYeWxWh+yhpxbrQy5DFqGueajK6HZilXHGa8Br/ymSdjRO2T84HSNcQZbrwdb8704EWIUCwbMdFuhPJOxEN+Qrj3j1XJloSfL1aBm3X4dKy1KGYBMqeTqrNP0qwMYYGYtU+oL2mYoqjjQqdgIOpguoy0RcY9hGLU+5a5puKJYAYXMDSRVVh0GtEh85VH7buU2myGIJZ3ka/T4AmHB+V66dqDSGw8mJ3nAUjLTTZZvvZuLnCAD93vN9ljfQXd6gtRJ1eF1pF4veIoxjjk/IaAiXJL74WDOFuq5iELJDAnIFtJexj+2laXQ0h5Afdo0QRCHSEFpwK1W6b0EXwCUV+gSGU72/3s= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XArFxVCgy9xLaUppmE6V0ud/dU4ii7qcLtT2Zuigyw0Cd0Ai4YSjaraSLMaUJtIeAMm45ITOfbfCZHLrwPJ1t8F+N6M+IGjKri9i0qmahcLRm/PRIccM+3rRk33GuVEWB/Rwh+J5u7GxZvE/4U8U3doScRNOmJplbx0GCRcUDdqltPBhOKopssNNbo9pn2yzxohDT3mAVCXjm9dSxnxZbWFEO68oAhbXI9eujfUC1kG5rhKGWM9ykM/rczeHNxmdwqzHFX8rRhXrVOx1ibLQ/ZQU9+FmAzHnir1/lEbByzkr1mTXQciJ4w4fJqbOyAoWwLXu2kaHQCSvzK48o3SsG60D/4IA/R+b5gf7+yVXEATeRxBsr0wV3X9oZUNldPQcKrkcbcp7wwXMptzD3pTPF95YY1a4IURngkK6lFXE8wnRn2NTYACr3bmFEy36xK/vWr94StjikbnoI1fgacXnBK2w5GBfervoKINgEnghdUkz0lv+evhfoI6809yiCBn9P8MrdCk5eLzumQG/olV81iYa84k9A71vrveyKR5u1XDKYsxwmjxmIw+NyUBpkVY0AZgEB56MrFQMLng1nrH+is5nyzuYeb7hE/LVolWSrYiuGtvF0/CUZbAwUFnCCS4P2e8dBUsjB2DU6ndOQuKHD4juEYB5Mfmf7fh4OYSa8yn5+B0ikQcHFCbDNInsFQtQurb4gHmHw4MmrCaI5zBmJ5YCm23W6EdzNrWueLFpiGwH++gUrY1rAx1SU7wp4xmpYg0mptmynme7Yl69puZcW59GrprwmttUbwoJL2I+iR3KSo5/y6x6HOG2kgcJktERel4T+dNqhvbQNzYWV5+3qcmeGrET4YCYwRc1kTaPmyls4lrLwO0/KRt5dT69W/RogmM58XeT93ICEs/QD1vZ7gyhgDYTVVOgj2I0T6LyoPAGFMTEgWbNYXRlDMvF4Mvvl+rJ0IpA/LfW8C+0la+n/w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 08af58a7-e015-4949-9e7f-08d9e3b9bec2 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:28:36.6483 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 16/41] avcodec/mpegvideo: Use typedefs for MPV(Main)?(Dec|Enc)?Context 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: /zvZ+dGwmSvm This is in preparation for actually adding such contexts and e.g. moving fields only used by the main thread to the corresponding "Main" context. Signed-off-by: Andreas Rheinhardt --- libavcodec/alpha/mpegvideo_alpha.c | 6 +- libavcodec/arm/asm-offsets.h | 2 +- libavcodec/arm/me_cmp_init_arm.c | 12 +-- libavcodec/arm/mpegvideo_arm.c | 18 ++-- libavcodec/arm/mpegvideo_arm.h | 2 +- libavcodec/arm/mpegvideo_armv5te.c | 6 +- libavcodec/dnxhdenc.c | 4 +- libavcodec/dnxhdenc.h | 4 +- libavcodec/dxva2_mpeg2.c | 14 +-- libavcodec/dxva2_vc1.c | 6 +- libavcodec/flv.h | 5 +- libavcodec/flvdec.c | 4 +- libavcodec/flvenc.c | 4 +- libavcodec/h261.c | 2 +- libavcodec/h261.h | 11 +-- libavcodec/h261dec.c | 29 +++--- libavcodec/h261enc.c | 16 ++-- libavcodec/h263.c | 8 +- libavcodec/h263.h | 6 +- libavcodec/h263dec.c | 16 ++-- libavcodec/h263dec.h | 15 ++-- libavcodec/h263enc.h | 18 ++-- libavcodec/intelh263dec.c | 4 +- libavcodec/ituh263dec.c | 34 +++---- libavcodec/ituh263enc.c | 23 ++--- libavcodec/me_cmp.c | 60 ++++++------- libavcodec/me_cmp.h | 6 +- libavcodec/mips/h263dsp_mips.h | 6 +- libavcodec/mips/me_cmp_mips.h | 32 +++---- libavcodec/mips/me_cmp_msa.c | 28 +++--- libavcodec/mips/mpegvideo_init_mips.c | 2 +- libavcodec/mips/mpegvideo_mips.h | 12 +-- libavcodec/mips/mpegvideo_mmi.c | 12 +-- libavcodec/mips/mpegvideo_msa.c | 6 +- libavcodec/mjpegenc.c | 32 +++---- libavcodec/mjpegenc.h | 14 +-- libavcodec/motion_est.c | 54 +++++------ libavcodec/motion_est.h | 25 +++--- libavcodec/motion_est_template.c | 34 +++---- libavcodec/mpeg12.c | 4 +- libavcodec/mpeg12.h | 13 +-- libavcodec/mpeg12dec.c | 112 +++++++++++------------ libavcodec/mpeg12enc.c | 32 +++---- libavcodec/mpeg4video.c | 10 +-- libavcodec/mpeg4video.h | 31 +++---- libavcodec/mpeg4video_parser.c | 2 +- libavcodec/mpeg4videodec.c | 80 ++++++++--------- libavcodec/mpeg4videoenc.c | 40 ++++----- libavcodec/mpeg_er.c | 6 +- libavcodec/mpeg_er.h | 4 +- libavcodec/mpegvideo.c | 79 ++++++++-------- libavcodec/mpegvideo.h | 110 ++++++++++++----------- libavcodec/mpegvideo_dec.c | 24 ++--- libavcodec/mpegvideo_enc.c | 119 ++++++++++++++----------- libavcodec/mpegvideo_motion.c | 28 +++--- libavcodec/mpegvideo_xvmc.c | 14 +-- libavcodec/mpegvideoenc.h | 19 ++-- libavcodec/msmpeg4.c | 6 +- libavcodec/msmpeg4.h | 14 +-- libavcodec/msmpeg4dec.c | 28 +++--- libavcodec/msmpeg4enc.c | 21 ++--- libavcodec/msmpeg4enc.h | 18 ++-- libavcodec/mss2.c | 2 +- libavcodec/neon/mpegvideo.c | 6 +- libavcodec/nvdec_mpeg12.c | 2 +- libavcodec/nvdec_mpeg4.c | 2 +- libavcodec/nvdec_vc1.c | 2 +- libavcodec/ppc/me_cmp.c | 22 ++--- libavcodec/ppc/mpegvideo_altivec.c | 4 +- libavcodec/ratecontrol.c | 24 ++--- libavcodec/ratecontrol.h | 16 ++-- libavcodec/rv10.c | 16 ++-- libavcodec/rv10.h | 7 +- libavcodec/rv10enc.c | 4 +- libavcodec/rv20enc.c | 5 +- libavcodec/rv30.c | 4 +- libavcodec/rv34.c | 38 ++++---- libavcodec/rv34.h | 2 +- libavcodec/rv40.c | 6 +- libavcodec/snow.h | 4 +- libavcodec/snow_dwt.c | 16 ++-- libavcodec/snow_dwt.h | 9 +- libavcodec/speedhqenc.c | 12 +-- libavcodec/speedhqenc.h | 12 +-- libavcodec/svq1enc.c | 3 +- libavcodec/svq1enc.h | 6 +- libavcodec/vaapi_mpeg2.c | 10 +-- libavcodec/vaapi_mpeg4.c | 6 +- libavcodec/vaapi_vc1.c | 10 +-- libavcodec/vc1.h | 2 +- libavcodec/vc1_block.c | 44 ++++----- libavcodec/vc1_loopfilter.c | 28 +++--- libavcodec/vc1_mc.c | 14 +-- libavcodec/vc1_pred.c | 8 +- libavcodec/vc1dec.c | 13 ++- libavcodec/vdpau.c | 2 +- libavcodec/vdpau_mpeg12.c | 4 +- libavcodec/vdpau_mpeg4.c | 2 +- libavcodec/vdpau_vc1.c | 4 +- libavcodec/videotoolbox.c | 2 +- libavcodec/wmv2.c | 4 +- libavcodec/wmv2.h | 19 ++-- libavcodec/wmv2dec.c | 24 ++--- libavcodec/wmv2enc.c | 8 +- libavcodec/x86/me_cmp.asm | 16 ++-- libavcodec/x86/me_cmp_init.c | 72 +++++++-------- libavcodec/x86/mpegvideo.c | 14 +-- libavcodec/x86/mpegvideoenc.c | 8 +- libavcodec/x86/mpegvideoenc_template.c | 2 +- libavcodec/xvmc_internal.h | 6 +- 110 files changed, 999 insertions(+), 953 deletions(-) diff --git a/libavcodec/alpha/mpegvideo_alpha.c b/libavcodec/alpha/mpegvideo_alpha.c index 126fe264a1..ee553ae2fb 100644 --- a/libavcodec/alpha/mpegvideo_alpha.c +++ b/libavcodec/alpha/mpegvideo_alpha.c @@ -69,7 +69,7 @@ static void dct_unquantize_h263_axp(int16_t *block, int n_coeffs, } } -static void dct_unquantize_h263_intra_axp(MpegEncContext *s, int16_t *block, +static void dct_unquantize_h263_intra_axp(MPVContext *s, int16_t *block, int n, int qscale) { int n_coeffs; @@ -96,14 +96,14 @@ static void dct_unquantize_h263_intra_axp(MpegEncContext *s, int16_t *block, block[0] = block0; } -static void dct_unquantize_h263_inter_axp(MpegEncContext *s, int16_t *block, +static void dct_unquantize_h263_inter_axp(MPVContext *s, int16_t *block, int n, int qscale) { int n_coeffs = s->inter_scantable.raster_end[s->block_last_index[n]]; dct_unquantize_h263_axp(block, n_coeffs, qscale, (qscale - 1) | 1); } -av_cold void ff_mpv_common_init_axp(MpegEncContext *s) +av_cold void ff_mpv_common_init_axp(MPVMainContext *s) { s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_axp; s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_axp; diff --git a/libavcodec/arm/asm-offsets.h b/libavcodec/arm/asm-offsets.h index a2174b0a08..65a3f819cc 100644 --- a/libavcodec/arm/asm-offsets.h +++ b/libavcodec/arm/asm-offsets.h @@ -21,7 +21,7 @@ #ifndef AVCODEC_ARM_ASM_OFFSETS_H #define AVCODEC_ARM_ASM_OFFSETS_H -/* MpegEncContext */ +/* MPVContext */ #define Y_DC_SCALE 0x04 #define C_DC_SCALE 0x08 #define AC_PRED 0x0c diff --git a/libavcodec/arm/me_cmp_init_arm.c b/libavcodec/arm/me_cmp_init_arm.c index 03870a2bfa..981c247c75 100644 --- a/libavcodec/arm/me_cmp_init_arm.c +++ b/libavcodec/arm/me_cmp_init_arm.c @@ -23,19 +23,19 @@ #include "libavutil/arm/cpu.h" #include "libavcodec/avcodec.h" #include "libavcodec/me_cmp.h" -#include "libavcodec/mpegvideo.h" +#include "libavcodec/mpegvideoenc.h" -int ff_pix_abs16_armv6(MpegEncContext *s, uint8_t *blk1, uint8_t *blk2, +int ff_pix_abs16_armv6(MPVEncContext *s, uint8_t *blk1, uint8_t *blk2, ptrdiff_t stride, int h); -int ff_pix_abs16_x2_armv6(MpegEncContext *s, uint8_t *blk1, uint8_t *blk2, +int ff_pix_abs16_x2_armv6(MPVEncContext *s, uint8_t *blk1, uint8_t *blk2, ptrdiff_t stride, int h); -int ff_pix_abs16_y2_armv6(MpegEncContext *s, uint8_t *blk1, uint8_t *blk2, +int ff_pix_abs16_y2_armv6(MPVEncContext *s, uint8_t *blk1, uint8_t *blk2, ptrdiff_t stride, int h); -int ff_pix_abs8_armv6(MpegEncContext *s, uint8_t *blk1, uint8_t *blk2, +int ff_pix_abs8_armv6(MPVEncContext *s, uint8_t *blk1, uint8_t *blk2, ptrdiff_t stride, int h); -int ff_sse16_armv6(MpegEncContext *s, uint8_t *blk1, uint8_t *blk2, +int ff_sse16_armv6(MPVEncContext *s, uint8_t *blk1, uint8_t *blk2, ptrdiff_t stride, int h); av_cold void ff_me_cmp_init_arm(MECmpContext *c, AVCodecContext *avctx) diff --git a/libavcodec/arm/mpegvideo_arm.c b/libavcodec/arm/mpegvideo_arm.c index 008ef18eea..daea438bb1 100644 --- a/libavcodec/arm/mpegvideo_arm.c +++ b/libavcodec/arm/mpegvideo_arm.c @@ -27,21 +27,21 @@ #include "asm-offsets.h" #if HAVE_NEON -AV_CHECK_OFFSET(MpegEncContext, y_dc_scale, Y_DC_SCALE); -AV_CHECK_OFFSET(MpegEncContext, c_dc_scale, C_DC_SCALE); -AV_CHECK_OFFSET(MpegEncContext, ac_pred, AC_PRED); -AV_CHECK_OFFSET(MpegEncContext, block_last_index, BLOCK_LAST_INDEX); -AV_CHECK_OFFSET(MpegEncContext, inter_scantable.raster_end, +AV_CHECK_OFFSET(MPVContext, y_dc_scale, Y_DC_SCALE); +AV_CHECK_OFFSET(MPVContext, c_dc_scale, C_DC_SCALE); +AV_CHECK_OFFSET(MPVContext, ac_pred, AC_PRED); +AV_CHECK_OFFSET(MPVContext, block_last_index, BLOCK_LAST_INDEX); +AV_CHECK_OFFSET(MPVContext, inter_scantable.raster_end, INTER_SCANTAB_RASTER_END); -AV_CHECK_OFFSET(MpegEncContext, h263_aic, H263_AIC); +AV_CHECK_OFFSET(MPVContext, h263_aic, H263_AIC); #endif -void ff_dct_unquantize_h263_inter_neon(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_h263_inter_neon(MPVContext *s, int16_t *block, int n, int qscale); -void ff_dct_unquantize_h263_intra_neon(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_h263_intra_neon(MPVContext *s, int16_t *block, int n, int qscale); -av_cold void ff_mpv_common_init_arm(MpegEncContext *s) +av_cold void ff_mpv_common_init_arm(MPVMainContext *s) { int cpu_flags = av_get_cpu_flags(); diff --git a/libavcodec/arm/mpegvideo_arm.h b/libavcodec/arm/mpegvideo_arm.h index 709ae6b247..1ba4053e04 100644 --- a/libavcodec/arm/mpegvideo_arm.h +++ b/libavcodec/arm/mpegvideo_arm.h @@ -21,6 +21,6 @@ #include "libavcodec/mpegvideo.h" -void ff_mpv_common_init_armv5te(MpegEncContext *s); +void ff_mpv_common_init_armv5te(MPVMainContext *s); #endif /* AVCODEC_ARM_MPEGVIDEO_ARM_H */ diff --git a/libavcodec/arm/mpegvideo_armv5te.c b/libavcodec/arm/mpegvideo_armv5te.c index e20bb4c645..3b5185baee 100644 --- a/libavcodec/arm/mpegvideo_armv5te.c +++ b/libavcodec/arm/mpegvideo_armv5te.c @@ -50,7 +50,7 @@ static inline void dct_unquantize_h263_helper_c(int16_t *block, int qmul, int qa } #endif -static void dct_unquantize_h263_intra_armv5te(MpegEncContext *s, +static void dct_unquantize_h263_intra_armv5te(MPVContext *s, int16_t *block, int n, int qscale) { int level, qmul, qadd; @@ -79,7 +79,7 @@ static void dct_unquantize_h263_intra_armv5te(MpegEncContext *s, block[0] = level; } -static void dct_unquantize_h263_inter_armv5te(MpegEncContext *s, +static void dct_unquantize_h263_inter_armv5te(MPVContext *s, int16_t *block, int n, int qscale) { int qmul, qadd; @@ -95,7 +95,7 @@ static void dct_unquantize_h263_inter_armv5te(MpegEncContext *s, ff_dct_unquantize_h263_armv5te(block, qmul, qadd, nCoeffs + 1); } -av_cold void ff_mpv_common_init_armv5te(MpegEncContext *s) +av_cold void ff_mpv_common_init_armv5te(MPVMainContext *s) { s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_armv5te; s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_armv5te; diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c index ac92474e56..74989276b9 100644 --- a/libavcodec/dnxhdenc.c +++ b/libavcodec/dnxhdenc.c @@ -115,7 +115,7 @@ void dnxhd_10bit_get_pixels_8x4_sym(int16_t *av_restrict block, memcpy(block + 4 * 8, pixels + 3 * line_size, 8 * sizeof(*block)); } -static int dnxhd_10bit_dct_quantize_444(MpegEncContext *ctx, int16_t *block, +static int dnxhd_10bit_dct_quantize_444(MPVEncContext *ctx, int16_t *block, int n, int qscale, int *overflow) { int i, j, level, last_non_zero, start_i; @@ -174,7 +174,7 @@ static int dnxhd_10bit_dct_quantize_444(MpegEncContext *ctx, int16_t *block, return last_non_zero; } -static int dnxhd_10bit_dct_quantize(MpegEncContext *ctx, int16_t *block, +static int dnxhd_10bit_dct_quantize(MPVEncContext *ctx, int16_t *block, int n, int qscale, int *overflow) { const uint8_t *scantable= ctx->intra_scantable.scantable; diff --git a/libavcodec/dnxhdenc.h b/libavcodec/dnxhdenc.h index 9e4c869bc4..ef52735ad6 100644 --- a/libavcodec/dnxhdenc.h +++ b/libavcodec/dnxhdenc.h @@ -30,8 +30,8 @@ #include "libavutil/mem_internal.h" -#include "mpegvideo.h" #include "dnxhddata.h" +#include "mpegvideoenc.h" typedef struct RCCMPEntry { uint16_t mb; @@ -46,7 +46,7 @@ typedef struct RCEntry { typedef struct DNXHDEncContext { AVClass *class; BlockDSPContext bdsp; - MpegEncContext m; ///< Used for quantization dsp functions + MPVMainEncContext m; ///< Used for quantization dsp functions int cid; int profile; diff --git a/libavcodec/dxva2_mpeg2.c b/libavcodec/dxva2_mpeg2.c index 8cc21bf199..76932d4d63 100644 --- a/libavcodec/dxva2_mpeg2.c +++ b/libavcodec/dxva2_mpeg2.c @@ -39,7 +39,7 @@ struct dxva2_picture_context { static void fill_picture_parameters(AVCodecContext *avctx, AVDXVAContext *ctx, - const struct MpegEncContext *s, + const struct MPVDecContext *s, DXVA_PictureParameters *pp) { const Picture *current_picture = s->current_picture_ptr; @@ -105,7 +105,7 @@ static void fill_picture_parameters(AVCodecContext *avctx, static void fill_quantization_matrices(AVCodecContext *avctx, AVDXVAContext *ctx, - const struct MpegEncContext *s, + const struct MPVDecContext *s, DXVA_QmatrixData *qm) { int i; @@ -121,7 +121,7 @@ static void fill_quantization_matrices(AVCodecContext *avctx, } static void fill_slice(AVCodecContext *avctx, - const struct MpegEncContext *s, + const struct MPVDecContext *s, DXVA_SliceInfo *slice, unsigned position, const uint8_t *buffer, unsigned size) @@ -151,7 +151,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, DECODER_BUFFER_DESC *bs, DECODER_BUFFER_DESC *sc) { - const struct MpegEncContext *s = avctx->priv_data; + const struct MPVDecContext *const s = avctx->priv_data; AVDXVAContext *ctx = DXVA_CONTEXT(avctx); struct dxva2_picture_context *ctx_pic = s->current_picture_ptr->hwaccel_picture_private; @@ -254,7 +254,7 @@ static int dxva2_mpeg2_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size) { - const struct MpegEncContext *s = avctx->priv_data; + const struct MPVDecContext *const s = avctx->priv_data; AVDXVAContext *ctx = DXVA_CONTEXT(avctx); struct dxva2_picture_context *ctx_pic = s->current_picture_ptr->hwaccel_picture_private; @@ -275,7 +275,7 @@ static int dxva2_mpeg2_start_frame(AVCodecContext *avctx, static int dxva2_mpeg2_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { - const struct MpegEncContext *s = avctx->priv_data; + const struct MPVDecContext *const s = avctx->priv_data; struct dxva2_picture_context *ctx_pic = s->current_picture_ptr->hwaccel_picture_private; unsigned position; @@ -297,7 +297,7 @@ static int dxva2_mpeg2_decode_slice(AVCodecContext *avctx, static int dxva2_mpeg2_end_frame(AVCodecContext *avctx) { - struct MpegEncContext *s = avctx->priv_data; + struct MPVDecContext *const s = avctx->priv_data; struct dxva2_picture_context *ctx_pic = s->current_picture_ptr->hwaccel_picture_private; int ret; diff --git a/libavcodec/dxva2_vc1.c b/libavcodec/dxva2_vc1.c index f08ac8b5a0..d3171a2443 100644 --- a/libavcodec/dxva2_vc1.c +++ b/libavcodec/dxva2_vc1.c @@ -40,7 +40,7 @@ static void fill_picture_parameters(AVCodecContext *avctx, AVDXVAContext *ctx, const VC1Context *v, DXVA_PictureParameters *pp) { - const MpegEncContext *s = &v->s; + const MPVDecContext *const s = &v->s; const Picture *current_picture = s->current_picture_ptr; int intcomp = 0; @@ -163,7 +163,7 @@ static void fill_slice(AVCodecContext *avctx, DXVA_SliceInfo *slice, unsigned position, unsigned size) { const VC1Context *v = avctx->priv_data; - const MpegEncContext *s = &v->s; + const MPVDecContext *const s = &v->s; memset(slice, 0, sizeof(*slice)); slice->wHorizontalPosition = 0; @@ -185,7 +185,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, { const VC1Context *v = avctx->priv_data; AVDXVAContext *ctx = DXVA_CONTEXT(avctx); - const MpegEncContext *s = &v->s; + const MPVDecContext *const s = &v->s; struct dxva2_picture_context *ctx_pic = s->current_picture_ptr->hwaccel_picture_private; static const uint8_t start_code[] = { 0, 0, 1, 0x0d }; diff --git a/libavcodec/flv.h b/libavcodec/flv.h index 561cfe0baa..54b13faeb1 100644 --- a/libavcodec/flv.h +++ b/libavcodec/flv.h @@ -23,12 +23,13 @@ #include "get_bits.h" #include "mpegvideo.h" +#include "mpegvideoenc.h" #include "put_bits.h" -void ff_flv_encode_picture_header(MpegEncContext *s, int picture_number); +void ff_flv_encode_picture_header(MPVMainEncContext *s, int picture_number); void ff_flv2_encode_ac_esc(PutBitContext *pb, int slevel, int level, int run, int last); -int ff_flv_decode_picture_header(MpegEncContext *s); +int ff_flv_decode_picture_header(MPVMainDecContext *s); #endif /* AVCODEC_FLV_H */ diff --git a/libavcodec/flvdec.c b/libavcodec/flvdec.c index 108cf88e34..27bad20efb 100644 --- a/libavcodec/flvdec.c +++ b/libavcodec/flvdec.c @@ -26,7 +26,7 @@ #include "mpegvideo.h" #include "mpegvideodata.h" -int ff_flv_decode_picture_header(MpegEncContext *s) +int ff_flv_decode_picture_header(MPVMainDecContext *s) { int format, width, height; @@ -118,7 +118,7 @@ const AVCodec ff_flv_decoder = { .long_name = NULL_IF_CONFIG_SMALL("FLV / Sorenson Spark / Sorenson H.263 (Flash Video)"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_FLV1, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainDecContext), .init = ff_h263_decode_init, .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, diff --git a/libavcodec/flvenc.c b/libavcodec/flvenc.c index 6824327734..1de9e4da55 100644 --- a/libavcodec/flvenc.c +++ b/libavcodec/flvenc.c @@ -24,7 +24,7 @@ #include "mpegvideodata.h" #include "mpegvideoenc.h" -void ff_flv_encode_picture_header(MpegEncContext *s, int picture_number) +void ff_flv_encode_picture_header(MPVMainEncContext *s, int picture_number) { int format; @@ -97,7 +97,7 @@ const AVCodec ff_flv_encoder = { .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_FLV1, .priv_class = &ff_mpv_enc_class, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainEncContext), .init = ff_mpv_encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, diff --git a/libavcodec/h261.c b/libavcodec/h261.c index 7dfaee7dc4..a4ad742d76 100644 --- a/libavcodec/h261.c +++ b/libavcodec/h261.c @@ -58,7 +58,7 @@ static void h261_loop_filter(uint8_t *src, int stride) } } -void ff_h261_loop_filter(MpegEncContext *s) +void ff_h261_loop_filter(MPVContext *s) { H261Context *const h = s->private_ctx; const int linesize = s->linesize; diff --git a/libavcodec/h261.h b/libavcodec/h261.h index ff1903e508..ba9b7a033e 100644 --- a/libavcodec/h261.h +++ b/libavcodec/h261.h @@ -29,6 +29,7 @@ #define AVCODEC_H261_H #include "mpegvideo.h" +#include "mpegvideoenc.h" #include "rl.h" /** @@ -49,13 +50,13 @@ extern const uint8_t ff_h261_mv_tab[17][2]; extern const uint8_t ff_h261_cbp_tab[63][2]; extern RLTable ff_h261_rl_tcoeff; -void ff_h261_loop_filter(MpegEncContext *s); +void ff_h261_loop_filter(MPVContext *s); int ff_h261_get_picture_format(int width, int height); -void ff_h261_reorder_mb_index(MpegEncContext *s); -void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], +void ff_h261_reorder_mb_index(MPVEncContext *s); +void ff_h261_encode_mb(MPVEncContext *s, int16_t block[6][64], int motion_x, int motion_y); -void ff_h261_encode_picture_header(MpegEncContext *s, int picture_number); -void ff_h261_encode_init(MpegEncContext *s); +void ff_h261_encode_picture_header(MPVMainEncContext *s, int picture_number); +void ff_h261_encode_init(MPVMainEncContext *s); #endif /* AVCODEC_H261_H */ diff --git a/libavcodec/h261dec.c b/libavcodec/h261dec.c index 17f1067b15..b95a9f6a80 100644 --- a/libavcodec/h261dec.c +++ b/libavcodec/h261dec.c @@ -48,7 +48,7 @@ static VLC h261_mv_vlc; static VLC h261_cbp_vlc; typedef struct H261DecContext { - MpegEncContext s; + MPVMainDecContext s; H261Context common; @@ -81,7 +81,7 @@ static av_cold int h261_decode_init(AVCodecContext *avctx) { static AVOnce init_static_once = AV_ONCE_INIT; H261DecContext *const h = avctx->priv_data; - MpegEncContext *const s = &h->s; + MPVMainDecContext *const s = &h->s; s->private_ctx = &h->common; // set defaults @@ -106,7 +106,7 @@ static av_cold int h261_decode_init(AVCodecContext *avctx) static int h261_decode_gob_header(H261DecContext *h) { unsigned int val; - MpegEncContext *const s = &h->s; + MPVDecContext *const s = &h->s; if (!h->gob_start_code_skipped) { /* Check for GOB Start Code */ @@ -159,7 +159,7 @@ static int h261_decode_gob_header(H261DecContext *h) */ static int h261_resync(H261DecContext *h) { - MpegEncContext *const s = &h->s; + MPVDecContext *const s = &h->s; int left, ret; if (h->gob_start_code_skipped) { @@ -200,7 +200,7 @@ static int h261_resync(H261DecContext *h) */ static int h261_decode_mb_skipped(H261DecContext *h, int mba1, int mba2) { - MpegEncContext *const s = &h->s; + MPVDecContext *const s = &h->s; int i; s->mb_intra = 0; @@ -270,7 +270,7 @@ static int decode_mv_component(GetBitContext *gb, int v) */ static int h261_decode_block(H261DecContext *h, int16_t *block, int n, int coded) { - MpegEncContext *const s = &h->s; + MPVDecContext *const s = &h->s; int level, i, j, run; RLTable *rl = &ff_h261_rl_tcoeff; const uint8_t *scan_table; @@ -362,7 +362,7 @@ static int h261_decode_block(H261DecContext *h, int16_t *block, int n, int coded static int h261_decode_mb(H261DecContext *h) { - MpegEncContext *const s = &h->s; + MPVDecContext *const s = &h->s; H261Context *const com = &h->common; int i, cbp, xy; @@ -487,7 +487,7 @@ intra: */ static int h261_decode_picture_header(H261DecContext *h) { - MpegEncContext *const s = &h->s; + MPVDecContext *const s = &h->s; int format, i; uint32_t startcode = 0; @@ -551,7 +551,7 @@ static int h261_decode_picture_header(H261DecContext *h) static int h261_decode_gob(H261DecContext *h) { - MpegEncContext *const s = &h->s; + MPVDecContext *const s = &h->s; ff_set_qscale(s, s->qscale); @@ -581,7 +581,7 @@ static int h261_decode_gob(H261DecContext *h) /** * returns the number of bytes consumed for building the current frame */ -static int get_consumed_bytes(MpegEncContext *s, int buf_size) +static int get_consumed_bytes(MPVDecContext *s, int buf_size) { int pos = get_bits_count(&s->gb) >> 3; if (pos == 0) @@ -596,9 +596,10 @@ static int h261_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt) { H261DecContext *const h = avctx->priv_data; + MPVMainDecContext *const s2 = &h->s; + MPVDecContext *const s = s2; const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; - MpegEncContext *s = &h->s; int ret; AVFrame *pict = data; @@ -619,11 +620,11 @@ retry: } if (s->width != avctx->coded_width || s->height != avctx->coded_height) { - ff_mpv_common_end(s); + ff_mpv_common_end(s2); } if (!s->context_initialized) { - if ((ret = ff_mpv_common_init(s)) < 0) + if ((ret = ff_mpv_common_init(s2)) < 0) return ret; ret = ff_set_dimensions(avctx, s->width, s->height); @@ -673,7 +674,7 @@ retry: static av_cold int h261_decode_end(AVCodecContext *avctx) { H261DecContext *const h = avctx->priv_data; - MpegEncContext *s = &h->s; + MPVMainContext *const s = &h->s; ff_mpv_common_end(s); return 0; diff --git a/libavcodec/h261enc.c b/libavcodec/h261enc.c index 710d292df6..a2e4c55c93 100644 --- a/libavcodec/h261enc.c +++ b/libavcodec/h261enc.c @@ -39,7 +39,7 @@ static uint8_t uni_h261_rl_len [64*64*2*2]; #define UNI_ENC_INDEX(last,run,level) ((last)*128*64 + (run)*128 + (level)) typedef struct H261EncContext { - MpegEncContext s; + MPVMainEncContext s; H261Context common; @@ -59,7 +59,7 @@ int ff_h261_get_picture_format(int width, int height) return AVERROR(EINVAL); } -void ff_h261_encode_picture_header(MpegEncContext *s, int picture_number) +void ff_h261_encode_picture_header(MPVMainEncContext *s, int picture_number) { H261EncContext *const h = (H261EncContext *)s; int format, temp_ref; @@ -97,7 +97,7 @@ void ff_h261_encode_picture_header(MpegEncContext *s, int picture_number) /** * Encode a group of blocks header. */ -static void h261_encode_gob_header(MpegEncContext *s, int mb_line) +static void h261_encode_gob_header(MPVEncContext *s, int mb_line) { H261EncContext *const h = (H261EncContext *)s; if (ff_h261_get_picture_format(s->width, s->height) == 0) { @@ -114,7 +114,7 @@ static void h261_encode_gob_header(MpegEncContext *s, int mb_line) s->last_mv[0][0][1] = 0; } -void ff_h261_reorder_mb_index(MpegEncContext *s) +void ff_h261_reorder_mb_index(MPVEncContext *s) { int index = s->mb_x + s->mb_y * s->mb_width; @@ -159,7 +159,7 @@ static void h261_encode_motion(PutBitContext *pb, int val) } } -static inline int get_cbp(MpegEncContext *s, int16_t block[6][64]) +static inline int get_cbp(MPVEncContext *s, int16_t block[6][64]) { int i, cbp; cbp = 0; @@ -176,7 +176,7 @@ static inline int get_cbp(MpegEncContext *s, int16_t block[6][64]) */ static void h261_encode_block(H261EncContext *h, int16_t *block, int n) { - MpegEncContext *const s = &h->s; + MPVEncContext *const s = &h->s; int level, run, i, j, last_index, last_non_zero, sign, slevel, code; RLTable *rl; @@ -242,7 +242,7 @@ static void h261_encode_block(H261EncContext *h, int16_t *block, int n) put_bits(&s->pb, rl->table_vlc[0][1], rl->table_vlc[0][0]); // EOB } -void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], +void ff_h261_encode_mb(MPVEncContext *s, int16_t block[6][64], int motion_x, int motion_y) { /* The following is only allowed because this encoder @@ -380,7 +380,7 @@ static av_cold void h261_encode_init_static(void) init_uni_h261_rl_tab(&ff_h261_rl_tcoeff, uni_h261_rl_len); } -av_cold void ff_h261_encode_init(MpegEncContext *s) +av_cold void ff_h261_encode_init(MPVMainEncContext *s) { H261EncContext *const h = (H261EncContext*)s; static AVOnce init_static_once = AV_ONCE_INIT; diff --git a/libavcodec/h263.c b/libavcodec/h263.c index b30ffaf878..c60666172a 100644 --- a/libavcodec/h263.c +++ b/libavcodec/h263.c @@ -50,7 +50,8 @@ av_cold void ff_h263_init_rl_inter(void) ff_thread_once(&init_static_once, h263_init_rl_inter); } -void ff_h263_update_motion_val(MpegEncContext * s){ +void ff_h263_update_motion_val(MPVContext *s) +{ const int mb_xy = s->mb_y * s->mb_stride + s->mb_x; //FIXME a lot of that is only needed for !low_delay const int wrap = s->b8_stride; @@ -102,7 +103,8 @@ void ff_h263_update_motion_val(MpegEncContext * s){ } } -void ff_h263_loop_filter(MpegEncContext * s){ +void ff_h263_loop_filter(MPVContext *s) +{ int qp_c; const int linesize = s->linesize; const int uvlinesize= s->uvlinesize; @@ -187,7 +189,7 @@ void ff_h263_loop_filter(MpegEncContext * s){ } } -int16_t *ff_h263_pred_motion(MpegEncContext * s, int block, int dir, +int16_t *ff_h263_pred_motion(MPVContext * s, int block, int dir, int *px, int *py) { int wrap; diff --git a/libavcodec/h263.h b/libavcodec/h263.h index 5e4a5bc6e5..a3ad0625d5 100644 --- a/libavcodec/h263.h +++ b/libavcodec/h263.h @@ -28,11 +28,11 @@ #define H263_GOB_HEIGHT(h) ((h) <= 400 ? 1 : (h) <= 800 ? 2 : 4) av_const int ff_h263_aspect_to_info(AVRational aspect); -int16_t *ff_h263_pred_motion(MpegEncContext * s, int block, int dir, +int16_t *ff_h263_pred_motion(MPVContext * s, int block, int dir, int *px, int *py); void ff_h263_init_rl_inter(void); -void ff_h263_update_motion_val(MpegEncContext * s); -void ff_h263_loop_filter(MpegEncContext * s); +void ff_h263_update_motion_val(MPVContext * s); +void ff_h263_loop_filter(MPVContext * s); diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index 3466027286..56138eca04 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -55,7 +55,7 @@ static enum AVPixelFormat h263_get_format(AVCodecContext *avctx) { /* MPEG-4 Studio Profile only, not supported by hardware */ if (avctx->bits_per_raw_sample > 8) { - av_assert1(((MpegEncContext *)avctx->priv_data)->studio_profile); + av_assert1(((MPVDecContext *)avctx->priv_data)->studio_profile); return avctx->pix_fmt; } @@ -73,7 +73,7 @@ static enum AVPixelFormat h263_get_format(AVCodecContext *avctx) av_cold int ff_h263_decode_init(AVCodecContext *avctx) { - MpegEncContext *s = avctx->priv_data; + MPVMainDecContext *const s = avctx->priv_data; int ret; s->out_format = FMT_H263; @@ -156,7 +156,7 @@ av_cold int ff_h263_decode_init(AVCodecContext *avctx) av_cold int ff_h263_decode_end(AVCodecContext *avctx) { - MpegEncContext *s = avctx->priv_data; + MPVMainDecContext *const s = avctx->priv_data; ff_mpv_common_end(s); return 0; @@ -165,7 +165,7 @@ av_cold int ff_h263_decode_end(AVCodecContext *avctx) /** * Return the number of bytes consumed for building the current frame. */ -static int get_consumed_bytes(MpegEncContext *s, int buf_size) +static int get_consumed_bytes(MPVMainDecContext *s, int buf_size) { int pos = (get_bits_count(&s->gb) + 7) >> 3; @@ -193,7 +193,7 @@ static int get_consumed_bytes(MpegEncContext *s, int buf_size) } } -static int decode_slice(MpegEncContext *s) +static int decode_slice(MPVMainDecContext *s) { const int part_mask = s->partitioned_frame ? (ER_AC_END | ER_AC_ERROR) : 0x7F; @@ -425,9 +425,9 @@ static int decode_slice(MpegEncContext *s) int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt) { + MPVMainDecContext *const s = avctx->priv_data; const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; - MpegEncContext *s = avctx->priv_data; int ret; int slice_ret = 0; AVFrame *pict = data; @@ -763,7 +763,7 @@ const AVCodec ff_h263_decoder = { .long_name = NULL_IF_CONFIG_SMALL("H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_H263, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainDecContext), .init = ff_h263_decode_init, .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, @@ -784,7 +784,7 @@ const AVCodec ff_h263p_decoder = { .long_name = NULL_IF_CONFIG_SMALL("H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_H263P, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainDecContext), .init = ff_h263_decode_init, .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, diff --git a/libavcodec/h263dec.h b/libavcodec/h263dec.h index 8d5f9a7add..5261844812 100644 --- a/libavcodec/h263dec.h +++ b/libavcodec/h263dec.h @@ -40,26 +40,25 @@ extern VLC ff_h263_mv_vlc; extern const enum AVPixelFormat ff_h263_hwaccel_pixfmt_list_420[]; -int ff_h263_decode_motion(MpegEncContext * s, int pred, int f_code); +int ff_h263_decode_motion(MPVDecContext * s, int pred, int f_code); int ff_h263_decode_init(AVCodecContext *avctx); int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt); int ff_h263_decode_end(AVCodecContext *avctx); void ff_h263_decode_init_vlc(void); -int ff_h263_decode_picture_header(MpegEncContext *s); -int ff_h263_decode_gob_header(MpegEncContext *s); -int ff_h263_decode_mba(MpegEncContext *s); +int ff_h263_decode_picture_header(MPVMainDecContext *s); +int ff_h263_decode_mba(MPVDecContext *s); /** * Print picture info if FF_DEBUG_PICT_INFO is set. */ -void ff_h263_show_pict_info(MpegEncContext *s); +void ff_h263_show_pict_info(MPVMainDecContext *s); -int ff_intel_h263_decode_picture_header(MpegEncContext *s); -int ff_h263_decode_mb(MpegEncContext *s, +int ff_intel_h263_decode_picture_header(MPVMainDecContext *s); +int ff_h263_decode_mb(MPVDecContext *s, int16_t block[6][64]); -int ff_h263_resync(MpegEncContext *s); +int ff_h263_resync(MPVMainDecContext *s); #endif diff --git a/libavcodec/h263enc.h b/libavcodec/h263enc.h index fff85a18f2..180eb52be3 100644 --- a/libavcodec/h263enc.h +++ b/libavcodec/h263enc.h @@ -24,16 +24,16 @@ #include "h263data.h" #include "mpegvideoenc.h" -void ff_h263_encode_init(MpegEncContext *s); -void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number); -void ff_h263_encode_gob_header(MpegEncContext * s, int mb_line); -void ff_h263_encode_mb(MpegEncContext *s, +void ff_h263_encode_init(MPVMainEncContext *s); +void ff_h263_encode_picture_header(MPVMainEncContext *s, int picture_number); +void ff_h263_encode_gob_header(MPVEncContext * s, int mb_line); +void ff_h263_encode_mb(MPVEncContext *s, int16_t block[6][64], int motion_x, int motion_y); -void ff_h263_encode_mba(MpegEncContext *s); +void ff_h263_encode_mba(MPVEncContext *s); -void ff_init_qscale_tab(MpegEncContext *s); -void ff_clean_h263_qscales(MpegEncContext *s); +void ff_init_qscale_tab(MPVMainEncContext *s); +void ff_clean_h263_qscales(MPVMainEncContext *s); void ff_h263_encode_motion(PutBitContext *pb, int val, int f_code); @@ -57,7 +57,7 @@ static inline int h263_get_motion_length(int val, int f_code) } } -static inline void ff_h263_encode_motion_vector(MpegEncContext * s, +static inline void ff_h263_encode_motion_vector(MPVEncContext * s, int x, int y, int f_code) { if (s->avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) { @@ -70,7 +70,7 @@ static inline void ff_h263_encode_motion_vector(MpegEncContext * s, } } -static inline int get_p_cbp(MpegEncContext * s, +static inline int get_p_cbp(MPVEncContext * s, int16_t block[6][64], int motion_x, int motion_y){ int cbp; diff --git a/libavcodec/intelh263dec.c b/libavcodec/intelh263dec.c index b61effa4df..1f79f36f9f 100644 --- a/libavcodec/intelh263dec.c +++ b/libavcodec/intelh263dec.c @@ -26,7 +26,7 @@ #include "mpegvideodata.h" /* don't understand why they choose a different header ! */ -int ff_intel_h263_decode_picture_header(MpegEncContext *s) +int ff_intel_h263_decode_picture_header(MPVMainDecContext *s) { int format; @@ -134,7 +134,7 @@ const AVCodec ff_h263i_decoder = { .long_name = NULL_IF_CONFIG_SMALL("Intel H.263"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_H263I, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainDecContext), .init = ff_h263_decode_init, .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, diff --git a/libavcodec/ituh263dec.c b/libavcodec/ituh263dec.c index 7d7a1f01a2..ac19d52a37 100644 --- a/libavcodec/ituh263dec.c +++ b/libavcodec/ituh263dec.c @@ -74,7 +74,8 @@ static const int h263_mb_type_b_map[15]= { MB_TYPE_INTRA4x4 | MB_TYPE_CBP | MB_TYPE_QUANT, }; -void ff_h263_show_pict_info(MpegEncContext *s){ +void ff_h263_show_pict_info(MPVMainDecContext *s) +{ if(s->avctx->debug&FF_DEBUG_PICT_INFO){ av_log(s->avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d%s%s%s%s%s%s%s%s%s %d/%d\n", s->qscale, av_get_picture_type_char(s->pict_type), @@ -136,7 +137,7 @@ av_cold void ff_h263_decode_init_vlc(void) } } -int ff_h263_decode_mba(MpegEncContext *s) +int ff_h263_decode_mba(MPVDecContext *s) { int i, mb_pos; @@ -154,7 +155,7 @@ int ff_h263_decode_mba(MpegEncContext *s) * Decode the group of blocks header or slice header. * @return <0 if an error occurred */ -static int h263_decode_gob_header(MpegEncContext *s) +static int h263_decode_gob_header(MPVMainDecContext *s) { unsigned int val, gob_number; int left; @@ -210,7 +211,8 @@ static int h263_decode_gob_header(MpegEncContext *s) * Decode the group of blocks / video packet header / slice header (MPEG-4 Studio). * @return bit position of the resync_marker, or <0 if none was found */ -int ff_h263_resync(MpegEncContext *s){ +int ff_h263_resync(MPVMainDecContext *s) +{ int left, pos, ret; /* In MPEG-4 studio mode look for a new slice startcode @@ -267,7 +269,7 @@ int ff_h263_resync(MpegEncContext *s){ return -1; } -int ff_h263_decode_motion(MpegEncContext * s, int pred, int f_code) +int ff_h263_decode_motion(MPVDecContext *s, int pred, int f_code) { int code, val, sign, shift; code = get_vlc2(&s->gb, ff_h263_mv_vlc.table, H263_MV_VLC_BITS, 2); @@ -305,7 +307,7 @@ int ff_h263_decode_motion(MpegEncContext * s, int pred, int f_code) /* Decode RVLC of H.263+ UMV */ -static int h263p_decode_umotion(MpegEncContext * s, int pred) +static int h263p_decode_umotion(MPVDecContext *s, int pred) { int code = 0, sign; @@ -335,7 +337,8 @@ static int h263p_decode_umotion(MpegEncContext * s, int pred) /** * read the next MVs for OBMC. yes this is an ugly hack, feel free to send a patch :) */ -static void preview_obmc(MpegEncContext *s){ +static void preview_obmc(MPVDecContext *s) +{ GetBitContext gb= s->gb; int cbpc, i, pred_x, pred_y, mx, my; @@ -427,7 +430,8 @@ end: s->gb= gb; } -static void h263_decode_dquant(MpegEncContext *s){ +static void h263_decode_dquant(MPVDecContext *s) +{ static const int8_t quant_tab[4] = { -1, -2, 1, 2 }; if(s->modified_quant){ @@ -440,7 +444,7 @@ static void h263_decode_dquant(MpegEncContext *s){ ff_set_qscale(s, s->qscale); } -static void h263_pred_acdc(MpegEncContext * s, int16_t *block, int n) +static void h263_pred_acdc(MPVDecContext *s, int16_t *block, int n) { int x, y, wrap, a, c, pred_dc, scale; int16_t *dc_val, *ac_val, *ac_val1; @@ -527,7 +531,7 @@ static void h263_pred_acdc(MpegEncContext * s, int16_t *block, int n) ac_val1[8 + i] = block[s->idsp.idct_permutation[i]]; } -static int h263_decode_block(MpegEncContext * s, int16_t * block, +static int h263_decode_block(MPVDecContext *s, int16_t * block, int n, int coded) { int level, i, j, run; @@ -674,7 +678,7 @@ not_coded: return 0; } -static int h263_skip_b_part(MpegEncContext *s, int cbp) +static int h263_skip_b_part(MPVDecContext *s, int cbp) { LOCAL_ALIGNED_32(int16_t, dblock, [64]); int i, mbi; @@ -716,7 +720,7 @@ static int h263_get_modb(GetBitContext *gb, int pb_frame, int *cbpb) #define tab_size ((signed)FF_ARRAY_ELEMS(s->direct_scale_mv[0])) #define tab_bias (tab_size / 2) -static inline void set_one_direct_mv(MpegEncContext *s, Picture *p, int i) +static inline void set_one_direct_mv(MPVDecContext *s, Picture *p, int i) { int xy = s->block_index[i]; uint16_t time_pp = s->pp_time; @@ -744,7 +748,7 @@ static inline void set_one_direct_mv(MpegEncContext *s, Picture *p, int i) /** * @return the mb_type */ -static int set_direct_mv(MpegEncContext *s) +static int set_direct_mv(MPVDecContext *s) { const int mb_index = s->mb_x + s->mb_y * s->mb_stride; Picture *p = &s->next_picture; @@ -781,7 +785,7 @@ static int set_direct_mv(MpegEncContext *s) } } -int ff_h263_decode_mb(MpegEncContext *s, +int ff_h263_decode_mb(MPVDecContext *s, int16_t block[6][64]) { int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant; @@ -1083,7 +1087,7 @@ end: } /* Most is hardcoded; should extend to handle all H.263 streams. */ -int ff_h263_decode_picture_header(MpegEncContext *s) +int ff_h263_decode_picture_header(MPVMainDecContext *s) { int format, width, height, i, ret; uint32_t startcode; diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c index ef7caf8009..97f3ad95f2 100644 --- a/libavcodec/ituh263enc.c +++ b/libavcodec/ituh263enc.c @@ -102,7 +102,7 @@ av_const int ff_h263_aspect_to_info(AVRational aspect){ return FF_ASPECT_EXTENDED; } -void ff_h263_encode_picture_header(MpegEncContext * s, int picture_number) +void ff_h263_encode_picture_header(MPVMainEncContext * s, int picture_number) { int format, coded_frame_rate, coded_frame_rate_base, i, temp_ref; int best_clock_code=1; @@ -240,7 +240,7 @@ void ff_h263_encode_picture_header(MpegEncContext * s, int picture_number) /** * Encode a group of blocks header. */ -void ff_h263_encode_gob_header(MpegEncContext * s, int mb_line) +void ff_h263_encode_gob_header(MPVEncContext *s, int mb_line) { put_bits(&s->pb, 17, 1); /* GBSC */ @@ -266,7 +266,8 @@ void ff_h263_encode_gob_header(MpegEncContext * s, int mb_line) /** * modify qscale so that encoding is actually possible in H.263 (limit difference to -2..2) */ -void ff_clean_h263_qscales(MpegEncContext *s){ +void ff_clean_h263_qscales(MPVMainEncContext *s) +{ int i; int8_t * const qscale_table = s->current_picture.qscale_table; @@ -299,7 +300,7 @@ static const int dquant_code[5]= {1,0,9,2,3}; * @param block the 8x8 block * @param n block index (0-3 are luma, 4-5 are chroma) */ -static void h263_encode_block(MpegEncContext * s, int16_t * block, int n) +static void h263_encode_block(MPVEncContext *s, int16_t * block, int n) { int level, run, last, i, j, last_index, last_non_zero, sign, slevel, code; RLTable *rl; @@ -447,7 +448,7 @@ static void h263p_encode_umotion(PutBitContext *pb, int val) } } -static int h263_pred_dc(MpegEncContext * s, int n, int16_t **dc_val_ptr) +static int h263_pred_dc(MPVEncContext *s, int n, int16_t **dc_val_ptr) { int x, y, wrap, a, c, pred_dc; int16_t *dc_val; @@ -488,7 +489,7 @@ static int h263_pred_dc(MpegEncContext * s, int n, int16_t **dc_val_ptr) return pred_dc; } -void ff_h263_encode_mb(MpegEncContext * s, +void ff_h263_encode_mb(MPVEncContext *s, int16_t block[6][64], int motion_x, int motion_y) { @@ -811,7 +812,7 @@ static av_cold void h263_encode_init_static(void) init_mv_penalty_and_fcode(); } -av_cold void ff_h263_encode_init(MpegEncContext *s) +av_cold void ff_h263_encode_init(MPVMainEncContext *s) { static AVOnce init_static_once = AV_ONCE_INIT; @@ -866,7 +867,7 @@ av_cold void ff_h263_encode_init(MpegEncContext *s) ff_thread_once(&init_static_once, h263_encode_init_static); } -void ff_h263_encode_mba(MpegEncContext *s) +void ff_h263_encode_mba(MPVEncContext *s) { int i, mb_pos; @@ -877,7 +878,7 @@ void ff_h263_encode_mba(MpegEncContext *s) put_bits(&s->pb, ff_mba_length[i], mb_pos); } -#define OFFSET(x) offsetof(MpegEncContext, x) +#define OFFSET(x) offsetof(MPVMainEncContext, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption h263_options[] = { { "obmc", "use overlapped block motion compensation.", OFFSET(obmc), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, @@ -907,7 +908,7 @@ const AVCodec ff_h263_encoder = { .pix_fmts= (const enum AVPixelFormat[]){AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE}, .priv_class = &h263_class, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainEncContext), .init = ff_mpv_encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, @@ -943,7 +944,7 @@ const AVCodec ff_h263p_encoder = { .priv_class = &h263p_class, .capabilities = AV_CODEC_CAP_SLICE_THREADS, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainEncContext), .init = ff_mpv_encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, diff --git a/libavcodec/me_cmp.c b/libavcodec/me_cmp.c index 60545248b3..8fa8c258ee 100644 --- a/libavcodec/me_cmp.c +++ b/libavcodec/me_cmp.c @@ -27,7 +27,7 @@ #include "copy_block.h" #include "simple_idct.h" #include "me_cmp.h" -#include "mpegvideo.h" +#include "mpegvideoenc.h" #include "config.h" /* (i - 256) * (i - 256) */ @@ -66,7 +66,7 @@ const uint32_t ff_square_tab[512] = { 57600, 58081, 58564, 59049, 59536, 60025, 60516, 61009, 61504, 62001, 62500, 63001, 63504, 64009, 64516, 65025, }; -static int sse4_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int sse4_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i; @@ -83,7 +83,7 @@ static int sse4_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int sse8_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int sse8_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i; @@ -104,7 +104,7 @@ static int sse8_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int sse16_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int sse16_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i; @@ -146,7 +146,7 @@ static int sum_abs_dctelem_c(int16_t *block) #define avg2(a, b) (((a) + (b) + 1) >> 1) #define avg4(a, b, c, d) (((a) + (b) + (c) + (d) + 2) >> 2) -static inline int pix_abs16_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static inline int pix_abs16_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i; @@ -174,7 +174,7 @@ static inline int pix_abs16_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static inline int pix_median_abs16_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static inline int pix_median_abs16_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i, j; @@ -213,7 +213,7 @@ static inline int pix_median_abs16_c(MpegEncContext *v, uint8_t *pix1, uint8_t * return s; } -static int pix_abs16_x2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int pix_abs16_x2_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i; @@ -241,7 +241,7 @@ static int pix_abs16_x2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int pix_abs16_y2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int pix_abs16_y2_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i; @@ -271,7 +271,7 @@ static int pix_abs16_y2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int pix_abs16_xy2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int pix_abs16_xy2_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i; @@ -301,7 +301,7 @@ static int pix_abs16_xy2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static inline int pix_abs8_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static inline int pix_abs8_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i; @@ -321,7 +321,7 @@ static inline int pix_abs8_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static inline int pix_median_abs8_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static inline int pix_median_abs8_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i, j; @@ -352,7 +352,7 @@ static inline int pix_median_abs8_c(MpegEncContext *v, uint8_t *pix1, uint8_t *p return s; } -static int pix_abs8_x2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int pix_abs8_x2_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i; @@ -372,7 +372,7 @@ static int pix_abs8_x2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int pix_abs8_y2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int pix_abs8_y2_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i; @@ -394,7 +394,7 @@ static int pix_abs8_y2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int pix_abs8_xy2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int pix_abs8_xy2_c(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int s = 0, i; @@ -416,7 +416,7 @@ static int pix_abs8_xy2_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int nsse16_c(MpegEncContext *c, uint8_t *s1, uint8_t *s2, +static int nsse16_c(MPVEncContext *c, uint8_t *s1, uint8_t *s2, ptrdiff_t stride, int h) { int score1 = 0, score2 = 0, x, y; @@ -441,7 +441,7 @@ static int nsse16_c(MpegEncContext *c, uint8_t *s1, uint8_t *s2, return score1 + FFABS(score2) * 8; } -static int nsse8_c(MpegEncContext *c, uint8_t *s1, uint8_t *s2, +static int nsse8_c(MPVEncContext *c, uint8_t *s1, uint8_t *s2, ptrdiff_t stride, int h) { int score1 = 0, score2 = 0, x, y; @@ -466,7 +466,7 @@ static int nsse8_c(MpegEncContext *c, uint8_t *s1, uint8_t *s2, return score1 + FFABS(score2) * 8; } -static int zero_cmp(MpegEncContext *s, uint8_t *a, uint8_t *b, +static int zero_cmp(MPVEncContext *s, uint8_t *a, uint8_t *b, ptrdiff_t stride, int h) { return 0; @@ -552,7 +552,7 @@ void ff_set_cmp(MECmpContext *c, me_cmp_func *cmp, int type) #define BUTTERFLYA(x, y) (FFABS((x) + (y)) + FFABS((x) - (y))) -static int hadamard8_diff8x8_c(MpegEncContext *s, uint8_t *dst, +static int hadamard8_diff8x8_c(MPVEncContext *s, uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h) { int i, temp[64], sum = 0; @@ -604,7 +604,7 @@ static int hadamard8_diff8x8_c(MpegEncContext *s, uint8_t *dst, return sum; } -static int hadamard8_intra8x8_c(MpegEncContext *s, uint8_t *src, +static int hadamard8_intra8x8_c(MPVEncContext *s, uint8_t *src, uint8_t *dummy, ptrdiff_t stride, int h) { int i, temp[64], sum = 0; @@ -656,7 +656,7 @@ static int hadamard8_intra8x8_c(MpegEncContext *s, uint8_t *src, return sum; } -static int dct_sad8x8_c(MpegEncContext *s, uint8_t *src1, +static int dct_sad8x8_c(MPVEncContext *s, uint8_t *src1, uint8_t *src2, ptrdiff_t stride, int h) { LOCAL_ALIGNED_16(int16_t, temp, [64]); @@ -697,7 +697,7 @@ static int dct_sad8x8_c(MpegEncContext *s, uint8_t *src1, DST(7, (a4 >> 2) - a7); \ } -static int dct264_sad8x8_c(MpegEncContext *s, uint8_t *src1, +static int dct264_sad8x8_c(MPVEncContext *s, uint8_t *src1, uint8_t *src2, ptrdiff_t stride, int h) { int16_t dct[8][8]; @@ -722,7 +722,7 @@ static int dct264_sad8x8_c(MpegEncContext *s, uint8_t *src1, } #endif -static int dct_max8x8_c(MpegEncContext *s, uint8_t *src1, +static int dct_max8x8_c(MPVEncContext *s, uint8_t *src1, uint8_t *src2, ptrdiff_t stride, int h) { LOCAL_ALIGNED_16(int16_t, temp, [64]); @@ -739,7 +739,7 @@ static int dct_max8x8_c(MpegEncContext *s, uint8_t *src1, return sum; } -static int quant_psnr8x8_c(MpegEncContext *s, uint8_t *src1, +static int quant_psnr8x8_c(MPVEncContext *s, uint8_t *src1, uint8_t *src2, ptrdiff_t stride, int h) { LOCAL_ALIGNED_16(int16_t, temp, [64 * 2]); @@ -764,7 +764,7 @@ static int quant_psnr8x8_c(MpegEncContext *s, uint8_t *src1, return sum; } -static int rd8x8_c(MpegEncContext *s, uint8_t *src1, uint8_t *src2, +static int rd8x8_c(MPVEncContext *s, uint8_t *src1, uint8_t *src2, ptrdiff_t stride, int h) { const uint8_t *scantable = s->intra_scantable.permutated; @@ -841,7 +841,7 @@ static int rd8x8_c(MpegEncContext *s, uint8_t *src1, uint8_t *src2, return distortion + ((bits * s->qscale * s->qscale * 109 + 64) >> 7); } -static int bit8x8_c(MpegEncContext *s, uint8_t *src1, uint8_t *src2, +static int bit8x8_c(MPVEncContext *s, uint8_t *src1, uint8_t *src2, ptrdiff_t stride, int h) { const uint8_t *scantable = s->intra_scantable.permutated; @@ -903,7 +903,7 @@ static int bit8x8_c(MpegEncContext *s, uint8_t *src1, uint8_t *src2, } #define VSAD_INTRA(size) \ -static int vsad_intra ## size ## _c(MpegEncContext *c, \ +static int vsad_intra ## size ## _c(MPVEncContext *c, \ uint8_t *s, uint8_t *dummy, \ ptrdiff_t stride, int h) \ { \ @@ -925,7 +925,7 @@ VSAD_INTRA(8) VSAD_INTRA(16) #define VSAD(size) \ -static int vsad ## size ## _c(MpegEncContext *c, \ +static int vsad ## size ## _c(MPVEncContext *c, \ uint8_t *s1, uint8_t *s2, \ ptrdiff_t stride, int h) \ { \ @@ -945,7 +945,7 @@ VSAD(16) #define SQ(a) ((a) * (a)) #define VSSE_INTRA(size) \ -static int vsse_intra ## size ## _c(MpegEncContext *c, \ +static int vsse_intra ## size ## _c(MPVEncContext *c, \ uint8_t *s, uint8_t *dummy, \ ptrdiff_t stride, int h) \ { \ @@ -967,7 +967,7 @@ VSSE_INTRA(8) VSSE_INTRA(16) #define VSSE(size) \ -static int vsse ## size ## _c(MpegEncContext *c, uint8_t *s1, uint8_t *s2, \ +static int vsse ## size ## _c(MPVEncContext *c, uint8_t *s1, uint8_t *s2, \ ptrdiff_t stride, int h) \ { \ int score = 0, x, y; \ @@ -985,7 +985,7 @@ VSSE(8) VSSE(16) #define WRAPPER8_16_SQ(name8, name16) \ -static int name16(MpegEncContext *s, uint8_t *dst, uint8_t *src, \ +static int name16(MPVEncContext *s, uint8_t *dst, uint8_t *src, \ ptrdiff_t stride, int h) \ { \ int score = 0; \ diff --git a/libavcodec/me_cmp.h b/libavcodec/me_cmp.h index e9b5161c9a..ca9a617a6a 100644 --- a/libavcodec/me_cmp.h +++ b/libavcodec/me_cmp.h @@ -39,13 +39,14 @@ extern const uint32_t ff_square_tab[512]; * !future video codecs might need functions with less strict alignment */ -struct MpegEncContext; +#define MPVEncContext MPVContext +struct MPVEncContext; /* Motion estimation: * h is limited to { width / 2, width, 2 * width }, * but never larger than 16 and never smaller than 2. * Although currently h < 4 is not used as functions with * width < 8 are neither used nor implemented. */ -typedef int (*me_cmp_func)(struct MpegEncContext *c, +typedef int (*me_cmp_func)(struct MPVEncContext *c, uint8_t *blk1 /* align width (8 or 16) */, uint8_t *blk2 /* align 1 */, ptrdiff_t stride, int h); @@ -89,5 +90,6 @@ void ff_me_cmp_init_mips(MECmpContext *c, AVCodecContext *avctx); void ff_set_cmp(MECmpContext *c, me_cmp_func *cmp, int type); void ff_dsputil_init_dwt(MECmpContext *c); +#undef MPVEncContext #endif /* AVCODEC_ME_CMP_H */ diff --git a/libavcodec/mips/h263dsp_mips.h b/libavcodec/mips/h263dsp_mips.h index 99a43cd44a..852856db55 100644 --- a/libavcodec/mips/h263dsp_mips.h +++ b/libavcodec/mips/h263dsp_mips.h @@ -25,11 +25,11 @@ void ff_h263_h_loop_filter_msa(uint8_t *src, int stride, int q_scale); void ff_h263_v_loop_filter_msa(uint8_t *src, int stride, int q_scale); -void ff_dct_unquantize_mpeg2_inter_msa(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_mpeg2_inter_msa(MPVContext *s, int16_t *block, int32_t index, int32_t q_scale); -void ff_dct_unquantize_h263_inter_msa(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_h263_inter_msa(MPVContext *s, int16_t *block, int32_t index, int32_t q_scale); -void ff_dct_unquantize_h263_intra_msa(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_h263_intra_msa(MPVContext *s, int16_t *block, int32_t index, int32_t q_scale); int ff_pix_sum_msa(uint8_t *pix, int line_size); diff --git a/libavcodec/mips/me_cmp_mips.h b/libavcodec/mips/me_cmp_mips.h index e0d0f51af8..71187f7a5c 100644 --- a/libavcodec/mips/me_cmp_mips.h +++ b/libavcodec/mips/me_cmp_mips.h @@ -21,38 +21,38 @@ #ifndef AVCODEC_MIPS_ME_CMP_MIPS_H #define AVCODEC_MIPS_ME_CMP_MIPS_H -#include "../mpegvideo.h" +#include "libavcodec/mpegvideoenc.h" #include "libavcodec/bit_depth_template.c" -int ff_hadamard8_diff8x8_msa(MpegEncContext *s, uint8_t *dst, uint8_t *src, +int ff_hadamard8_diff8x8_msa(MPVEncContext *s, uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h); -int ff_hadamard8_intra8x8_msa(MpegEncContext *s, uint8_t *dst, uint8_t *src, +int ff_hadamard8_intra8x8_msa(MPVEncContext *s, uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h); -int ff_hadamard8_diff16_msa(MpegEncContext *s, uint8_t *dst, uint8_t *src, +int ff_hadamard8_diff16_msa(MPVEncContext *s, uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h); -int ff_hadamard8_intra16_msa(MpegEncContext *s, uint8_t *dst, uint8_t *src, +int ff_hadamard8_intra16_msa(MPVEncContext *s, uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h); -int ff_pix_abs16_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs16_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_pix_abs16_x2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs16_x2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_pix_abs16_y2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs16_y2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_pix_abs16_xy2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs16_xy2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_pix_abs8_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs8_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_pix_abs8_x2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs8_x2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_pix_abs8_y2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs8_y2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_pix_abs8_xy2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs8_xy2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sse16_msa(MpegEncContext *v, uint8_t *pu8Src, uint8_t *pu8Ref, +int ff_sse16_msa(MPVEncContext *v, uint8_t *pu8Src, uint8_t *pu8Ref, ptrdiff_t stride, int i32Height); -int ff_sse8_msa(MpegEncContext *v, uint8_t *pu8Src, uint8_t *pu8Ref, +int ff_sse8_msa(MPVEncContext *v, uint8_t *pu8Src, uint8_t *pu8Ref, ptrdiff_t stride, int i32Height); -int ff_sse4_msa(MpegEncContext *v, uint8_t *pu8Src, uint8_t *pu8Ref, +int ff_sse4_msa(MPVEncContext *v, uint8_t *pu8Src, uint8_t *pu8Ref, ptrdiff_t stride, int i32Height); void ff_add_pixels8_msa(uint8_t *av_restrict pixels, int16_t *block, ptrdiff_t stride); diff --git a/libavcodec/mips/me_cmp_msa.c b/libavcodec/mips/me_cmp_msa.c index 7cb7af0047..f71bb7e4aa 100644 --- a/libavcodec/mips/me_cmp_msa.c +++ b/libavcodec/mips/me_cmp_msa.c @@ -587,79 +587,79 @@ static int32_t hadamard_intra_8x8_msa(uint8_t *src, int32_t src_stride, return sum_res; } -int ff_pix_abs16_msa(MpegEncContext *v, uint8_t *src, uint8_t *ref, +int ff_pix_abs16_msa(MPVEncContext *v, uint8_t *src, uint8_t *ref, ptrdiff_t stride, int height) { return sad_16width_msa(src, stride, ref, stride, height); } -int ff_pix_abs8_msa(MpegEncContext *v, uint8_t *src, uint8_t *ref, +int ff_pix_abs8_msa(MPVEncContext *v, uint8_t *src, uint8_t *ref, ptrdiff_t stride, int height) { return sad_8width_msa(src, stride, ref, stride, height); } -int ff_pix_abs16_x2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs16_x2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { return sad_horiz_bilinear_filter_16width_msa(pix1, stride, pix2, stride, h); } -int ff_pix_abs16_y2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs16_y2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { return sad_vert_bilinear_filter_16width_msa(pix1, stride, pix2, stride, h); } -int ff_pix_abs16_xy2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs16_xy2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { return sad_hv_bilinear_filter_16width_msa(pix1, stride, pix2, stride, h); } -int ff_pix_abs8_x2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs8_x2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { return sad_horiz_bilinear_filter_8width_msa(pix1, stride, pix2, stride, h); } -int ff_pix_abs8_y2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs8_y2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { return sad_vert_bilinear_filter_8width_msa(pix1, stride, pix2, stride, h); } -int ff_pix_abs8_xy2_msa(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_pix_abs8_xy2_msa(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { return sad_hv_bilinear_filter_8width_msa(pix1, stride, pix2, stride, h); } -int ff_sse16_msa(MpegEncContext *v, uint8_t *src, uint8_t *ref, +int ff_sse16_msa(MPVEncContext *v, uint8_t *src, uint8_t *ref, ptrdiff_t stride, int height) { return sse_16width_msa(src, stride, ref, stride, height); } -int ff_sse8_msa(MpegEncContext *v, uint8_t *src, uint8_t *ref, +int ff_sse8_msa(MPVEncContext *v, uint8_t *src, uint8_t *ref, ptrdiff_t stride, int height) { return sse_8width_msa(src, stride, ref, stride, height); } -int ff_sse4_msa(MpegEncContext *v, uint8_t *src, uint8_t *ref, +int ff_sse4_msa(MPVEncContext *v, uint8_t *src, uint8_t *ref, ptrdiff_t stride, int height) { return sse_4width_msa(src, stride, ref, stride, height); } -int ff_hadamard8_diff8x8_msa(MpegEncContext *s, uint8_t *dst, uint8_t *src, +int ff_hadamard8_diff8x8_msa(MPVEncContext *s, uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h) { return hadamard_diff_8x8_msa(src, stride, dst, stride); } -int ff_hadamard8_intra8x8_msa(MpegEncContext *s, uint8_t *dst, uint8_t *src, +int ff_hadamard8_intra8x8_msa(MPVEncContext *s, uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h) { return hadamard_intra_8x8_msa(src, stride, dst, stride); @@ -667,7 +667,7 @@ int ff_hadamard8_intra8x8_msa(MpegEncContext *s, uint8_t *dst, uint8_t *src, /* Hadamard Transform functions */ #define WRAPPER8_16_SQ(name8, name16) \ -int name16(MpegEncContext *s, uint8_t *dst, uint8_t *src, \ +int name16(MPVEncContext *s, uint8_t *dst, uint8_t *src, \ ptrdiff_t stride, int h) \ { \ int score = 0; \ diff --git a/libavcodec/mips/mpegvideo_init_mips.c b/libavcodec/mips/mpegvideo_init_mips.c index f687ad18f1..1c1008d2e5 100644 --- a/libavcodec/mips/mpegvideo_init_mips.c +++ b/libavcodec/mips/mpegvideo_init_mips.c @@ -23,7 +23,7 @@ #include "h263dsp_mips.h" #include "mpegvideo_mips.h" -av_cold void ff_mpv_common_init_mips(MpegEncContext *s) +av_cold void ff_mpv_common_init_mips(MPVMainContext *s) { int cpu_flags = av_get_cpu_flags(); diff --git a/libavcodec/mips/mpegvideo_mips.h b/libavcodec/mips/mpegvideo_mips.h index 760d7b3295..88d675eee6 100644 --- a/libavcodec/mips/mpegvideo_mips.h +++ b/libavcodec/mips/mpegvideo_mips.h @@ -23,16 +23,16 @@ #include "libavcodec/mpegvideo.h" -void ff_dct_unquantize_h263_intra_mmi(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_h263_intra_mmi(MPVContext *s, int16_t *block, int n, int qscale); -void ff_dct_unquantize_h263_inter_mmi(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_h263_inter_mmi(MPVContext *s, int16_t *block, int n, int qscale); -void ff_dct_unquantize_mpeg1_intra_mmi(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_mpeg1_intra_mmi(MPVContext *s, int16_t *block, int n, int qscale); -void ff_dct_unquantize_mpeg1_inter_mmi(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_mpeg1_inter_mmi(MPVContext *s, int16_t *block, int n, int qscale); -void ff_dct_unquantize_mpeg2_intra_mmi(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_mpeg2_intra_mmi(MPVContext *s, int16_t *block, int n, int qscale); -void ff_denoise_dct_mmi(MpegEncContext *s, int16_t *block); +void ff_denoise_dct_mmi(MPVContext *s, int16_t *block); #endif /* AVCODEC_MIPS_MPEGVIDEO_MIPS_H */ diff --git a/libavcodec/mips/mpegvideo_mmi.c b/libavcodec/mips/mpegvideo_mmi.c index 3d5b5e20ab..e8ff72c946 100644 --- a/libavcodec/mips/mpegvideo_mmi.c +++ b/libavcodec/mips/mpegvideo_mmi.c @@ -25,7 +25,7 @@ #include "mpegvideo_mips.h" #include "libavutil/mips/mmiutils.h" -void ff_dct_unquantize_h263_intra_mmi(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_h263_intra_mmi(MPVContext *s, int16_t *block, int n, int qscale) { int64_t level, nCoeffs; @@ -101,7 +101,7 @@ void ff_dct_unquantize_h263_intra_mmi(MpegEncContext *s, int16_t *block, block[0] = level; } -void ff_dct_unquantize_h263_inter_mmi(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_h263_inter_mmi(MPVContext *s, int16_t *block, int n, int qscale) { int64_t nCoeffs; @@ -160,7 +160,7 @@ void ff_dct_unquantize_h263_inter_mmi(MpegEncContext *s, int16_t *block, ); } -void ff_dct_unquantize_mpeg1_intra_mmi(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_mpeg1_intra_mmi(MPVContext *s, int16_t *block, int n, int qscale) { int64_t nCoeffs; @@ -254,7 +254,7 @@ void ff_dct_unquantize_mpeg1_intra_mmi(MpegEncContext *s, int16_t *block, block[0] = block0; } -void ff_dct_unquantize_mpeg1_inter_mmi(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_mpeg1_inter_mmi(MPVContext *s, int16_t *block, int n, int qscale) { int64_t nCoeffs; @@ -342,7 +342,7 @@ void ff_dct_unquantize_mpeg1_inter_mmi(MpegEncContext *s, int16_t *block, ); } -void ff_dct_unquantize_mpeg2_intra_mmi(MpegEncContext *s, int16_t *block, +void ff_dct_unquantize_mpeg2_intra_mmi(MPVContext *s, int16_t *block, int n, int qscale) { uint64_t nCoeffs; @@ -435,7 +435,7 @@ void ff_dct_unquantize_mpeg2_intra_mmi(MpegEncContext *s, int16_t *block, block[0]= block0; } -void ff_denoise_dct_mmi(MpegEncContext *s, int16_t *block) +void ff_denoise_dct_mmi(MPVContext *s, int16_t *block) { const int intra = s->mb_intra; int *sum = s->dct_error_sum[intra]; diff --git a/libavcodec/mips/mpegvideo_msa.c b/libavcodec/mips/mpegvideo_msa.c index aa9ef770eb..26dc3df92c 100644 --- a/libavcodec/mips/mpegvideo_msa.c +++ b/libavcodec/mips/mpegvideo_msa.c @@ -193,7 +193,7 @@ static int32_t mpeg2_dct_unquantize_inter_msa(int16_t *block, return sum_res; } -void ff_dct_unquantize_h263_intra_msa(MpegEncContext *s, +void ff_dct_unquantize_h263_intra_msa(MPVContext *s, int16_t *block, int32_t index, int32_t qscale) { @@ -218,7 +218,7 @@ void ff_dct_unquantize_h263_intra_msa(MpegEncContext *s, h263_dct_unquantize_msa(block, qmul, qadd, nCoeffs, 1); } -void ff_dct_unquantize_h263_inter_msa(MpegEncContext *s, +void ff_dct_unquantize_h263_inter_msa(MPVContext *s, int16_t *block, int32_t index, int32_t qscale) { @@ -235,7 +235,7 @@ void ff_dct_unquantize_h263_inter_msa(MpegEncContext *s, h263_dct_unquantize_msa(block, qmul, qadd, nCoeffs, 0); } -void ff_dct_unquantize_mpeg2_inter_msa(MpegEncContext *s, +void ff_dct_unquantize_mpeg2_inter_msa(MPVContext *s, int16_t *block, int32_t index, int32_t qscale) { diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index b9b17a50df..481ee884e9 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -44,10 +44,10 @@ /* The following is the private context of MJPEG/AMV decoder. * Note that when using slice threading only the main thread's - * MpegEncContext is followed by a MjpegContext; the other threads - * can access this shared context via MpegEncContext.mjpeg. */ + * MPVMainEncContext is followed by a MjpegContext; the other threads + * can access this shared context via MPVEncContext.mjpeg. */ typedef struct MJPEGEncContext { - MpegEncContext mpeg; + MPVMainEncContext mpeg; MJpegContext mjpeg; } MJPEGEncContext; @@ -75,7 +75,7 @@ static av_cold void init_uni_ac_vlc(const uint8_t huff_size_ac[256], } } -static void mjpeg_encode_picture_header(MpegEncContext *s) +static void mjpeg_encode_picture_header(MPVMainEncContext *s) { ff_mjpeg_encode_picture_header(s->avctx, &s->pb, s->mjpeg_ctx, &s->intra_scantable, 0, @@ -87,7 +87,7 @@ static void mjpeg_encode_picture_header(MpegEncContext *s) s->thread_context[i]->esc_pos = 0; } -void ff_mjpeg_amv_encode_picture_header(MpegEncContext *s) +void ff_mjpeg_amv_encode_picture_header(MPVMainEncContext *s) { MJPEGEncContext *const m = (MJPEGEncContext*)s; av_assert2(s->mjpeg_ctx == &m->mjpeg); @@ -100,9 +100,9 @@ void ff_mjpeg_amv_encode_picture_header(MpegEncContext *s) /** * Encodes and outputs the entire frame in the JPEG format. * - * @param s The MpegEncContext. + * @param s The MPVEncContext. */ -static void mjpeg_encode_picture_frame(MpegEncContext *s) +static void mjpeg_encode_picture_frame(MPVEncContext *s) { int nbits, code, table_id; MJpegContext *m = s->mjpeg_ctx; @@ -211,10 +211,10 @@ static void mjpeg_build_optimal_huffman(MJpegContext *m) * * Header + values + stuffing. * - * @param s The MpegEncContext. + * @param s The MPVEncContext. * @return int Error code, 0 if successful. */ -int ff_mjpeg_encode_stuffing(MpegEncContext *s) +int ff_mjpeg_encode_stuffing(MPVEncContext *s) { MJpegContext *const m = s->mjpeg_ctx; PutBitContext *pbc = &s->pb; @@ -260,7 +260,7 @@ fail: return ret; } -static int alloc_huffman(MpegEncContext *s) +static int alloc_huffman(MPVMainEncContext *s) { MJpegContext *m = s->mjpeg_ctx; size_t num_mbs, num_blocks, num_codes; @@ -288,7 +288,7 @@ static int alloc_huffman(MpegEncContext *s) return 0; } -av_cold int ff_mjpeg_encode_init(MpegEncContext *s) +av_cold int ff_mjpeg_encode_init(MPVMainEncContext *s) { MJpegContext *const m = &((MJPEGEncContext*)s)->mjpeg; int ret, use_slices; @@ -412,11 +412,11 @@ static void ff_mjpeg_encode_coef(MJpegContext *s, uint8_t table_id, int val, int /** * Add the block's data into the JPEG buffer. * - * @param s The MpegEncContext that contains the JPEG buffer. + * @param s The MPVEncContext that contains the JPEG buffer. * @param block The block. * @param n The block's index or number. */ -static void record_block(MpegEncContext *s, int16_t *block, int n) +static void record_block(MPVEncContext *s, int16_t *block, int n) { int i, j, table_id; int component, dc, last_index, val, run; @@ -459,7 +459,7 @@ static void record_block(MpegEncContext *s, int16_t *block, int n) ff_mjpeg_encode_code(m, table_id, 0); } -static void encode_block(MpegEncContext *s, int16_t *block, int n) +static void encode_block(MPVEncContext *s, int16_t *block, int n) { int mant, nbits, code, i, j; int component, dc, run, last_index, val; @@ -517,7 +517,7 @@ static void encode_block(MpegEncContext *s, int16_t *block, int n) put_bits(&s->pb, huff_size_ac[0], huff_code_ac[0]); } -void ff_mjpeg_encode_mb(MpegEncContext *s, int16_t block[12][64]) +void ff_mjpeg_encode_mb(MPVEncContext *s, int16_t block[12][64]) { int i; if (s->mjpeg_ctx->huffman == HUFFMAN_TABLE_OPTIMAL) { @@ -589,7 +589,7 @@ void ff_mjpeg_encode_mb(MpegEncContext *s, int16_t block[12][64]) static int amv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet) { - MpegEncContext *s = avctx->priv_data; + MPVMainEncContext *const s = avctx->priv_data; AVFrame *pic; int i, ret; int chroma_h_shift, chroma_v_shift; diff --git a/libavcodec/mjpegenc.h b/libavcodec/mjpegenc.h index a593b67e96..609b663e09 100644 --- a/libavcodec/mjpegenc.h +++ b/libavcodec/mjpegenc.h @@ -36,7 +36,7 @@ #include #include "mjpeg.h" -#include "mpegvideo.h" +#include "mpegvideoenc.h" #include "put_bits.h" /** @@ -71,9 +71,9 @@ typedef struct MJpegContext { uint8_t huff_size_ac_chrominance[256]; ///< AC chrominance Huffman table size. uint16_t huff_code_ac_chrominance[256]; ///< AC chrominance Huffman table codes. - /** Storage for AC luminance VLC (in MpegEncContext) */ + /** Storage for AC luminance VLC (in MPVEncContext) */ uint8_t uni_ac_vlc_len[64 * 64 * 2]; - /** Storage for AC chrominance VLC (in MpegEncContext) */ + /** Storage for AC chrominance VLC (in MPVEncContext) */ uint8_t uni_chroma_ac_vlc_len[64 * 64 * 2]; // Default DC tables have exactly 12 values @@ -107,9 +107,9 @@ static inline void put_marker(PutBitContext *p, enum JpegMarker code) put_bits(p, 8, code); } -int ff_mjpeg_encode_init(MpegEncContext *s); -void ff_mjpeg_amv_encode_picture_header(MpegEncContext *s); -void ff_mjpeg_encode_mb(MpegEncContext *s, int16_t block[12][64]); -int ff_mjpeg_encode_stuffing(MpegEncContext *s); +int ff_mjpeg_encode_init(MPVMainEncContext *s); +void ff_mjpeg_amv_encode_picture_header(MPVMainEncContext *s); +void ff_mjpeg_encode_mb(MPVEncContext *s, int16_t block[12][64]); +int ff_mjpeg_encode_stuffing(MPVEncContext *s); #endif /* AVCODEC_MJPEGENC_H */ diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c index 35ca40b90a..34ea72fe3d 100644 --- a/libavcodec/motion_est.c +++ b/libavcodec/motion_est.c @@ -47,7 +47,7 @@ #define ME_MAP_SHIFT 3 #define ME_MAP_MV_BITS 11 -static int sad_hpel_motion_search(MpegEncContext * s, +static int sad_hpel_motion_search(MPVEncContext * s, int *mx_ptr, int *my_ptr, int dmin, int src_index, int ref_index, int size, int h); @@ -104,7 +104,7 @@ static int get_flags(MotionEstContext *c, int direct, int chroma){ + (chroma ? FLAG_CHROMA : 0); } -static av_always_inline int cmp_direct_inline(MpegEncContext *s, const int x, const int y, const int subx, const int suby, +static av_always_inline int cmp_direct_inline(MPVEncContext *s, const int x, const int y, const int subx, const int suby, const int size, const int h, int ref_index, int src_index, me_cmp_func cmp_func, me_cmp_func chroma_cmp_func, int qpel){ MotionEstContext * const c= &s->me; @@ -176,7 +176,7 @@ static av_always_inline int cmp_direct_inline(MpegEncContext *s, const int x, co return d; } -static av_always_inline int cmp_inline(MpegEncContext *s, const int x, const int y, const int subx, const int suby, +static av_always_inline int cmp_inline(MPVEncContext *s, const int x, const int y, const int subx, const int suby, const int size, const int h, int ref_index, int src_index, me_cmp_func cmp_func, me_cmp_func chroma_cmp_func, int qpel, int chroma){ MotionEstContext * const c= &s->me; @@ -228,13 +228,13 @@ static av_always_inline int cmp_inline(MpegEncContext *s, const int x, const int return d; } -static int cmp_simple(MpegEncContext *s, const int x, const int y, +static int cmp_simple(MPVEncContext *s, const int x, const int y, int ref_index, int src_index, me_cmp_func cmp_func, me_cmp_func chroma_cmp_func){ return cmp_inline(s,x,y,0,0,0,16,ref_index,src_index, cmp_func, chroma_cmp_func, 0, 0); } -static int cmp_fpel_internal(MpegEncContext *s, const int x, const int y, +static int cmp_fpel_internal(MPVEncContext *s, const int x, const int y, const int size, const int h, int ref_index, int src_index, me_cmp_func cmp_func, me_cmp_func chroma_cmp_func, const int flags){ if(flags&FLAG_DIRECT){ @@ -244,7 +244,7 @@ static int cmp_fpel_internal(MpegEncContext *s, const int x, const int y, } } -static int cmp_internal(MpegEncContext *s, const int x, const int y, const int subx, const int suby, +static int cmp_internal(MPVEncContext *s, const int x, const int y, const int subx, const int suby, const int size, const int h, int ref_index, int src_index, me_cmp_func cmp_func, me_cmp_func chroma_cmp_func, const int flags){ if(flags&FLAG_DIRECT){ @@ -257,7 +257,7 @@ static int cmp_internal(MpegEncContext *s, const int x, const int y, const int s /** @brief compares a block (either a full macroblock or a partition thereof) against a proposed motion-compensated prediction of that block */ -static av_always_inline int cmp(MpegEncContext *s, const int x, const int y, const int subx, const int suby, +static av_always_inline int cmp(MPVEncContext *s, const int x, const int y, const int subx, const int suby, const int size, const int h, int ref_index, int src_index, me_cmp_func cmp_func, me_cmp_func chroma_cmp_func, const int flags){ if(av_builtin_constant_p(flags) && av_builtin_constant_p(h) && av_builtin_constant_p(size) @@ -272,7 +272,7 @@ static av_always_inline int cmp(MpegEncContext *s, const int x, const int y, con } } -static int cmp_hpel(MpegEncContext *s, const int x, const int y, const int subx, const int suby, +static int cmp_hpel(MPVEncContext *s, const int x, const int y, const int subx, const int suby, const int size, const int h, int ref_index, int src_index, me_cmp_func cmp_func, me_cmp_func chroma_cmp_func, const int flags){ if(flags&FLAG_DIRECT){ @@ -282,7 +282,7 @@ static int cmp_hpel(MpegEncContext *s, const int x, const int y, const int subx, } } -static int cmp_qpel(MpegEncContext *s, const int x, const int y, const int subx, const int suby, +static int cmp_qpel(MPVEncContext *s, const int x, const int y, const int subx, const int suby, const int size, const int h, int ref_index, int src_index, me_cmp_func cmp_func, me_cmp_func chroma_cmp_func, const int flags){ if(flags&FLAG_DIRECT){ @@ -294,7 +294,7 @@ static int cmp_qpel(MpegEncContext *s, const int x, const int y, const int subx, #include "motion_est_template.c" -static int zero_cmp(MpegEncContext *s, uint8_t *a, uint8_t *b, +static int zero_cmp(MPVEncContext *s, uint8_t *a, uint8_t *b, ptrdiff_t stride, int h) { return 0; @@ -303,7 +303,7 @@ static int zero_cmp(MpegEncContext *s, uint8_t *a, uint8_t *b, static void zero_hpel(uint8_t *a, const uint8_t *b, ptrdiff_t stride, int h){ } -int ff_init_me(MpegEncContext *s){ +int ff_init_me(MPVEncContext *s){ MotionEstContext * const c= &s->me; int cache_size= FFMIN(ME_MAP_SIZE>>ME_MAP_SHIFT, 1<avctx->dia_size)&255, FFABS(s->avctx->pre_dia_size)&255); @@ -389,7 +389,7 @@ int ff_init_me(MpegEncContext *s){ COPY3_IF_LT(dminh, d, dx, x, dy, y)\ } -static int sad_hpel_motion_search(MpegEncContext * s, +static int sad_hpel_motion_search(MPVEncContext * s, int *mx_ptr, int *my_ptr, int dmin, int src_index, int ref_index, int size, int h) @@ -494,7 +494,7 @@ static int sad_hpel_motion_search(MpegEncContext * s, return dminh; } -static inline void set_p_mv_tables(MpegEncContext * s, int mx, int my, int mv4) +static inline void set_p_mv_tables(MPVEncContext * s, int mx, int my, int mv4) { const int xy= s->mb_x + s->mb_y*s->mb_stride; @@ -521,7 +521,7 @@ static inline void set_p_mv_tables(MpegEncContext * s, int mx, int my, int mv4) /** * get fullpel ME search limits. */ -static inline void get_limits(MpegEncContext *s, int x, int y) +static inline void get_limits(MPVEncContext *s, int x, int y) { MotionEstContext * const c= &s->me; int range= c->avctx->me_range >> (1 + !!(c->flags&FLAG_QPEL)); @@ -568,7 +568,7 @@ static inline void init_mv4_ref(MotionEstContext *c){ c->src[3][0] = c->src[2][0] + 8; } -static inline int h263_mv4_search(MpegEncContext *s, int mx, int my, int shift) +static inline int h263_mv4_search(MPVEncContext *s, int mx, int my, int shift) { MotionEstContext * const c= &s->me; const int size= 1; @@ -722,7 +722,7 @@ static inline int h263_mv4_search(MpegEncContext *s, int mx, int my, int shift) } } -static inline void init_interlaced_ref(MpegEncContext *s, int ref_index){ +static inline void init_interlaced_ref(MPVEncContext *s, int ref_index){ MotionEstContext * const c= &s->me; c->ref[1+ref_index][0] = c->ref[0+ref_index][0] + s->linesize; @@ -735,7 +735,7 @@ static inline void init_interlaced_ref(MpegEncContext *s, int ref_index){ } } -static int interlaced_search(MpegEncContext *s, int ref_index, +static int interlaced_search(MPVEncContext *s, int ref_index, int16_t (*mv_tables[2][2])[2], uint8_t *field_select_tables[2], int mx, int my, int user_field_select) { MotionEstContext * const c= &s->me; @@ -882,7 +882,7 @@ static inline int get_penalty_factor(int lambda, int lambda2, int type){ } } -void ff_estimate_p_frame_motion(MpegEncContext * s, +void ff_estimate_p_frame_motion(MPVEncContext * s, int mb_x, int mb_y) { MotionEstContext * const c= &s->me; @@ -1058,7 +1058,7 @@ void ff_estimate_p_frame_motion(MpegEncContext * s, s->mb_type[mb_y*s->mb_stride + mb_x]= mb_type; } -int ff_pre_estimate_p_frame_motion(MpegEncContext * s, +int ff_pre_estimate_p_frame_motion(MPVEncContext * s, int mb_x, int mb_y) { MotionEstContext * const c= &s->me; @@ -1111,7 +1111,7 @@ int ff_pre_estimate_p_frame_motion(MpegEncContext * s, return dmin; } -static int estimate_motion_b(MpegEncContext *s, int mb_x, int mb_y, +static int estimate_motion_b(MPVEncContext *s, int mb_x, int mb_y, int16_t (*mv_table)[2], int ref_index, int f_code) { MotionEstContext * const c= &s->me; @@ -1173,7 +1173,7 @@ static int estimate_motion_b(MpegEncContext *s, int mb_x, int mb_y, return dmin; } -static inline int check_bidir_mv(MpegEncContext * s, +static inline int check_bidir_mv(MPVEncContext * s, int motion_fx, int motion_fy, int motion_bx, int motion_by, int pred_fx, int pred_fy, @@ -1238,7 +1238,7 @@ static inline int check_bidir_mv(MpegEncContext * s, } /* refine the bidir vectors in hq mode and return the score in both lq & hq mode*/ -static inline int bidir_refine(MpegEncContext * s, int mb_x, int mb_y) +static inline int bidir_refine(MPVEncContext * s, int mb_x, int mb_y) { MotionEstContext * const c= &s->me; const int mot_stride = s->mb_stride; @@ -1385,7 +1385,7 @@ CHECK_BIDIR(-(a),-(b),-(c),-(d)) return fbmin; } -static inline int direct_search(MpegEncContext * s, int mb_x, int mb_y) +static inline int direct_search(MPVEncContext * s, int mb_x, int mb_y) { MotionEstContext * const c= &s->me; int P[10][2]; @@ -1487,7 +1487,7 @@ static inline int direct_search(MpegEncContext * s, int mb_x, int mb_y) return dmin; } -void ff_estimate_b_frame_motion(MpegEncContext * s, +void ff_estimate_b_frame_motion(MPVEncContext * s, int mb_x, int mb_y) { MotionEstContext * const c= &s->me; @@ -1595,7 +1595,7 @@ void ff_estimate_b_frame_motion(MpegEncContext * s, } /* find best f_code for ME which do unlimited searches */ -int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type) +int ff_get_best_fcode(MPVEncContext * s, int16_t (*mv_table)[2], int type) { if (s->motion_est != FF_ME_ZERO) { int score[8]; @@ -1648,7 +1648,7 @@ int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type) } } -void ff_fix_long_p_mvs(MpegEncContext * s, int type) +void ff_fix_long_p_mvs(MPVEncContext * s, int type) { MotionEstContext * const c= &s->me; const int f_code= s->f_code; @@ -1697,7 +1697,7 @@ void ff_fix_long_p_mvs(MpegEncContext * s, int type) /** * @param truncate 1 for truncation, 0 for using intra */ -void ff_fix_long_mvs(MpegEncContext * s, uint8_t *field_select_table, int field_select, +void ff_fix_long_mvs(MPVEncContext * s, uint8_t *field_select_table, int field_select, int16_t (*mv_table)[2], int f_code, int type, int truncate) { MotionEstContext * const c= &s->me; diff --git a/libavcodec/motion_est.h b/libavcodec/motion_est.h index 5742e51486..b52b91ab3f 100644 --- a/libavcodec/motion_est.h +++ b/libavcodec/motion_est.h @@ -27,7 +27,8 @@ #include "hpeldsp.h" #include "qpeldsp.h" -struct MpegEncContext; +#define MPVEncContext MPVContext +struct MPVEncContext; #if ARCH_IA64 // Limit static arrays to avoid gcc failing "short data segment overflowed" #define MAX_MV 1024 @@ -92,7 +93,7 @@ typedef struct MotionEstContext { qpel_mc_func(*qpel_avg)[16]; const uint8_t (*mv_penalty)[MAX_DMV * 2 + 1]; ///< bit amount needed to encode a MV const uint8_t *current_mv_penalty; - int (*sub_motion_search)(struct MpegEncContext *s, + int (*sub_motion_search)(struct MPVEncContext *s, int *mx_ptr, int *my_ptr, int dmin, int src_index, int ref_index, int size, int h); @@ -108,28 +109,28 @@ static inline int ff_h263_round_chroma(int x) return h263_chroma_roundtab[x & 0xf] + (x >> 3); } -int ff_init_me(struct MpegEncContext *s); +int ff_init_me(struct MPVEncContext *s); -void ff_estimate_p_frame_motion(struct MpegEncContext *s, int mb_x, int mb_y); -void ff_estimate_b_frame_motion(struct MpegEncContext *s, int mb_x, int mb_y); +void ff_estimate_p_frame_motion(struct MPVEncContext *s, int mb_x, int mb_y); +void ff_estimate_b_frame_motion(struct MPVEncContext *s, int mb_x, int mb_y); -int ff_pre_estimate_p_frame_motion(struct MpegEncContext *s, +int ff_pre_estimate_p_frame_motion(struct MPVEncContext *s, int mb_x, int mb_y); -int ff_epzs_motion_search(struct MpegEncContext *s, int *mx_ptr, int *my_ptr, +int ff_epzs_motion_search(struct MPVEncContext *s, int *mx_ptr, int *my_ptr, int P[10][2], int src_index, int ref_index, int16_t (*last_mv)[2], int ref_mv_scale, int size, int h); -int ff_get_mb_score(struct MpegEncContext *s, int mx, int my, int src_index, +int ff_get_mb_score(struct MPVEncContext *s, int mx, int my, int src_index, int ref_index, int size, int h, int add_rate); -int ff_get_best_fcode(struct MpegEncContext *s, +int ff_get_best_fcode(struct MPVEncContext *s, int16_t (*mv_table)[2], int type); -void ff_fix_long_p_mvs(struct MpegEncContext *s, int type); -void ff_fix_long_mvs(struct MpegEncContext *s, uint8_t *field_select_table, +void ff_fix_long_p_mvs(struct MPVEncContext *s, int type); +void ff_fix_long_mvs(struct MPVEncContext *s, uint8_t *field_select_table, int field_select, int16_t (*mv_table)[2], int f_code, int type, int truncate); - +#undef MPVEncContext #endif /* AVCODEC_MOTION_EST_H */ diff --git a/libavcodec/motion_est_template.c b/libavcodec/motion_est_template.c index 6ab0ea13dc..57df6436c3 100644 --- a/libavcodec/motion_est_template.c +++ b/libavcodec/motion_est_template.c @@ -47,7 +47,7 @@ COPY3_IF_LT(dmin, d, bx, hx, by, hy)\ } -static int hpel_motion_search(MpegEncContext * s, +static int hpel_motion_search(MPVEncContext * s, int *mx_ptr, int *my_ptr, int dmin, int src_index, int ref_index, int size, int h) @@ -152,7 +152,7 @@ static int hpel_motion_search(MpegEncContext * s, return dmin; } -static int no_sub_motion_search(MpegEncContext * s, +static int no_sub_motion_search(MPVEncContext * s, int *mx_ptr, int *my_ptr, int dmin, int src_index, int ref_index, int size, int h) @@ -162,7 +162,7 @@ static int no_sub_motion_search(MpegEncContext * s, return dmin; } -static inline int get_mb_score(MpegEncContext *s, int mx, int my, +static inline int get_mb_score(MPVEncContext *s, int mx, int my, int src_index, int ref_index, int size, int h, int add_rate) { @@ -189,7 +189,7 @@ static inline int get_mb_score(MpegEncContext *s, int mx, int my, return d; } -int ff_get_mb_score(MpegEncContext *s, int mx, int my, int src_index, +int ff_get_mb_score(MPVEncContext *s, int mx, int my, int src_index, int ref_index, int size, int h, int add_rate) { return get_mb_score(s, mx, my, src_index, ref_index, size, h, add_rate); @@ -204,7 +204,7 @@ int ff_get_mb_score(MpegEncContext *s, int mx, int my, int src_index, COPY3_IF_LT(dmin, d, bx, hx, by, hy)\ } -static int qpel_motion_search(MpegEncContext * s, +static int qpel_motion_search(MPVEncContext * s, int *mx_ptr, int *my_ptr, int dmin, int src_index, int ref_index, int size, int h) @@ -413,7 +413,7 @@ if( (y)>(ymax<<(S)) ) av_log(NULL, AV_LOG_ERROR, "%d %d %d %d %d ymax" #v, ymax, const int qpel= flags&FLAG_QPEL;\ const int shift= 1+qpel;\ -static av_always_inline int small_diamond_search(MpegEncContext * s, int *best, int dmin, +static av_always_inline int small_diamond_search(MPVEncContext * s, int *best, int dmin, int src_index, int ref_index, const int penalty_factor, int size, int h, int flags) { @@ -454,7 +454,7 @@ static av_always_inline int small_diamond_search(MpegEncContext * s, int *best, } } -static int funny_diamond_search(MpegEncContext * s, int *best, int dmin, +static int funny_diamond_search(MPVEncContext * s, int *best, int dmin, int src_index, int ref_index, const int penalty_factor, int size, int h, int flags) { @@ -496,7 +496,7 @@ static int funny_diamond_search(MpegEncContext * s, int *best, int dmin, return dmin; } -static int hex_search(MpegEncContext * s, int *best, int dmin, +static int hex_search(MPVEncContext * s, int *best, int dmin, int src_index, int ref_index, const int penalty_factor, int size, int h, int flags, int dia_size) { @@ -530,7 +530,7 @@ static int hex_search(MpegEncContext * s, int *best, int dmin, return dmin; } -static int l2s_dia_search(MpegEncContext * s, int *best, int dmin, +static int l2s_dia_search(MPVEncContext * s, int *best, int dmin, int src_index, int ref_index, const int penalty_factor, int size, int h, int flags) { @@ -568,7 +568,7 @@ static int l2s_dia_search(MpegEncContext * s, int *best, int dmin, return dmin; } -static int umh_search(MpegEncContext * s, int *best, int dmin, +static int umh_search(MPVEncContext * s, int *best, int dmin, int src_index, int ref_index, const int penalty_factor, int size, int h, int flags) { @@ -615,7 +615,7 @@ static int umh_search(MpegEncContext * s, int *best, int dmin, return hex_search(s, best, dmin, src_index, ref_index, penalty_factor, size, h, flags, 2); } -static int full_search(MpegEncContext * s, int *best, int dmin, +static int full_search(MPVEncContext * s, int *best, int dmin, int src_index, int ref_index, const int penalty_factor, int size, int h, int flags) { @@ -678,7 +678,7 @@ static int full_search(MpegEncContext * s, int *best, int dmin, } #define MAX_SAB_SIZE ME_MAP_SIZE -static int sab_diamond_search(MpegEncContext * s, int *best, int dmin, +static int sab_diamond_search(MPVEncContext * s, int *best, int dmin, int src_index, int ref_index, const int penalty_factor, int size, int h, int flags) { @@ -768,7 +768,7 @@ static int sab_diamond_search(MpegEncContext * s, int *best, int dmin, return dmin; } -static int var_diamond_search(MpegEncContext * s, int *best, int dmin, +static int var_diamond_search(MPVEncContext * s, int *best, int dmin, int src_index, int ref_index, const int penalty_factor, int size, int h, int flags) { @@ -829,7 +829,7 @@ static int var_diamond_search(MpegEncContext * s, int *best, int dmin, return dmin; } -static av_always_inline int diamond_search(MpegEncContext * s, int *best, int dmin, +static av_always_inline int diamond_search(MPVEncContext * s, int *best, int dmin, int src_index, int ref_index, const int penalty_factor, int size, int h, int flags){ MotionEstContext * const c= &s->me; @@ -857,7 +857,7 @@ static av_always_inline int diamond_search(MpegEncContext * s, int *best, int dm it takes fewer iterations. And it increases the chance that we find the optimal mv. */ -static av_always_inline int epzs_motion_search_internal(MpegEncContext * s, int *mx_ptr, int *my_ptr, +static av_always_inline int epzs_motion_search_internal(MPVEncContext * s, int *mx_ptr, int *my_ptr, int P[10][2], int src_index, int ref_index, int16_t (*last_mv)[2], int ref_mv_scale, int flags, int size, int h) { @@ -974,7 +974,7 @@ static av_always_inline int epzs_motion_search_internal(MpegEncContext * s, int } //this function is dedicated to the brain damaged gcc -int ff_epzs_motion_search(MpegEncContext *s, int *mx_ptr, int *my_ptr, +int ff_epzs_motion_search(MPVEncContext *s, int *mx_ptr, int *my_ptr, int P[10][2], int src_index, int ref_index, int16_t (*last_mv)[2], int ref_mv_scale, int size, int h) @@ -990,7 +990,7 @@ int ff_epzs_motion_search(MpegEncContext *s, int *mx_ptr, int *my_ptr, } } -static int epzs_motion_search2(MpegEncContext * s, +static int epzs_motion_search2(MPVEncContext * s, int *mx_ptr, int *my_ptr, int P[10][2], int src_index, int ref_index, int16_t (*last_mv)[2], int ref_mv_scale, const int size) diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 58e03c05d4..c65805bd8f 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -103,7 +103,7 @@ av_cold void ff_init_2d_vlc_rl(RLTable *rl, unsigned static_size, int flags) } } -av_cold void ff_mpeg12_common_init(MpegEncContext *s) +av_cold void ff_mpeg12_common_init(MPVMainContext *s) { s->y_dc_scale_table = @@ -111,7 +111,7 @@ av_cold void ff_mpeg12_common_init(MpegEncContext *s) } -void ff_mpeg1_clean_buffers(MpegEncContext *s) +void ff_mpeg1_clean_buffers(MPVContext *s) { s->last_dc[0] = 1 << (7 + s->intra_dc_precision); s->last_dc[1] = s->last_dc[0]; diff --git a/libavcodec/mpeg12.h b/libavcodec/mpeg12.h index 7ab2527a36..b18568daa8 100644 --- a/libavcodec/mpeg12.h +++ b/libavcodec/mpeg12.h @@ -24,6 +24,7 @@ #include "mpeg12vlc.h" #include "mpegvideo.h" +#include "mpegvideoenc.h" #include "rl.h" /* Start codes. */ @@ -36,7 +37,7 @@ #define EXT_START_CODE 0x000001b5 #define USER_START_CODE 0x000001b2 -void ff_mpeg12_common_init(MpegEncContext *s); +void ff_mpeg12_common_init(MPVMainContext *s); #define INIT_2D_VLC_RL(rl, static_size, flags)\ {\ @@ -70,16 +71,16 @@ int ff_mpeg1_decode_block_intra(GetBitContext *gb, uint8_t *const scantable, int last_dc[3], int16_t *block, int index, int qscale); -void ff_mpeg1_clean_buffers(MpegEncContext *s); +void ff_mpeg1_clean_buffers(MPVContext *s); #if FF_API_FLAG_TRUNCATED int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size, AVCodecParserContext *s); #endif -void ff_mpeg1_encode_picture_header(MpegEncContext *s, int picture_number); -void ff_mpeg1_encode_mb(MpegEncContext *s, int16_t block[8][64], +void ff_mpeg1_encode_picture_header(MPVMainEncContext *s, int picture_number); +void ff_mpeg1_encode_mb(MPVEncContext *s, int16_t block[8][64], int motion_x, int motion_y); -void ff_mpeg1_encode_init(MpegEncContext *s); -void ff_mpeg1_encode_slice_header(MpegEncContext *s); +void ff_mpeg1_encode_init(MPVMainEncContext *s); +void ff_mpeg1_encode_slice_header(MPVEncContext *s); void ff_mpeg12_find_best_frame_rate(AVRational frame_rate, int *code, int *ext_n, int *ext_d, diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 4a7bd6d466..4c53451d8c 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -55,8 +55,8 @@ #define A53_MAX_CC_COUNT 2000 typedef struct Mpeg1Context { - MpegEncContext mpeg_enc_ctx; - int mpeg_enc_ctx_allocated; /* true if decoding context allocated */ + MPVMainDecContext mpeg_ctx; + int mpeg_ctx_allocated; /* true if decoding context allocated */ int repeat_field; /* true if we must repeat the field */ AVPanScan pan_scan; /* some temporary storage for the panscan */ AVStereo3D stereo3d; @@ -106,7 +106,7 @@ static const uint32_t btype2mb_type[11] = { }; /* as H.263, but only 17 codes */ -static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred) +static int mpeg_decode_motion(MPVDecContext *s, int fcode, int pred) { int code, sign, val, shift; @@ -142,7 +142,7 @@ static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred) } \ } while (0) -static inline int mpeg1_decode_block_inter(MpegEncContext *s, +static inline int mpeg1_decode_block_inter(MPVDecContext *s, int16_t *block, int n) { int level, i, j, run; @@ -231,7 +231,7 @@ end: * Changing this would eat up any speed benefits it has. * Do not use "fast" flag if you need the code to be robust. */ -static inline int mpeg1_fast_decode_block_inter(MpegEncContext *s, +static inline int mpeg1_fast_decode_block_inter(MPVDecContext *s, int16_t *block, int n) { int level, i, j, run; @@ -316,7 +316,7 @@ end: return 0; } -static inline int mpeg2_decode_block_non_intra(MpegEncContext *s, +static inline int mpeg2_decode_block_non_intra(MPVDecContext *s, int16_t *block, int n) { int level, i, j, run; @@ -406,7 +406,7 @@ end: * Changing this would eat up any speed benefits it has. * Do not use "fast" flag if you need the code to be robust. */ -static inline int mpeg2_fast_decode_block_non_intra(MpegEncContext *s, +static inline int mpeg2_fast_decode_block_non_intra(MPVDecContext *s, int16_t *block, int n) { int level, i, j, run; @@ -478,7 +478,7 @@ end: return 0; } -static inline int mpeg2_decode_block_intra(MpegEncContext *s, +static inline int mpeg2_decode_block_intra(MPVDecContext *s, int16_t *block, int n) { int level, dc, diff, i, j, run; @@ -564,7 +564,7 @@ static inline int mpeg2_decode_block_intra(MpegEncContext *s, * Changing this would eat up any speed benefits it has. * Do not use "fast" flag if you need the code to be robust. */ -static inline int mpeg2_fast_decode_block_intra(MpegEncContext *s, +static inline int mpeg2_fast_decode_block_intra(MPVDecContext *s, int16_t *block, int n) { int level, dc, diff, i, j, run; @@ -640,7 +640,7 @@ static inline int mpeg2_fast_decode_block_intra(MpegEncContext *s, /******************************************/ /* decoding */ -static inline int get_dmv(MpegEncContext *s) +static inline int get_dmv(MPVDecContext *s) { if (get_bits1(&s->gb)) return 1 - (get_bits1(&s->gb) << 1); @@ -654,7 +654,7 @@ static inline int get_dmv(MpegEncContext *s) #define MT_16X8 2 #define MT_DMV 3 -static int mpeg_decode_mb(MpegEncContext *s, int16_t block[12][64]) +static int mpeg_decode_mb(MPVDecContext *s, int16_t block[12][64]) { int i, j, k, cbp, val, mb_type, motion_type; const int mb_block_count = 4 + (1 << s->chroma_format); @@ -1054,7 +1054,7 @@ static int mpeg_decode_mb(MpegEncContext *s, int16_t block[12][64]) static av_cold int mpeg_decode_init(AVCodecContext *avctx) { Mpeg1Context *s = avctx->priv_data; - MpegEncContext *s2 = &s->mpeg_enc_ctx; + MPVMainDecContext *const s2 = &s->mpeg_ctx; if ( avctx->codec_tag != AV_RL32("VCR2") && avctx->codec_tag != AV_RL32("BW10")) @@ -1064,11 +1064,11 @@ static av_cold int mpeg_decode_init(AVCodecContext *avctx) /* we need some permutation to store matrices, * until the decoder sets the real permutation. */ ff_mpv_idct_init(s2); - ff_mpeg12_common_init(&s->mpeg_enc_ctx); + ff_mpeg12_common_init(&s->mpeg_ctx); ff_mpeg12_init_vlcs(); s2->chroma_format = 1; - s->mpeg_enc_ctx_allocated = 0; + s->mpeg_ctx_allocated = 0; s->repeat_field = 0; avctx->color_range = AVCOL_RANGE_MPEG; return 0; @@ -1079,11 +1079,11 @@ static int mpeg_decode_update_thread_context(AVCodecContext *avctx, const AVCodecContext *avctx_from) { Mpeg1Context *ctx = avctx->priv_data, *ctx_from = avctx_from->priv_data; - MpegEncContext *s = &ctx->mpeg_enc_ctx, *s1 = &ctx_from->mpeg_enc_ctx; + MPVMainDecContext *const s = &ctx->mpeg_ctx, *s1 = &ctx_from->mpeg_ctx; int err; if (avctx == avctx_from || - !ctx_from->mpeg_enc_ctx_allocated || + !ctx_from->mpeg_ctx_allocated || !s1->context_initialized) return 0; @@ -1091,8 +1091,8 @@ static int mpeg_decode_update_thread_context(AVCodecContext *avctx, if (err) return err; - if (!ctx->mpeg_enc_ctx_allocated) - memcpy(s + 1, s1 + 1, sizeof(Mpeg1Context) - sizeof(MpegEncContext)); + if (!ctx->mpeg_ctx_allocated) + memcpy(s + 1, s1 + 1, sizeof(Mpeg1Context) - sizeof(MPVMainDecContext)); return 0; } @@ -1164,7 +1164,7 @@ static const enum AVPixelFormat mpeg12_pixfmt_list_444[] = { static enum AVPixelFormat mpeg_get_pixelformat(AVCodecContext *avctx) { Mpeg1Context *s1 = avctx->priv_data; - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; const enum AVPixelFormat *pix_fmts; if (CONFIG_GRAY && (avctx->flags & AV_CODEC_FLAG_GRAY)) @@ -1191,7 +1191,7 @@ static void setup_hwaccel_for_pixfmt(AVCodecContext *avctx) if (avctx->hwaccel && avctx->pix_fmt == AV_PIX_FMT_XVMC) { Mpeg1Context *s1 = avctx->priv_data; - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; s->pack_pblocks = 1; } @@ -1202,7 +1202,7 @@ static void setup_hwaccel_for_pixfmt(AVCodecContext *avctx) static int mpeg_decode_postinit(AVCodecContext *avctx) { Mpeg1Context *s1 = avctx->priv_data; - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; uint8_t old_permutation[64]; int ret; @@ -1257,7 +1257,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx) avctx->sample_aspect_ratio = (AVRational){ 0, 1 }; } - if ((s1->mpeg_enc_ctx_allocated == 0) || + if ((s1->mpeg_ctx_allocated == 0) || avctx->coded_width != s->width || avctx->coded_height != s->height || s1->save_width != s->width || @@ -1265,7 +1265,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx) av_cmp_q(s1->save_aspect, s->avctx->sample_aspect_ratio) || (s1->save_progressive_seq != s->progressive_sequence && FFALIGN(s->height, 16) != FFALIGN(s->height, 32)) || 0) { - if (s1->mpeg_enc_ctx_allocated) { + if (s1->mpeg_ctx_allocated) { #if FF_API_FLAG_TRUNCATED ParseContext pc = s->parse_context; s->parse_context.buffer = 0; @@ -1274,7 +1274,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx) #else ff_mpv_common_end(s); #endif - s1->mpeg_enc_ctx_allocated = 0; + s1->mpeg_ctx_allocated = 0; } ret = ff_set_dimensions(avctx, s->width, s->height); @@ -1335,7 +1335,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx) quant_matrix_rebuild(s->chroma_intra_matrix, old_permutation, s->idsp.idct_permutation); quant_matrix_rebuild(s->chroma_inter_matrix, old_permutation, s->idsp.idct_permutation); - s1->mpeg_enc_ctx_allocated = 1; + s1->mpeg_ctx_allocated = 1; } return 0; } @@ -1344,7 +1344,7 @@ static int mpeg1_decode_picture(AVCodecContext *avctx, const uint8_t *buf, int buf_size) { Mpeg1Context *s1 = avctx->priv_data; - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; int ref, f_code, vbv_delay, ret; ret = init_get_bits8(&s->gb, buf, buf_size); @@ -1391,7 +1391,7 @@ static int mpeg1_decode_picture(AVCodecContext *avctx, const uint8_t *buf, static void mpeg_decode_sequence_extension(Mpeg1Context *s1) { - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; int horiz_size_ext, vert_size_ext; int bit_rate_ext; AVCPBProperties *cpb_props; @@ -1441,7 +1441,7 @@ static void mpeg_decode_sequence_extension(Mpeg1Context *s1) static void mpeg_decode_sequence_display_extension(Mpeg1Context *s1) { - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; int color_description, w, h; skip_bits(&s->gb, 3); /* video format */ @@ -1465,7 +1465,7 @@ static void mpeg_decode_sequence_display_extension(Mpeg1Context *s1) static void mpeg_decode_picture_display_extension(Mpeg1Context *s1) { - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; int i, nofco; nofco = 1; @@ -1497,7 +1497,7 @@ static void mpeg_decode_picture_display_extension(Mpeg1Context *s1) s1->pan_scan.position[2][0], s1->pan_scan.position[2][1]); } -static int load_matrix(MpegEncContext *s, uint16_t matrix0[64], +static int load_matrix(MPVMainDecContext *s, uint16_t matrix0[64], uint16_t matrix1[64], int intra) { int i; @@ -1520,7 +1520,7 @@ static int load_matrix(MpegEncContext *s, uint16_t matrix0[64], return 0; } -static void mpeg_decode_quant_matrix_extension(MpegEncContext *s) +static void mpeg_decode_quant_matrix_extension(MPVMainDecContext *s) { ff_dlog(s->avctx, "matrix extension\n"); @@ -1536,7 +1536,7 @@ static void mpeg_decode_quant_matrix_extension(MpegEncContext *s) static int mpeg_decode_picture_coding_extension(Mpeg1Context *s1) { - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; s->full_pel[0] = s->full_pel[1] = 0; s->mpeg_f_code[0][0] = get_bits(&s->gb, 4); @@ -1547,7 +1547,7 @@ static int mpeg_decode_picture_coding_extension(Mpeg1Context *s1) s->mpeg_f_code[0][1] += !s->mpeg_f_code[0][1]; s->mpeg_f_code[1][0] += !s->mpeg_f_code[1][0]; s->mpeg_f_code[1][1] += !s->mpeg_f_code[1][1]; - if (!s->pict_type && s1->mpeg_enc_ctx_allocated) { + if (!s->pict_type && s1->mpeg_ctx_allocated) { av_log(s->avctx, AV_LOG_ERROR, "Missing picture start code\n"); if (s->avctx->err_recognition & AV_EF_EXPLODE) return AVERROR_INVALIDDATA; @@ -1597,7 +1597,7 @@ static int mpeg_decode_picture_coding_extension(Mpeg1Context *s1) return 0; } -static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size) +static int mpeg_field_start(MPVMainDecContext *s, const uint8_t *buf, int buf_size) { AVCodecContext *avctx = s->avctx; Mpeg1Context *s1 = (Mpeg1Context *) s; @@ -1705,11 +1705,11 @@ static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size) /** * Decode a slice. - * MpegEncContext.mb_y must be set to the MB row from the startcode. + * MPVDecContext.mb_y must be set to the MB row from the startcode. * @return DECODE_SLICE_ERROR if the slice is damaged, * DECODE_SLICE_OK if this slice is OK */ -static int mpeg_decode_slice(MpegEncContext *s, int mb_y, +static int mpeg_decode_slice(MPVDecContext *s, int mb_y, const uint8_t **buf, int buf_size) { AVCodecContext *avctx = s->avctx; @@ -1988,7 +1988,7 @@ eos: // end of slice static int slice_decode_thread(AVCodecContext *c, void *arg) { - MpegEncContext *s = *(void **) arg; + MPVDecContext *s = *(void **) arg; const uint8_t *buf = s->gb.buffer; int mb_y = s->start_mb_y; const int field_pic = s->picture_structure != PICT_FRAME; @@ -2042,9 +2042,9 @@ static int slice_decode_thread(AVCodecContext *c, void *arg) static int slice_end(AVCodecContext *avctx, AVFrame *pict) { Mpeg1Context *s1 = avctx->priv_data; - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; - if (!s1->mpeg_enc_ctx_allocated || !s->current_picture_ptr) + if (!s1->mpeg_ctx_allocated || !s->current_picture_ptr) return 0; if (s->avctx->hwaccel) { @@ -2091,7 +2091,7 @@ static int mpeg1_decode_sequence(AVCodecContext *avctx, const uint8_t *buf, int buf_size) { Mpeg1Context *s1 = avctx->priv_data; - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; int width, height; int i, v, j; @@ -2179,14 +2179,14 @@ static int mpeg1_decode_sequence(AVCodecContext *avctx, static int vcr2_init_sequence(AVCodecContext *avctx) { Mpeg1Context *s1 = avctx->priv_data; - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; int i, v, ret; /* start new MPEG-1 context decoding */ s->out_format = FMT_MPEG1; - if (s1->mpeg_enc_ctx_allocated) { + if (s1->mpeg_ctx_allocated) { ff_mpv_common_end(s); - s1->mpeg_enc_ctx_allocated = 0; + s1->mpeg_ctx_allocated = 0; } s->width = avctx->coded_width; s->height = avctx->coded_height; @@ -2199,7 +2199,7 @@ static int vcr2_init_sequence(AVCodecContext *avctx) ff_mpv_idct_init(s); if ((ret = ff_mpv_common_init(s)) < 0) return ret; - s1->mpeg_enc_ctx_allocated = 1; + s1->mpeg_ctx_allocated = 1; for (i = 0; i < 64; i++) { int j = s->idsp.idct_permutation[i]; @@ -2290,7 +2290,7 @@ static int mpeg_decode_a53_cc(AVCodecContext *avctx, cap[0] = cap[1] = cap[2] = 0x00; } else { field = (field == 2 ? 1 : 0); - if (!s1->mpeg_enc_ctx.top_field_first) field = !field; + if (!s1->mpeg_ctx.top_field_first) field = !field; cap[0] = 0x04 | field; cap[1] = ff_reverse[cc1]; cap[2] = ff_reverse[cc2]; @@ -2439,7 +2439,7 @@ static void mpeg_decode_gop(AVCodecContext *avctx, const uint8_t *buf, int buf_size) { Mpeg1Context *s1 = avctx->priv_data; - MpegEncContext *s = &s1->mpeg_enc_ctx; + MPVMainDecContext *const s = &s1->mpeg_ctx; int broken_link; int64_t tc; @@ -2466,7 +2466,7 @@ static int decode_chunks(AVCodecContext *avctx, AVFrame *picture, int *got_output, const uint8_t *buf, int buf_size) { Mpeg1Context *s = avctx->priv_data; - MpegEncContext *s2 = &s->mpeg_enc_ctx; + MPVMainDecContext *const s2 = &s->mpeg_ctx; const uint8_t *buf_ptr = buf; const uint8_t *buf_end = buf + buf_size; int ret, input_size; @@ -2721,7 +2721,7 @@ static int decode_chunks(AVCodecContext *avctx, AVFrame *picture, break; } - if (!s->mpeg_enc_ctx_allocated) + if (!s->mpeg_ctx_allocated) break; if (s2->codec_id == AV_CODEC_ID_MPEG2VIDEO) { @@ -2757,7 +2757,7 @@ static int decode_chunks(AVCodecContext *avctx, AVFrame *picture, s2->slice_context_count; av_assert0(avctx->thread_count > 1); if (threshold <= mb_y) { - MpegEncContext *thread_context = s2->thread_context[s->slice_count]; + MPVDecContext *const thread_context = s2->thread_context[s->slice_count]; thread_context->start_mb_y = mb_y; thread_context->end_mb_y = s2->mb_height; @@ -2802,7 +2802,7 @@ static int mpeg_decode_frame(AVCodecContext *avctx, void *data, int buf_size = avpkt->size; Mpeg1Context *s = avctx->priv_data; AVFrame *picture = data; - MpegEncContext *s2 = &s->mpeg_enc_ctx; + MPVMainDecContext *const s2 = &s->mpeg_ctx; if (buf_size == 0 || (buf_size == 4 && AV_RB32(buf) == SEQ_END_CODE)) { /* special case for last picture */ @@ -2830,7 +2830,7 @@ static int mpeg_decode_frame(AVCodecContext *avctx, void *data, #endif s2->codec_tag = ff_toupper4(avctx->codec_tag); - if (s->mpeg_enc_ctx_allocated == 0 && ( s2->codec_tag == AV_RL32("VCR2") + if (s->mpeg_ctx_allocated == 0 && ( s2->codec_tag == AV_RL32("VCR2") || s2->codec_tag == AV_RL32("BW10") )) vcr2_init_sequence(avctx); @@ -2889,8 +2889,8 @@ static av_cold int mpeg_decode_end(AVCodecContext *avctx) { Mpeg1Context *s = avctx->priv_data; - if (s->mpeg_enc_ctx_allocated) - ff_mpv_common_end(&s->mpeg_enc_ctx); + if (s->mpeg_ctx_allocated) + ff_mpv_common_end(&s->mpeg_ctx); av_buffer_unref(&s->a53_buf_ref); return 0; } @@ -3001,7 +3001,7 @@ const AVCodec ff_mpegvideo_decoder = { }; typedef struct IPUContext { - MpegEncContext m; + MPVMainDecContext m; int flags; DECLARE_ALIGNED(32, int16_t, block)[6][64]; @@ -3011,7 +3011,7 @@ static int ipu_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt) { IPUContext *s = avctx->priv_data; - MpegEncContext *m = &s->m; + MPVMainDecContext *const m = &s->m; GetBitContext *gb = &m->gb; AVFrame * const frame = data; int ret; @@ -3111,7 +3111,7 @@ static int ipu_decode_frame(AVCodecContext *avctx, void *data, static av_cold int ipu_decode_init(AVCodecContext *avctx) { IPUContext *s = avctx->priv_data; - MpegEncContext *m = &s->m; + MPVMainDecContext *const m = &s->m; avctx->pix_fmt = AV_PIX_FMT_YUV420P; diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c index 3ec3ac1860..4d01a9215a 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -64,7 +64,7 @@ static uint32_t mpeg1_lum_dc_uni[512]; static uint32_t mpeg1_chr_dc_uni[512]; typedef struct MPEG12EncContext { - MpegEncContext mpeg; + MPVMainEncContext mpeg; AVRational frame_rate_ext; unsigned frame_rate_index; @@ -122,7 +122,7 @@ av_cold void ff_mpeg1_init_uni_ac_vlc(const RLTable *rl, uint8_t *uni_ac_vlc_len #if CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER static int find_frame_rate_index(MPEG12EncContext *mpeg12) { - MpegEncContext *const s = &mpeg12->mpeg; + MPVMainEncContext *const s = &mpeg12->mpeg; int i; AVRational bestq = (AVRational) {0, 0}; AVRational ext; @@ -163,7 +163,7 @@ static int find_frame_rate_index(MPEG12EncContext *mpeg12) static av_cold int encode_init(AVCodecContext *avctx) { MPEG12EncContext *const mpeg12 = avctx->priv_data; - MpegEncContext *const s = &mpeg12->mpeg; + MPVMainEncContext *const s = &mpeg12->mpeg; int ret; int max_size = avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO ? 16383 : 4095; @@ -255,7 +255,7 @@ static av_cold int encode_init(AVCodecContext *avctx) return 0; } -static void put_header(MpegEncContext *s, int header) +static void put_header(MPVEncContext *s, int header) { align_put_bits(&s->pb); put_bits(&s->pb, 16, header >> 16); @@ -263,7 +263,7 @@ static void put_header(MpegEncContext *s, int header) } /* put sequence header if needed */ -static void mpeg1_encode_sequence_header(MpegEncContext *s) +static void mpeg1_encode_sequence_header(MPVMainEncContext *s) { MPEG12EncContext *const mpeg12 = (MPEG12EncContext*)s; unsigned int vbv_buffer_size, fps, v; @@ -422,7 +422,7 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s) put_bits(&s->pb, 1, 0); // broken link } -static inline void encode_mb_skip_run(MpegEncContext *s, int run) +static inline void encode_mb_skip_run(MPVEncContext *s, int run) { while (run >= 33) { put_bits(&s->pb, 11, 0x008); @@ -432,12 +432,12 @@ static inline void encode_mb_skip_run(MpegEncContext *s, int run) ff_mpeg12_mbAddrIncrTable[run][0]); } -static av_always_inline void put_qscale(MpegEncContext *s) +static av_always_inline void put_qscale(MPVEncContext *s) { put_bits(&s->pb, 5, s->qscale); } -void ff_mpeg1_encode_slice_header(MpegEncContext *s) +void ff_mpeg1_encode_slice_header(MPVEncContext *s) { if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO && s->height > 2800) { put_header(s, SLICE_MIN_START_CODE + (s->mb_y & 127)); @@ -451,7 +451,7 @@ void ff_mpeg1_encode_slice_header(MpegEncContext *s) put_bits(&s->pb, 1, 0); } -void ff_mpeg1_encode_picture_header(MpegEncContext *s, int picture_number) +void ff_mpeg1_encode_picture_header(MPVMainEncContext *s, int picture_number) { MPEG12EncContext *const mpeg12 = (MPEG12EncContext*)s; AVFrameSideData *side_data; @@ -611,7 +611,7 @@ void ff_mpeg1_encode_picture_header(MpegEncContext *s, int picture_number) ff_mpeg1_encode_slice_header(s); } -static inline void put_mb_modes(MpegEncContext *s, int n, int bits, +static inline void put_mb_modes(MPVEncContext *s, int n, int bits, int has_mv, int field_motion) { put_bits(&s->pb, n, bits); @@ -624,7 +624,7 @@ static inline void put_mb_modes(MpegEncContext *s, int n, int bits, } // RAL: Parameter added: f_or_b_code -static void mpeg1_encode_motion(MpegEncContext *s, int val, int f_or_b_code) +static void mpeg1_encode_motion(MPVEncContext *s, int val, int f_or_b_code) { if (val == 0) { /* zero vector, corresponds to ff_mpeg12_mbMotionVectorTable[0] */ @@ -661,7 +661,7 @@ static void mpeg1_encode_motion(MpegEncContext *s, int val, int f_or_b_code) } } -static inline void encode_dc(MpegEncContext *s, int diff, int component) +static inline void encode_dc(MPVEncContext *s, int diff, int component) { unsigned int diff_u = diff + 255; if (diff_u >= 511) { @@ -695,7 +695,7 @@ static inline void encode_dc(MpegEncContext *s, int diff, int component) } } -static void mpeg1_encode_block(MpegEncContext *s, int16_t *block, int n) +static void mpeg1_encode_block(MPVEncContext *s, int16_t *block, int n) { int alevel, level, last_non_zero, dc, diff, i, j, run, last_index, sign; int code, component; @@ -776,7 +776,7 @@ next_coef: put_bits(&s->pb, table_vlc[112][1], table_vlc[112][0]); } -static av_always_inline void mpeg1_encode_mb_internal(MpegEncContext *s, +static av_always_inline void mpeg1_encode_mb_internal(MPVEncContext *s, int16_t block[8][64], int motion_x, int motion_y, int mb_block_count, @@ -1057,7 +1057,7 @@ static av_always_inline void mpeg1_encode_mb_internal(MpegEncContext *s, } } -void ff_mpeg1_encode_mb(MpegEncContext *s, int16_t block[8][64], +void ff_mpeg1_encode_mb(MPVEncContext *s, int16_t block[8][64], int motion_x, int motion_y) { if (s->chroma_format == CHROMA_420) @@ -1131,7 +1131,7 @@ static av_cold void mpeg12_encode_init_static(void) fcode_tab[mv + MAX_MV] = f_code; } -av_cold void ff_mpeg1_encode_init(MpegEncContext *s) +av_cold void ff_mpeg1_encode_init(MPVMainEncContext *s) { static AVOnce init_static_once = AV_ONCE_INIT; diff --git a/libavcodec/mpeg4video.c b/libavcodec/mpeg4video.c index ffeaf822b2..68be7e21ed 100644 --- a/libavcodec/mpeg4video.c +++ b/libavcodec/mpeg4video.c @@ -39,7 +39,7 @@ av_cold void ff_mpeg4_init_rl_intra(void) ff_thread_once(&init_static_once, mpeg4_init_rl_intra); } -int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s) +int ff_mpeg4_get_video_packet_prefix_length(MPVContext *s) { switch (s->pict_type) { case AV_PICTURE_TYPE_I: @@ -54,7 +54,7 @@ int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s) } } -void ff_mpeg4_clean_buffers(MpegEncContext *s) +void ff_mpeg4_clean_buffers(MPVContext *s) { int c_wrap, c_xy, l_wrap, l_xy; @@ -80,7 +80,7 @@ void ff_mpeg4_clean_buffers(MpegEncContext *s) #define tab_bias (tab_size / 2) // used by MPEG-4 and rv10 decoder -void ff_mpeg4_init_direct_mv(MpegEncContext *s) +void ff_mpeg4_init_direct_mv(MPVMainContext *s) { int i; for (i = 0; i < tab_size; i++) { @@ -90,7 +90,7 @@ void ff_mpeg4_init_direct_mv(MpegEncContext *s) } } -static inline void ff_mpeg4_set_one_direct_mv(MpegEncContext *s, int mx, +static inline void ff_mpeg4_set_one_direct_mv(MPVContext *s, int mx, int my, int i) { int xy = s->block_index[i]; @@ -126,7 +126,7 @@ static inline void ff_mpeg4_set_one_direct_mv(MpegEncContext *s, int mx, /** * @return the mb_type */ -int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my) +int ff_mpeg4_set_direct_mv(MPVContext *s, int mx, int my) { const int mb_index = s->mb_x + s->mb_y * s->mb_stride; const int colocated_mb_type = s->next_picture.mb_type[mb_index]; diff --git a/libavcodec/mpeg4video.h b/libavcodec/mpeg4video.h index 14fc5e1396..6e72c6478a 100644 --- a/libavcodec/mpeg4video.h +++ b/libavcodec/mpeg4video.h @@ -27,6 +27,7 @@ #include "get_bits.h" #include "mpegvideo.h" +#include "mpegvideoenc.h" // shapes #define RECT_SHAPE 0 @@ -71,7 +72,7 @@ #define MAX_NVOP_SIZE 19 typedef struct Mpeg4DecContext { - MpegEncContext m; + MPVMainDecContext m; /// number of bits to represent the fractional part of time int time_increment_bits; @@ -124,37 +125,37 @@ typedef struct Mpeg4DecContext { } Mpeg4DecContext; -void ff_mpeg4_decode_studio(MpegEncContext *s, uint8_t *dest_y, uint8_t *dest_cb, +void ff_mpeg4_decode_studio(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int block_size, int uvlinesize, int dct_linesize, int dct_offset); -void ff_mpeg4_encode_mb(MpegEncContext *s, +void ff_mpeg4_encode_mb(MPVEncContext *s, int16_t block[6][64], int motion_x, int motion_y); -void ff_mpeg4_pred_ac(MpegEncContext *s, int16_t *block, int n, +void ff_mpeg4_pred_ac(MPVDecContext *s, int16_t *block, int n, int dir); -void ff_set_mpeg4_time(MpegEncContext *s); -int ff_mpeg4_encode_picture_header(MpegEncContext *s, int picture_number); +void ff_set_mpeg4_time(MPVMainEncContext *s); +int ff_mpeg4_encode_picture_header(MPVMainEncContext *s, int picture_number); int ff_mpeg4_decode_picture_header(Mpeg4DecContext *ctx, GetBitContext *gb, int header, int parse_only); -void ff_mpeg4_encode_video_packet_header(MpegEncContext *s); -void ff_mpeg4_clean_buffers(MpegEncContext *s); +void ff_mpeg4_encode_video_packet_header(MPVEncContext *s); +void ff_mpeg4_clean_buffers(MPVContext *s); void ff_mpeg4_stuffing(PutBitContext *pbc); -void ff_mpeg4_init_partitions(MpegEncContext *s); -void ff_mpeg4_merge_partitions(MpegEncContext *s); -void ff_clean_mpeg4_qscales(MpegEncContext *s); +void ff_mpeg4_init_partitions(MPVEncContext *s); +void ff_mpeg4_merge_partitions(MPVEncContext *s); +void ff_clean_mpeg4_qscales(MPVMainEncContext *s); int ff_mpeg4_decode_partitions(Mpeg4DecContext *ctx); -int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s); +int ff_mpeg4_get_video_packet_prefix_length(MPVContext *s); int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx); int ff_mpeg4_decode_studio_slice_header(Mpeg4DecContext *ctx); -void ff_mpeg4_init_direct_mv(MpegEncContext *s); +void ff_mpeg4_init_direct_mv(MPVContext *s); int ff_mpeg4_workaround_bugs(AVCodecContext *avctx); int ff_mpeg4_frame_end(AVCodecContext *avctx, const uint8_t *buf, int buf_size); /** * @return the mb_type */ -int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my); +int ff_mpeg4_set_direct_mv(MPVContext *s, int mx, int my); #if 0 //3IV1 is quite rare and it slows things down a tiny bit #define IS_3IV1 s->codec_tag == AV_RL32("3IV1") @@ -169,7 +170,7 @@ int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my); * @param n block index (0-3 are luma, 4-5 are chroma) * @param dir_ptr pointer to an integer where the prediction direction will be stored */ -static inline int ff_mpeg4_pred_dc(MpegEncContext *s, int n, int level, +static inline int ff_mpeg4_pred_dc(MPVContext *s, int n, int level, int *dir_ptr, int encoding) { int a, b, c, wrap, pred, scale, ret; diff --git a/libavcodec/mpeg4video_parser.c b/libavcodec/mpeg4video_parser.c index 1f89bae490..46601ab1e1 100644 --- a/libavcodec/mpeg4video_parser.c +++ b/libavcodec/mpeg4video_parser.c @@ -91,7 +91,7 @@ static int mpeg4_decode_header(AVCodecParserContext *s1, AVCodecContext *avctx, { struct Mp4vParseContext *pc = s1->priv_data; Mpeg4DecContext *dec_ctx = &pc->dec_ctx; - MpegEncContext *s = &dec_ctx->m; + MPVDecContext *const s = &dec_ctx->m; GetBitContext gb1, *gb = &gb1; int ret; diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index c0eaa00eba..8f67c9bdd0 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -68,7 +68,7 @@ static const int mb_type_b_map[4] = { MB_TYPE_L0 | MB_TYPE_16x16, }; -void ff_mpeg4_decode_studio(MpegEncContext *s, uint8_t *dest_y, uint8_t *dest_cb, +void ff_mpeg4_decode_studio(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int block_size, int uvlinesize, int dct_linesize, int dct_offset) { @@ -136,7 +136,7 @@ void ff_mpeg4_decode_studio(MpegEncContext *s, uint8_t *dest_y, uint8_t *dest_cb * @param n block index (0-3 are luma, 4-5 are chroma) * @param dir the ac prediction direction */ -void ff_mpeg4_pred_ac(MpegEncContext *s, int16_t *block, int n, int dir) +void ff_mpeg4_pred_ac(MPVDecContext *s, int16_t *block, int n, int dir) { int i; int16_t *ac_val, *ac_val1; @@ -193,7 +193,7 @@ void ff_mpeg4_pred_ac(MpegEncContext *s, int16_t *block, int n, int dir) */ static inline int mpeg4_is_resync(Mpeg4DecContext *ctx) { - MpegEncContext *s = &ctx->m; + MPVDecContext *const s = &ctx->m; int bits_count = get_bits_count(&s->gb); int v = show_bits(&s->gb, 16); @@ -243,7 +243,7 @@ static inline int mpeg4_is_resync(Mpeg4DecContext *ctx) static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *gb) { - MpegEncContext *s = &ctx->m; + MPVDecContext *const s = &ctx->m; int a = 2 << s->sprite_warping_accuracy; int rho = 3 - s->sprite_warping_accuracy; int r = 16 / a; @@ -495,7 +495,7 @@ overflow: } static int decode_new_pred(Mpeg4DecContext *ctx, GetBitContext *gb) { - MpegEncContext *s = &ctx->m; + MPVDecContext *const s = &ctx->m; int len = FFMIN(ctx->time_increment_bits + 3, 15); get_bits(gb, len); @@ -512,7 +512,7 @@ static int decode_new_pred(Mpeg4DecContext *ctx, GetBitContext *gb) { */ int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; int mb_num_bits = av_log2(s->mb_num - 1) + 1; int header_extension = 0, mb_num, len; @@ -599,7 +599,7 @@ int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx) return 0; } -static void reset_studio_dc_predictors(MpegEncContext *s) +static void reset_studio_dc_predictors(MPVDecContext *s) { /* Reset DC Predictors */ s->last_dc[0] = @@ -613,7 +613,7 @@ static void reset_studio_dc_predictors(MpegEncContext *s) */ int ff_mpeg4_decode_studio_slice_header(Mpeg4DecContext *ctx) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; GetBitContext *gb = &s->gb; unsigned vlc_len; uint16_t mb_num; @@ -655,7 +655,7 @@ int ff_mpeg4_decode_studio_slice_header(Mpeg4DecContext *ctx) */ static inline int get_amv(Mpeg4DecContext *ctx, int n) { - MpegEncContext *s = &ctx->m; + MPVDecContext *const s = &ctx->m; int x, y, mb_v, sum, dx, dy, shift; int len = 1 << (s->f_code + 4); const int a = s->sprite_warping_accuracy; @@ -706,7 +706,7 @@ static inline int get_amv(Mpeg4DecContext *ctx, int n) * @param dir_ptr the prediction direction will be stored here * @return the quantized dc */ -static inline int mpeg4_decode_dc(MpegEncContext *s, int n, int *dir_ptr) +static inline int mpeg4_decode_dc(MPVDecContext *s, int n, int *dir_ptr) { int level, code; @@ -755,7 +755,7 @@ static inline int mpeg4_decode_dc(MpegEncContext *s, int n, int *dir_ptr) */ static int mpeg4_decode_partition_a(Mpeg4DecContext *ctx) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; int mb_num = 0; static const int8_t quant_tab[4] = { -1, -2, 1, 2 }; @@ -947,7 +947,7 @@ try_again: * decode second partition. * @return <0 if an error occurred */ -static int mpeg4_decode_partition_b(MpegEncContext *s, int mb_count) +static int mpeg4_decode_partition_b(MPVMainDecContext *s, int mb_count) { int mb_num = 0; static const int8_t quant_tab[4] = { -1, -2, 1, 2 }; @@ -1042,7 +1042,7 @@ static int mpeg4_decode_partition_b(MpegEncContext *s, int mb_count) */ int ff_mpeg4_decode_partitions(Mpeg4DecContext *ctx) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; int mb_num; int ret; const int part_a_error = s->pict_type == AV_PICTURE_TYPE_I ? (ER_DC_ERROR | ER_MV_ERROR) : ER_MV_ERROR; @@ -1109,7 +1109,7 @@ static inline int mpeg4_decode_block(Mpeg4DecContext *ctx, int16_t *block, int n, int coded, int intra, int use_intra_dc_vlc, int rvlc) { - MpegEncContext *s = &ctx->m; + MPVDecContext *const s = &ctx->m; int level, i, last, run, qmul, qadd; int av_uninit(dc_pred_dir); RLTable *rl; @@ -1377,7 +1377,7 @@ not_coded: * decode partition C of one MB. * @return <0 if an error occurred */ -static int mpeg4_decode_partitioned_mb(MpegEncContext *s, int16_t block[6][64]) +static int mpeg4_decode_partitioned_mb(MPVDecContext *s, int16_t block[6][64]) { Mpeg4DecContext *ctx = s->avctx->priv_data; int cbp, mb_type, use_intra_dc_vlc; @@ -1465,7 +1465,7 @@ static int mpeg4_decode_partitioned_mb(MpegEncContext *s, int16_t block[6][64]) } } -static int mpeg4_decode_mb(MpegEncContext *s, int16_t block[6][64]) +static int mpeg4_decode_mb(MPVDecContext *s, int16_t block[6][64]) { Mpeg4DecContext *ctx = s->avctx->priv_data; int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant; @@ -1885,7 +1885,7 @@ static const uint8_t ac_state_tab[22][2] = {0, 11} }; -static int mpeg4_decode_studio_block(MpegEncContext *s, int32_t block[64], int n) +static int mpeg4_decode_studio_block(MPVDecContext *s, int32_t block[64], int n) { Mpeg4DecContext *ctx = s->avctx->priv_data; @@ -2000,7 +2000,7 @@ static int mpeg4_decode_studio_block(MpegEncContext *s, int32_t block[64], int n return 0; } -static int mpeg4_decode_dpcm_macroblock(MpegEncContext *s, int16_t macroblock[256], int n) +static int mpeg4_decode_dpcm_macroblock(MPVDecContext *s, int16_t macroblock[256], int n) { int i, j, w, h, idx = 0; int block_mean, rice_parameter, rice_prefix_code, rice_suffix_code, @@ -2083,7 +2083,7 @@ static int mpeg4_decode_dpcm_macroblock(MpegEncContext *s, int16_t macroblock[25 return 0; } -static int mpeg4_decode_studio_mb(MpegEncContext *s, int16_t block_[12][64]) +static int mpeg4_decode_studio_mb(MPVDecContext *s, int16_t block_[12][64]) { Mpeg4DecContext *const ctx = (Mpeg4DecContext*)s; int i; @@ -2131,7 +2131,7 @@ static int mpeg4_decode_studio_mb(MpegEncContext *s, int16_t block_[12][64]) return SLICE_OK; } -static int mpeg4_decode_gop_header(MpegEncContext *s, GetBitContext *gb) +static int mpeg4_decode_gop_header(MPVMainDecContext *s, GetBitContext *gb) { int hours, minutes, seconds; @@ -2153,7 +2153,7 @@ static int mpeg4_decode_gop_header(MpegEncContext *s, GetBitContext *gb) return 0; } -static int mpeg4_decode_profile_level(MpegEncContext *s, GetBitContext *gb, int *profile, int *level) +static int mpeg4_decode_profile_level(GetBitContext *gb, int *profile, int *level) { *profile = get_bits(gb, 4); @@ -2167,7 +2167,7 @@ static int mpeg4_decode_profile_level(MpegEncContext *s, GetBitContext *gb, int return 0; } -static int mpeg4_decode_visual_object(MpegEncContext *s, GetBitContext *gb) +static int mpeg4_decode_visual_object(MPVMainDecContext *s, GetBitContext *gb) { int visual_object_type; int is_visual_object_identifier = get_bits1(gb); @@ -2199,7 +2199,7 @@ static int mpeg4_decode_visual_object(MpegEncContext *s, GetBitContext *gb) return 0; } -static void mpeg4_load_default_matrices(MpegEncContext *s) +static void mpeg4_load_default_matrices(MPVMainDecContext *s) { int i, v; @@ -2216,7 +2216,7 @@ static void mpeg4_load_default_matrices(MpegEncContext *s) } } -static int read_quant_matrix_ext(MpegEncContext *s, GetBitContext *gb) +static int read_quant_matrix_ext(MPVMainDecContext *s, GetBitContext *gb) { int i, j, v; @@ -2265,7 +2265,7 @@ static int read_quant_matrix_ext(MpegEncContext *s, GetBitContext *gb) return 0; } -static void extension_and_user_data(MpegEncContext *s, GetBitContext *gb, int id) +static void extension_and_user_data(MPVMainDecContext *s, GetBitContext *gb, int id) { uint32_t startcode; uint8_t extension_type; @@ -2284,7 +2284,7 @@ static void extension_and_user_data(MpegEncContext *s, GetBitContext *gb, int id static int decode_studio_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; int width, height, aspect_ratio_info; int bits_per_raw_sample; int rgb, chroma_format; @@ -2370,7 +2370,7 @@ static int decode_studio_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb) static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; int width, height, vo_ver_id, aspect_ratio_info; /* vol header */ @@ -2745,7 +2745,7 @@ no_cplx_est: */ static int decode_user_data(Mpeg4DecContext *ctx, GetBitContext *gb) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; char buf[256]; int i; int e; @@ -2803,7 +2803,7 @@ static int decode_user_data(Mpeg4DecContext *ctx, GetBitContext *gb) int ff_mpeg4_workaround_bugs(AVCodecContext *avctx) { Mpeg4DecContext *ctx = avctx->priv_data; - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; if (ctx->xvid_build == -1 && ctx->divx_version == -1 && ctx->lavc_build == -1) { if (s->codec_tag == AV_RL32("XVID") || @@ -2921,7 +2921,7 @@ int ff_mpeg4_workaround_bugs(AVCodecContext *avctx) static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb, int parse_only) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; int time_incr, time_increment; int64_t pts; @@ -3203,7 +3203,7 @@ end: static void decode_smpte_tc(Mpeg4DecContext *ctx, GetBitContext *gb) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; skip_bits(gb, 16); /* Time_code[63..48] */ check_marker(s->avctx, gb, "after Time_code[63..48]"); @@ -3222,7 +3222,7 @@ static void decode_smpte_tc(Mpeg4DecContext *ctx, GetBitContext *gb) */ static int decode_studio_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; if (get_bits_left(gb) <= 32) return 0; @@ -3277,7 +3277,7 @@ static int decode_studio_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb) static int decode_studiovisualobject(Mpeg4DecContext *ctx, GetBitContext *gb) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; int visual_object_type; skip_bits(gb, 4); /* visual_object_verid */ @@ -3306,7 +3306,7 @@ static int decode_studiovisualobject(Mpeg4DecContext *ctx, GetBitContext *gb) int ff_mpeg4_decode_picture_header(Mpeg4DecContext *ctx, GetBitContext *gb, int header, int parse_only) { - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; unsigned startcode, v; int ret; int vol = 0; @@ -3420,7 +3420,7 @@ int ff_mpeg4_decode_picture_header(Mpeg4DecContext *ctx, GetBitContext *gb, mpeg4_decode_gop_header(s, gb); } else if (startcode == VOS_STARTCODE) { int profile, level; - mpeg4_decode_profile_level(s, gb, &profile, &level); + mpeg4_decode_profile_level(gb, &profile, &level); if (profile == FF_PROFILE_MPEG4_SIMPLE_STUDIO && (level > 0 && level < 9)) { s->studio_profile = 1; @@ -3464,7 +3464,7 @@ end: int ff_mpeg4_frame_end(AVCodecContext *avctx, const uint8_t *buf, int buf_size) { Mpeg4DecContext *ctx = avctx->priv_data; - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; /* divx 5.01+ bitstream reorder stuff */ /* Since this clobbers the input buffer and hwaccel codecs still need the @@ -3560,8 +3560,8 @@ static int mpeg4_update_thread_context(AVCodecContext *dst, static int mpeg4_update_thread_context_for_user(AVCodecContext *dst, const AVCodecContext *src) { - MpegEncContext *m = dst->priv_data; - const MpegEncContext *m1 = src->priv_data; + MPVMainDecContext *const m = dst->priv_data; + const MPVMainDecContext *const m1 = src->priv_data; m->quarter_sample = m1->quarter_sample; m->divx_packed = m1->divx_packed; @@ -3621,7 +3621,7 @@ static av_cold int decode_init(AVCodecContext *avctx) { static AVOnce init_static_once = AV_ONCE_INIT; Mpeg4DecContext *ctx = avctx->priv_data; - MpegEncContext *s = &ctx->m; + MPVMainDecContext *const s = &ctx->m; int ret; ctx->divx_version = @@ -3644,7 +3644,7 @@ static av_cold int decode_init(AVCodecContext *avctx) return 0; } -#define OFFSET(x) offsetof(MpegEncContext, x) +#define OFFSET(x) offsetof(MPVMainDecContext, x) #define FLAGS AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY static const AVOption mpeg4_options[] = { {"quarter_sample", "1/4 subpel MC", OFFSET(quarter_sample), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, FLAGS}, diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c index d09e20605d..cd7ce1f382 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -66,7 +66,7 @@ static uint8_t uni_mpeg4_inter_rl_len[64 * 64 * 2 * 2]; * Return the number of bits that encoding the 8x8 block in block would need. * @param[in] block_last_index last index in scantable order that refers to a non zero element in block. */ -static inline int get_block_rate(MpegEncContext *s, int16_t block[64], +static inline int get_block_rate(MPVEncContext *s, int16_t block[64], int block_last_index, uint8_t scantable[64]) { int last = 0; @@ -101,7 +101,7 @@ static inline int get_block_rate(MpegEncContext *s, int16_t block[64], * @param[out] st scantable for each 8x8 block * @param[in] zigzag_last_index index referring to the last non zero coefficient in zigzag order */ -static inline void restore_ac_coeffs(MpegEncContext *s, int16_t block[6][64], +static inline void restore_ac_coeffs(MPVEncContext *s, int16_t block[6][64], const int dir[6], uint8_t *st[6], const int zigzag_last_index[6]) { @@ -132,7 +132,7 @@ static inline void restore_ac_coeffs(MpegEncContext *s, int16_t block[6][64], * @param[out] st scantable for each 8x8 block * @param[out] zigzag_last_index index referring to the last non zero coefficient in zigzag order */ -static inline int decide_ac_pred(MpegEncContext *s, int16_t block[6][64], +static inline int decide_ac_pred(MPVEncContext *s, int16_t block[6][64], const int dir[6], uint8_t *st[6], int zigzag_last_index[6]) { @@ -215,7 +215,7 @@ static inline int decide_ac_pred(MpegEncContext *s, int16_t block[6][64], /** * modify mb_type & qscale so that encoding is actually possible in MPEG-4 */ -void ff_clean_mpeg4_qscales(MpegEncContext *s) +void ff_clean_mpeg4_qscales(MPVMainEncContext *s) { int i; int8_t *const qscale_table = s->current_picture.qscale_table; @@ -284,7 +284,7 @@ static inline int mpeg4_get_dc_length(int level, int n) * Encode an 8x8 block. * @param n block index (0-3 are luma, 4-5 are chroma) */ -static inline void mpeg4_encode_block(MpegEncContext *s, +static inline void mpeg4_encode_block(MPVEncContext *s, int16_t *block, int n, int intra_dc, uint8_t *scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb) @@ -345,7 +345,7 @@ static inline void mpeg4_encode_block(MpegEncContext *s, } } -static int mpeg4_get_block_length(MpegEncContext *s, +static int mpeg4_get_block_length(MPVEncContext *s, int16_t *block, int n, int intra_dc, uint8_t *scan_table) { @@ -399,7 +399,7 @@ static int mpeg4_get_block_length(MpegEncContext *s, return len; } -static inline void mpeg4_encode_blocks(MpegEncContext *s, int16_t block[6][64], +static inline void mpeg4_encode_blocks(MPVEncContext *s, int16_t block[6][64], int intra_dc[6], uint8_t **scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb) @@ -433,7 +433,7 @@ static inline void mpeg4_encode_blocks(MpegEncContext *s, int16_t block[6][64], } } -static inline int get_b_cbp(MpegEncContext *s, int16_t block[6][64], +static inline int get_b_cbp(MPVEncContext *s, int16_t block[6][64], int motion_x, int motion_y, int mb_type) { int cbp = 0, i; @@ -477,7 +477,7 @@ static inline int get_b_cbp(MpegEncContext *s, int16_t block[6][64], // FIXME this is duplicated to h263.c static const int dquant_code[5] = { 1, 0, 9, 2, 3 }; -void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], +void ff_mpeg4_encode_mb(MPVEncContext *s, int16_t block[6][64], int motion_x, int motion_y) { int cbpc, cbpy, pred_x, pred_y; @@ -875,7 +875,7 @@ void ff_mpeg4_stuffing(PutBitContext *pbc) } /* must be called before writing the header */ -void ff_set_mpeg4_time(MpegEncContext *s) +void ff_set_mpeg4_time(MPVMainEncContext *s) { if (s->pict_type == AV_PICTURE_TYPE_B) { ff_mpeg4_init_direct_mv(s); @@ -885,7 +885,7 @@ void ff_set_mpeg4_time(MpegEncContext *s) } } -static void mpeg4_encode_gop_header(MpegEncContext *s) +static void mpeg4_encode_gop_header(MPVMainEncContext *s) { int64_t hours, minutes, seconds; int64_t time; @@ -915,7 +915,7 @@ static void mpeg4_encode_gop_header(MpegEncContext *s) ff_mpeg4_stuffing(&s->pb); } -static void mpeg4_encode_visual_object_header(MpegEncContext *s) +static void mpeg4_encode_visual_object_header(MPVMainEncContext *s) { int profile_and_level_indication; int vo_ver_id; @@ -959,7 +959,7 @@ static void mpeg4_encode_visual_object_header(MpegEncContext *s) ff_mpeg4_stuffing(&s->pb); } -static void mpeg4_encode_vol_header(MpegEncContext *s, +static void mpeg4_encode_vol_header(MPVMainEncContext *s, int vo_number, int vol_number) { @@ -1060,7 +1060,7 @@ static void mpeg4_encode_vol_header(MpegEncContext *s, } /* write MPEG-4 VOP header */ -int ff_mpeg4_encode_picture_header(MpegEncContext *s, int picture_number) +int ff_mpeg4_encode_picture_header(MPVMainEncContext *s, int picture_number) { uint64_t time_incr; int64_t time_div, time_mod; @@ -1283,7 +1283,7 @@ static av_cold void mpeg4_encode_init_static(void) static av_cold int encode_init(AVCodecContext *avctx) { static AVOnce init_static_once = AV_ONCE_INIT; - MpegEncContext *s = avctx->priv_data; + MPVMainEncContext *const s = avctx->priv_data; int ret; if (avctx->width >= (1<<13) || avctx->height >= (1<<13)) { @@ -1324,7 +1324,7 @@ static av_cold int encode_init(AVCodecContext *avctx) return 0; } -void ff_mpeg4_init_partitions(MpegEncContext *s) +void ff_mpeg4_init_partitions(MPVEncContext *s) { uint8_t *start = put_bits_ptr(&s->pb); uint8_t *end = s->pb.buf_end; @@ -1337,7 +1337,7 @@ void ff_mpeg4_init_partitions(MpegEncContext *s) init_put_bits(&s->pb2, start + pb_size + tex_size, pb_size); } -void ff_mpeg4_merge_partitions(MpegEncContext *s) +void ff_mpeg4_merge_partitions(MPVEncContext *s) { const int pb2_len = put_bits_count(&s->pb2); const int tex_pb_len = put_bits_count(&s->tex_pb); @@ -1363,7 +1363,7 @@ void ff_mpeg4_merge_partitions(MpegEncContext *s) s->last_bits = put_bits_count(&s->pb); } -void ff_mpeg4_encode_video_packet_header(MpegEncContext *s) +void ff_mpeg4_encode_video_packet_header(MPVEncContext *s) { int mb_num_bits = av_log2(s->mb_num - 1) + 1; @@ -1375,7 +1375,7 @@ void ff_mpeg4_encode_video_packet_header(MpegEncContext *s) put_bits(&s->pb, 1, 0); /* no HEC */ } -#define OFFSET(x) offsetof(MpegEncContext, x) +#define OFFSET(x) offsetof(MPVMainEncContext, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { { "data_partitioning", "Use data partitioning.", OFFSET(data_partitioning), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, @@ -1404,7 +1404,7 @@ const AVCodec ff_mpeg4_encoder = { .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_MPEG4, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainEncContext), .init = encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, diff --git a/libavcodec/mpeg_er.c b/libavcodec/mpeg_er.c index f54cb8548b..bdbcea7ccd 100644 --- a/libavcodec/mpeg_er.c +++ b/libavcodec/mpeg_er.c @@ -43,7 +43,7 @@ static void set_erpic(ERPicture *dst, Picture *src) dst->field_picture = src->field_picture; } -void ff_mpeg_er_frame_start(MpegEncContext *s) +void ff_mpeg_er_frame_start(MPVMainDecContext *s) { ERContext *er = &s->er; @@ -63,7 +63,7 @@ static void mpeg_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type, int (*mv)[2][4][2], int mb_x, int mb_y, int mb_intra, int mb_skipped) { - MpegEncContext *s = opaque; + MPVDecContext *const s = opaque; s->mv_dir = mv_dir; s->mv_type = mv_type; @@ -97,7 +97,7 @@ static void mpeg_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type, ff_mpv_reconstruct_mb(s, s->block); } -int ff_mpeg_er_init(MpegEncContext *s) +int ff_mpeg_er_init(MPVDecContext *s) { ERContext *er = &s->er; int mb_array_size = s->mb_height * s->mb_stride; diff --git a/libavcodec/mpeg_er.h b/libavcodec/mpeg_er.h index bb627a4d06..b3c284c9a3 100644 --- a/libavcodec/mpeg_er.h +++ b/libavcodec/mpeg_er.h @@ -21,7 +21,7 @@ #include "mpegvideo.h" -int ff_mpeg_er_init(MpegEncContext *s); -void ff_mpeg_er_frame_start(MpegEncContext *s); +int ff_mpeg_er_init(MPVDecContext *s); +void ff_mpeg_er_frame_start(MPVMainDecContext *s); #endif /* AVCODEC_MPEG_ER_H */ diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index bbcf00b014..500f8af19d 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -47,7 +47,7 @@ #include "wmv2.h" #include -static void dct_unquantize_mpeg1_intra_c(MpegEncContext *s, +static void dct_unquantize_mpeg1_intra_c(MPVContext *s, int16_t *block, int n, int qscale) { int i, level, nCoeffs; @@ -76,7 +76,7 @@ static void dct_unquantize_mpeg1_intra_c(MpegEncContext *s, } } -static void dct_unquantize_mpeg1_inter_c(MpegEncContext *s, +static void dct_unquantize_mpeg1_inter_c(MPVContext *s, int16_t *block, int n, int qscale) { int i, level, nCoeffs; @@ -105,7 +105,7 @@ static void dct_unquantize_mpeg1_inter_c(MpegEncContext *s, } } -static void dct_unquantize_mpeg2_intra_c(MpegEncContext *s, +static void dct_unquantize_mpeg2_intra_c(MPVContext *s, int16_t *block, int n, int qscale) { int i, level, nCoeffs; @@ -135,7 +135,7 @@ static void dct_unquantize_mpeg2_intra_c(MpegEncContext *s, } } -static void dct_unquantize_mpeg2_intra_bitexact(MpegEncContext *s, +static void dct_unquantize_mpeg2_intra_bitexact(MPVContext *s, int16_t *block, int n, int qscale) { int i, level, nCoeffs; @@ -169,7 +169,7 @@ static void dct_unquantize_mpeg2_intra_bitexact(MpegEncContext *s, block[63]^=sum&1; } -static void dct_unquantize_mpeg2_inter_c(MpegEncContext *s, +static void dct_unquantize_mpeg2_inter_c(MPVContext *s, int16_t *block, int n, int qscale) { int i, level, nCoeffs; @@ -203,7 +203,7 @@ static void dct_unquantize_mpeg2_inter_c(MpegEncContext *s, block[63]^=sum&1; } -static void dct_unquantize_h263_intra_c(MpegEncContext *s, +static void dct_unquantize_h263_intra_c(MPVContext *s, int16_t *block, int n, int qscale) { int i, level, qmul, qadd; @@ -237,7 +237,7 @@ static void dct_unquantize_h263_intra_c(MpegEncContext *s, } } -static void dct_unquantize_h263_inter_c(MpegEncContext *s, +static void dct_unquantize_h263_inter_c(MPVContext *s, int16_t *block, int n, int qscale) { int i, level, qmul, qadd; @@ -277,7 +277,7 @@ static void gray8(uint8_t *dst, const uint8_t *src, ptrdiff_t linesize, int h) } /* init common dct for both encoder and decoder */ -static av_cold int dct_init(MpegEncContext *s) +static av_cold int dct_init(MPVMainContext *s) { ff_blockdsp_init(&s->bdsp, s->avctx); ff_h264chroma_init(&s->h264chroma, 8); //for lowres @@ -324,7 +324,7 @@ static av_cold int dct_init(MpegEncContext *s) return 0; } -av_cold void ff_mpv_idct_init(MpegEncContext *s) +av_cold void ff_mpv_idct_init(MPVMainContext *s) { if (s->codec_id == AV_CODEC_ID_MPEG4) s->idsp.mpeg4_studio_profile = s->studio_profile; @@ -344,7 +344,7 @@ av_cold void ff_mpv_idct_init(MpegEncContext *s) ff_init_scantable(s->idsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan); } -static int init_duplicate_context(MpegEncContext *s) +static int init_duplicate_context(MPVContext *s) { int y_size = s->b8_stride * (2 * s->mb_height + 1); int c_size = s->mb_stride * (s->mb_height + 1); @@ -389,7 +389,7 @@ static int init_duplicate_context(MpegEncContext *s) return 0; } -int ff_mpv_init_duplicate_contexts(MpegEncContext *s) +int ff_mpv_init_duplicate_contexts(MPVMainContext *s) { int nb_slices = s->slice_context_count, ret; @@ -397,7 +397,7 @@ int ff_mpv_init_duplicate_contexts(MpegEncContext *s) * fields allocated in init_duplicate_context are NULL after * copying. This prevents double-frees upon allocation error. */ for (int i = 1; i < nb_slices; i++) { - s->thread_context[i] = av_memdup(s, sizeof(MpegEncContext)); + s->thread_context[i] = av_memdup(s, sizeof(MPVContext)); if (!s->thread_context[i]) return AVERROR(ENOMEM); if ((ret = init_duplicate_context(s->thread_context[i])) < 0) @@ -413,7 +413,7 @@ int ff_mpv_init_duplicate_contexts(MpegEncContext *s) return init_duplicate_context(s); } -static void free_duplicate_context(MpegEncContext *s) +static void free_duplicate_context(MPVContext *s) { if (!s) return; @@ -433,7 +433,7 @@ static void free_duplicate_context(MpegEncContext *s) s->block = NULL; } -static void free_duplicate_contexts(MpegEncContext *s) +static void free_duplicate_contexts(MPVMainContext *s) { for (int i = 1; i < s->slice_context_count; i++) { free_duplicate_context(s->thread_context[i]); @@ -442,7 +442,7 @@ static void free_duplicate_contexts(MpegEncContext *s) free_duplicate_context(s); } -static void backup_duplicate_context(MpegEncContext *bak, MpegEncContext *src) +static void backup_duplicate_context(MPVContext *bak, MPVContext *src) { #define COPY(a) bak->a = src->a COPY(sc.edge_emu_buffer); @@ -469,13 +469,13 @@ static void backup_duplicate_context(MpegEncContext *bak, MpegEncContext *src) #undef COPY } -int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src) +int ff_update_duplicate_context(MPVContext *dst, MPVContext *src) { - MpegEncContext bak; + MPVContext bak; int i, ret; // FIXME copy only needed parts backup_duplicate_context(&bak, dst); - memcpy(dst, src, sizeof(MpegEncContext)); + memcpy(dst, src, sizeof(*dst)); backup_duplicate_context(dst, &bak); for (i = 0; i < 12; i++) { dst->pblocks[i] = &dst->block[i]; @@ -495,12 +495,12 @@ int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src) } /** - * Set the given MpegEncContext to common defaults + * Set the given MPVMainContext to common defaults * (same for encoding and decoding). * The changed fields will not depend upon the - * prior state of the MpegEncContext. + * prior state of the MPVMainContext. */ -void ff_mpv_common_defaults(MpegEncContext *s) +void ff_mpv_common_defaults(MPVMainContext *s) { s->y_dc_scale_table = s->c_dc_scale_table = ff_mpeg1_dc_scale_table; @@ -518,7 +518,7 @@ void ff_mpv_common_defaults(MpegEncContext *s) s->slice_context_count = 1; } -int ff_mpv_init_context_frame(MpegEncContext *s) +int ff_mpv_init_context_frame(MPVContext *s) { int y_size, c_size, yc_size, i, mb_array_size, mv_table_size, x, y; @@ -652,7 +652,7 @@ int ff_mpv_init_context_frame(MpegEncContext *s) return !CONFIG_MPEGVIDEODEC || s->encoding ? 0 : ff_mpeg_er_init(s); } -static void clear_context(MpegEncContext *s) +static void clear_context(MPVMainContext *s) { int i, j, k; @@ -731,7 +731,7 @@ static void clear_context(MpegEncContext *s) * init common structure for both encoder and decoder. * this assumes that some variables like width/height are already set */ -av_cold int ff_mpv_common_init(MpegEncContext *s) +av_cold int ff_mpv_common_init(MPVMainContext *s) { int i, ret; int nb_slices = (HAVE_THREADS && @@ -818,7 +818,7 @@ av_cold int ff_mpv_common_init(MpegEncContext *s) return ret; } -void ff_mpv_free_context_frame(MpegEncContext *s) +void ff_mpv_free_context_frame(MPVMainContext *s) { int i, j, k; @@ -872,7 +872,7 @@ void ff_mpv_free_context_frame(MpegEncContext *s) } /* init common structure for both encoder and decoder */ -void ff_mpv_common_end(MpegEncContext *s) +void ff_mpv_common_end(MPVMainContext *s) { if (!s) return; @@ -911,7 +911,7 @@ void ff_mpv_common_end(MpegEncContext *s) } -static inline int hpel_motion_lowres(MpegEncContext *s, +static inline int hpel_motion_lowres(MPVContext *s, uint8_t *dest, uint8_t *src, int field_based, int field_select, int src_x, int src_y, @@ -958,7 +958,7 @@ static inline int hpel_motion_lowres(MpegEncContext *s, } /* apply one mpeg motion vector to the three components */ -static av_always_inline void mpeg_motion_lowres(MpegEncContext *s, +static av_always_inline void mpeg_motion_lowres(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, @@ -1097,7 +1097,7 @@ static av_always_inline void mpeg_motion_lowres(MpegEncContext *s, // FIXME h261 lowres loop filter } -static inline void chroma_4mv_motion_lowres(MpegEncContext *s, +static inline void chroma_4mv_motion_lowres(MPVContext *s, uint8_t *dest_cb, uint8_t *dest_cr, uint8_t **ref_picture, h264_chroma_mc_func * pix_op, @@ -1165,7 +1165,7 @@ static inline void chroma_4mv_motion_lowres(MpegEncContext *s, * @param pix_op halfpel motion compensation function (average or put normally) * the motion vectors are taken from s->mv and the MV type from s->mv_type */ -static inline void MPV_motion_lowres(MpegEncContext *s, +static inline void MPV_motion_lowres(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int dir, uint8_t **ref_picture, @@ -1299,7 +1299,7 @@ static inline void MPV_motion_lowres(MpegEncContext *s, /** * find the lowest MB row referenced in the MVs */ -static int lowest_referenced_row(MpegEncContext *s, int dir) +static int lowest_referenced_row(MPVContext *s, int dir) { int my_max = INT_MIN, my_min = INT_MAX, qpel_shift = !s->quarter_sample; int my, off, i, mvs; @@ -1335,7 +1335,7 @@ unhandled: } /* put block[] to dest[] */ -static inline void put_dct(MpegEncContext *s, +static inline void put_dct(MPVContext *s, int16_t *block, int i, uint8_t *dest, int line_size, int qscale) { s->dct_unquantize_intra(s, block, i, qscale); @@ -1343,7 +1343,7 @@ static inline void put_dct(MpegEncContext *s, } /* add block[] to dest[] */ -static inline void add_dct(MpegEncContext *s, +static inline void add_dct(MPVContext *s, int16_t *block, int i, uint8_t *dest, int line_size) { if (s->block_last_index[i] >= 0) { @@ -1351,7 +1351,7 @@ static inline void add_dct(MpegEncContext *s, } } -static inline void add_dequant_dct(MpegEncContext *s, +static inline void add_dequant_dct(MPVContext *s, int16_t *block, int i, uint8_t *dest, int line_size, int qscale) { if (s->block_last_index[i] >= 0) { @@ -1364,7 +1364,7 @@ static inline void add_dequant_dct(MpegEncContext *s, /** * Clean dc, ac, coded_block for the current non-intra MB. */ -void ff_clean_intra_table_entries(MpegEncContext *s) +void ff_clean_intra_table_entries(MPVContext *s) { int wrap = s->b8_stride; int xy = s->block_index[0]; @@ -1405,7 +1405,7 @@ void ff_clean_intra_table_entries(MpegEncContext *s) s->interlaced_dct : true if interlaced dct used (mpeg2) */ static av_always_inline -void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], +void mpv_reconstruct_mb_internal(MPVContext *s, int16_t block[12][64], int lowres_flag, int is_mpeg12) { #define IS_ENCODER(s) (CONFIG_MPEGVIDEOENC && !lowres_flag && (s)->encoding) @@ -1642,7 +1642,7 @@ skip_idct: } } -void ff_mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64]) +void ff_mpv_reconstruct_mb(MPVContext *s, int16_t block[12][64]) { if (CONFIG_XVMC && s->avctx->hwaccel && s->avctx->hwaccel->decode_mb) { @@ -1672,7 +1672,8 @@ void ff_mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64]) else mpv_reconstruct_mb_internal(s, block, 0, 0); } -void ff_init_block_index(MpegEncContext *s){ //FIXME maybe rename +void ff_init_block_index(MPVContext *s) //FIXME maybe rename +{ const int linesize = s->current_picture.f->linesize[0]; //not s->linesize as this would be wrong for field pics const int uvlinesize = s->current_picture.f->linesize[1]; const int width_of_mb = (4 + (s->avctx->bits_per_raw_sample > 8)) - s->avctx->lowres; @@ -1708,7 +1709,7 @@ void ff_init_block_index(MpegEncContext *s){ //FIXME maybe rename /** * set qscale and update qscale dependent variables. */ -void ff_set_qscale(MpegEncContext * s, int qscale) +void ff_set_qscale(MPVContext *s, int qscale) { if (qscale < 1) qscale = 1; diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 8f65f53c2a..1bad288ea5 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -60,9 +60,9 @@ #define MAX_B_FRAMES 16 /** - * MpegEncContext. + * MPVContext. */ -typedef struct MpegEncContext { +typedef struct MPVContext { AVClass *class; int y_dc_scale, c_dc_scale; @@ -139,7 +139,7 @@ typedef struct MpegEncContext { int start_mb_y; ///< start mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y) int end_mb_y; ///< end mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y) - struct MpegEncContext *thread_context[MAX_THREADS]; + struct MPVContext *thread_context[MAX_THREADS]; int slice_context_count; ///< number of used thread_contexts /** @@ -474,32 +474,32 @@ typedef struct MpegEncContext { int16_t (*block)[64]; ///< points to one of the following blocks int16_t (*blocks)[12][64]; // for HQ mode we need to keep the best block - int (*decode_mb)(struct MpegEncContext *s, int16_t block[12][64]); // used by some codecs to avoid a switch() + int (*decode_mb)(struct MPVContext *s, int16_t block[12][64]); // used by some codecs to avoid a switch() #define SLICE_OK 0 #define SLICE_ERROR -1 #define SLICE_END -2 ///avctx->bits_per_raw_sample > 8); const int block_size= (8*bytes_per_pixel) >> s->avctx->lowres; @@ -636,7 +640,7 @@ static inline void ff_update_block_index(MpegEncContext *s){ s->dest[2]+= (2 >> s->chroma_x_shift) * block_size; } -static inline int mpeg_get_qscale(MpegEncContext *s) +static inline int mpeg_get_qscale(MPVContext *s) { int qscale = get_bits(&s->gb, 5); if (s->q_scale_type) diff --git a/libavcodec/mpegvideo_dec.c b/libavcodec/mpegvideo_dec.c index dc38f6b267..4be0c3ad8a 100644 --- a/libavcodec/mpegvideo_dec.c +++ b/libavcodec/mpegvideo_dec.c @@ -33,7 +33,7 @@ #include "mpegvideo.h" #include "thread.h" -void ff_mpv_decode_init(MpegEncContext *s, AVCodecContext *avctx) +void ff_mpv_decode_init(MPVMainDecContext *s, AVCodecContext *avctx) { ff_mpv_common_defaults(s); @@ -50,8 +50,8 @@ void ff_mpv_decode_init(MpegEncContext *s, AVCodecContext *avctx) int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src) { - MpegEncContext *const s1 = src->priv_data; - MpegEncContext *const s = dst->priv_data; + MPVMainDecContext *const s1 = src->priv_data; + MPVMainDecContext *const s = dst->priv_data; int ret; if (dst == src) @@ -189,7 +189,7 @@ do {\ return 0; } -int ff_mpv_common_frame_size_change(MpegEncContext *s) +int ff_mpv_common_frame_size_change(MPVMainDecContext *s) { int err = 0; @@ -243,7 +243,7 @@ int ff_mpv_common_frame_size_change(MpegEncContext *s) return err; } -static int alloc_picture(MpegEncContext *s, Picture *pic) +static int alloc_picture(MPVMainDecContext *s, Picture *pic) { return ff_alloc_picture(s->avctx, pic, &s->me, &s->sc, 0, 0, s->chroma_x_shift, s->chroma_y_shift, s->out_format, @@ -271,7 +271,7 @@ static void gray_frame(AVFrame *frame) * generic function called after decoding * the header and before a frame is decoded. */ -int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx) +int ff_mpv_frame_start(MPVMainDecContext *s, AVCodecContext *avctx) { Picture *pic; int idx, ret; @@ -495,7 +495,7 @@ int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx) } /* called after a frame has been decoded. */ -void ff_mpv_frame_end(MpegEncContext *s) +void ff_mpv_frame_end(MPVMainDecContext *s) { emms_c(); @@ -503,14 +503,14 @@ void ff_mpv_frame_end(MpegEncContext *s) ff_thread_report_progress(&s->current_picture_ptr->tf, INT_MAX, 0); } -void ff_print_debug_info(MpegEncContext *s, Picture *p, AVFrame *pict) +void ff_print_debug_info(MPVMainDecContext *s, Picture *p, AVFrame *pict) { ff_print_debug_info2(s->avctx, pict, s->mbskip_table, p->mb_type, p->qscale_table, p->motion_val, s->mb_width, s->mb_height, s->mb_stride, s->quarter_sample); } -int ff_mpv_export_qp_table(MpegEncContext *s, AVFrame *f, Picture *p, int qp_type) +int ff_mpv_export_qp_table(MPVMainDecContext *s, AVFrame *f, Picture *p, int qp_type) { AVVideoEncParams *par; int mult = (qp_type == FF_QSCALE_TYPE_MPEG1) ? 2 : 1; @@ -540,7 +540,7 @@ int ff_mpv_export_qp_table(MpegEncContext *s, AVFrame *f, Picture *p, int qp_typ return 0; } -void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h) +void ff_mpeg_draw_horiz_band(MPVDecContext *s, int y, int h) { ff_draw_horiz_band(s->avctx, s->current_picture_ptr->f, s->last_picture_ptr ? s->last_picture_ptr->f : NULL, @@ -550,7 +550,7 @@ void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h) void ff_mpeg_flush(AVCodecContext *avctx) { - MpegEncContext *const s = avctx->priv_data; + MPVMainDecContext *const s = avctx->priv_data; if (!s->picture) return; @@ -577,7 +577,7 @@ void ff_mpeg_flush(AVCodecContext *avctx) s->pp_time = 0; } -void ff_mpv_report_decode_progress(MpegEncContext *s) +void ff_mpv_report_decode_progress(MPVDecContext *s) { if (s->pict_type != AV_PICTURE_TYPE_B && !s->partitioned_frame && !s->er.error_occurred) ff_thread_report_progress(&s->current_picture_ptr->tf, s->mb_y, 0); diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index a76b4b9f60..02efc9c2e9 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -80,11 +80,11 @@ #define QMAT_SHIFT_MMX 16 #define QMAT_SHIFT 21 -static int encode_picture(MpegEncContext *s, int picture_number); -static int dct_quantize_refine(MpegEncContext *s, int16_t *block, int16_t *weight, int16_t *orig, int n, int qscale); -static int sse_mb(MpegEncContext *s); -static void denoise_dct_c(MpegEncContext *s, int16_t *block); -static int dct_quantize_trellis_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow); +static int encode_picture(MPVMainEncContext *s, int picture_number); +static int dct_quantize_refine(MPVEncContext *s, int16_t *block, int16_t *weight, int16_t *orig, int n, int qscale); +static int sse_mb(MPVEncContext *s); +static void denoise_dct_c(MPVEncContext *s, int16_t *block); +static int dct_quantize_trellis_c(MPVEncContext *s, int16_t *block, int n, int qscale, int *overflow); static uint8_t default_mv_penalty[MAX_FCODE + 1][MAX_DMV * 2 + 1]; static uint8_t default_fcode_tab[MAX_MV * 2 + 1]; @@ -107,7 +107,7 @@ const AVClass ff_mpv_enc_class = { .version = LIBAVUTIL_VERSION_INT, }; -void ff_convert_matrix(MpegEncContext *s, int (*qmat)[64], +void ff_convert_matrix(MPVEncContext *s, int (*qmat)[64], uint16_t (*qmat16)[2][64], const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra) @@ -191,7 +191,7 @@ void ff_convert_matrix(MpegEncContext *s, int (*qmat)[64], } } -static inline void update_qscale(MpegEncContext *s) +static inline void update_qscale(MPVEncContext *s) { if (s->q_scale_type == 1 && 0) { int i; @@ -235,7 +235,7 @@ void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix) /** * init s->current_picture.qscale_table from s->lambda_table */ -void ff_init_qscale_tab(MpegEncContext *s) +void ff_init_qscale_tab(MPVMainEncContext *s) { int8_t * const qscale_table = s->current_picture.qscale_table; int i; @@ -248,8 +248,8 @@ void ff_init_qscale_tab(MpegEncContext *s) } } -static void update_duplicate_context_after_me(MpegEncContext *dst, - MpegEncContext *src) +static void update_duplicate_context_after_me(MPVEncContext *dst, + MPVEncContext *src) { #define COPY(a) dst->a= src->a COPY(pict_type); @@ -273,10 +273,10 @@ static void mpv_encode_init_static(void) } /** - * Set the given MpegEncContext to defaults for encoding. - * the changed fields will not depend upon the prior state of the MpegEncContext. + * Set the given MPVMainEncContext to defaults for encoding. + * the changed fields will not depend upon the prior state of the MPVMainEncContext. */ -static void mpv_encode_defaults(MpegEncContext *s) +static void mpv_encode_defaults(MPVMainEncContext *s) { static AVOnce init_static_once = AV_ONCE_INIT; @@ -291,7 +291,7 @@ static void mpv_encode_defaults(MpegEncContext *s) s->picture_in_gop_number = 0; } -av_cold int ff_dct_encode_init(MpegEncContext *s) +av_cold int ff_dct_encode_init(MPVEncContext *s) { if (ARCH_X86) ff_dct_encode_init_x86(s); @@ -312,7 +312,7 @@ av_cold int ff_dct_encode_init(MpegEncContext *s) /* init video encoder */ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) { - MpegEncContext *s = avctx->priv_data; + MPVMainEncContext *const s = avctx->priv_data; AVCPBProperties *cpb_props; int i, ret; @@ -927,7 +927,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) av_cold int ff_mpv_encode_end(AVCodecContext *avctx) { - MpegEncContext *s = avctx->priv_data; + MPVMainEncContext *const s = avctx->priv_data; int i; ff_rate_control_uninit(s); @@ -970,7 +970,7 @@ static int get_sae(uint8_t *src, int ref, int stride) return acc; } -static int get_intra_count(MpegEncContext *s, uint8_t *src, +static int get_intra_count(MPVMainEncContext *s, uint8_t *src, uint8_t *ref, int stride) { int x, y, w, h; @@ -993,7 +993,7 @@ static int get_intra_count(MpegEncContext *s, uint8_t *src, return acc; } -static int alloc_picture(MpegEncContext *s, Picture *pic, int shared) +static int alloc_picture(MPVMainEncContext *s, Picture *pic, int shared) { return ff_alloc_picture(s->avctx, pic, &s->me, &s->sc, shared, 1, s->chroma_x_shift, s->chroma_y_shift, s->out_format, @@ -1001,7 +1001,7 @@ static int alloc_picture(MpegEncContext *s, Picture *pic, int shared) &s->linesize, &s->uvlinesize); } -static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg) +static int load_input_picture(MPVMainEncContext *s, const AVFrame *pic_arg) { Picture *pic = NULL; int64_t pts; @@ -1152,7 +1152,7 @@ static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg) return 0; } -static int skip_check(MpegEncContext *s, Picture *p, Picture *ref) +static int skip_check(MPVMainEncContext *s, Picture *p, Picture *ref) { int x, y, plane; int score = 0; @@ -1214,7 +1214,7 @@ static int encode_frame(AVCodecContext *c, AVFrame *frame, AVPacket *pkt) return size; } -static int estimate_best_b_count(MpegEncContext *s) +static int estimate_best_b_count(MPVMainEncContext *s) { const AVCodec *codec = avcodec_find_encoder(s->avctx->codec_id); AVPacket *pkt; @@ -1361,7 +1361,7 @@ fail: return best_b_count; } -static int select_input_picture(MpegEncContext *s) +static int select_input_picture(MPVMainEncContext *s) { int i, ret; @@ -1538,7 +1538,7 @@ no_output_pic: return 0; } -static void frame_end(MpegEncContext *s) +static void frame_end(MPVMainEncContext *s) { if (s->unrestricted_mv && s->current_picture.reference && @@ -1575,7 +1575,7 @@ static void frame_end(MpegEncContext *s) s->last_non_b_pict_type = s->pict_type; } -static void update_noise_reduction(MpegEncContext *s) +static void update_noise_reduction(MPVMainEncContext *s) { int intra, i; @@ -1596,7 +1596,7 @@ static void update_noise_reduction(MpegEncContext *s) } } -static int frame_start(MpegEncContext *s) +static int frame_start(MPVMainEncContext *s) { int ret; @@ -1670,7 +1670,7 @@ static int frame_start(MpegEncContext *s) int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet) { - MpegEncContext *s = avctx->priv_data; + MPVMainEncContext *const s = avctx->priv_data; int i, stuffing_count, ret; int context_count = s->slice_context_count; @@ -1903,7 +1903,7 @@ vbv_retry: return 0; } -static inline void dct_single_coeff_elimination(MpegEncContext *s, +static inline void dct_single_coeff_elimination(MPVEncContext *s, int n, int threshold) { static const char tab[64] = { @@ -1959,7 +1959,7 @@ static inline void dct_single_coeff_elimination(MpegEncContext *s, s->block_last_index[n] = -1; } -static inline void clip_coeffs(MpegEncContext *s, int16_t *block, +static inline void clip_coeffs(MPVEncContext *s, int16_t *block, int last_index) { int i; @@ -2017,7 +2017,7 @@ static void get_visual_weight(int16_t *weight, uint8_t *ptr, int stride) } } -static av_always_inline void encode_mb_internal(MpegEncContext *s, +static av_always_inline void encode_mb_internal(MPVEncContext *s, int motion_x, int motion_y, int mb_block_height, int mb_block_width, @@ -2409,7 +2409,7 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, } } -static av_always_inline void encode_mb(MpegEncContext *s, int motion_x, int motion_y) +static av_always_inline void encode_mb(MPVEncContext *s, int motion_x, int motion_y) { if (s->chroma_format == CHROMA_420) encode_mb_internal(s, motion_x, motion_y, 8, 8, 6, 1, 1, CHROMA_420); @@ -2419,7 +2419,9 @@ static av_always_inline void encode_mb(MpegEncContext *s, int motion_x, int moti encode_mb_internal(s, motion_x, motion_y, 16, 16, 12, 0, 0, CHROMA_444); } -static inline void copy_context_before_encode(MpegEncContext *d, MpegEncContext *s, int type){ +static inline void copy_context_before_encode(MPVEncContext *d, + const MPVEncContext *s, int type) +{ int i; memcpy(d->last_mv, s->last_mv, 2*2*2*sizeof(int)); //FIXME is memcpy faster than a loop? @@ -2447,7 +2449,9 @@ static inline void copy_context_before_encode(MpegEncContext *d, MpegEncContext d->esc3_level_length= s->esc3_level_length; } -static inline void copy_context_after_encode(MpegEncContext *d, MpegEncContext *s, int type){ +static inline void copy_context_after_encode(MPVEncContext *d, + const MPVEncContext *s, int type) +{ int i; memcpy(d->mv, s->mv, 2*4*2*sizeof(int)); @@ -2486,7 +2490,7 @@ static inline void copy_context_after_encode(MpegEncContext *d, MpegEncContext * d->esc3_level_length= s->esc3_level_length; } -static inline void encode_mb_hq(MpegEncContext *s, MpegEncContext *backup, MpegEncContext *best, int type, +static inline void encode_mb_hq(MPVEncContext *s, MPVEncContext *backup, MPVEncContext *best, int type, PutBitContext pb[2], PutBitContext pb2[2], PutBitContext tex_pb[2], int *dmin, int *next_block, int motion_x, int motion_y) { @@ -2537,7 +2541,9 @@ static inline void encode_mb_hq(MpegEncContext *s, MpegEncContext *backup, MpegE } } -static int sse(MpegEncContext *s, uint8_t *src1, uint8_t *src2, int w, int h, int stride){ +static int sse(MPVEncContext *s, uint8_t *src1, uint8_t *src2, + int w, int h, int stride) +{ const uint32_t *sq = ff_square_tab + 256; int acc=0; int x,y; @@ -2558,7 +2564,8 @@ static int sse(MpegEncContext *s, uint8_t *src1, uint8_t *src2, int w, int h, in return acc; } -static int sse_mb(MpegEncContext *s){ +static int sse_mb(MPVEncContext *s) +{ int w= 16; int h= 16; @@ -2582,7 +2589,7 @@ static int sse_mb(MpegEncContext *s){ } static int pre_estimate_motion_thread(AVCodecContext *c, void *arg){ - MpegEncContext *s= *(void**)arg; + MPVEncContext *const s = *(void**)arg; s->me.pre_pass=1; @@ -2601,7 +2608,7 @@ static int pre_estimate_motion_thread(AVCodecContext *c, void *arg){ } static int estimate_motion_thread(AVCodecContext *c, void *arg){ - MpegEncContext *s= *(void**)arg; + MPVEncContext *const s = *(void**)arg; s->me.dia_size= s->avctx->dia_size; s->first_slice_line=1; @@ -2626,7 +2633,7 @@ static int estimate_motion_thread(AVCodecContext *c, void *arg){ } static int mb_var_thread(AVCodecContext *c, void *arg){ - MpegEncContext *s= *(void**)arg; + MPVEncContext *const s = *(void**)arg; int mb_x, mb_y; for(mb_y=s->start_mb_y; mb_y < s->end_mb_y; mb_y++) { @@ -2648,7 +2655,8 @@ static int mb_var_thread(AVCodecContext *c, void *arg){ return 0; } -static void write_slice_end(MpegEncContext *s){ +static void write_slice_end(MPVEncContext *s) +{ if(CONFIG_MPEG4_ENCODER && s->codec_id==AV_CODEC_ID_MPEG4){ if(s->partitioned_frame){ ff_mpeg4_merge_partitions(s); @@ -2668,7 +2676,7 @@ static void write_slice_end(MpegEncContext *s){ s->misc_bits+= get_bits_diff(s); } -static void write_mb_info(MpegEncContext *s) +static void write_mb_info(MPVEncContext *s) { uint8_t *ptr = s->mb_info_ptr + s->mb_info_size - 12; int offset = put_bits_count(&s->pb); @@ -2688,7 +2696,7 @@ static void write_mb_info(MpegEncContext *s) bytestream_put_byte(&ptr, 0); /* vmv2 */ } -static void update_mb_info(MpegEncContext *s, int startcode) +static void update_mb_info(MPVEncContext *s, int startcode) { if (!s->mb_info) return; @@ -2711,7 +2719,7 @@ static void update_mb_info(MpegEncContext *s, int startcode) write_mb_info(s); } -int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t size_increase) +int ff_mpv_reallocate_putbitbuffer(MPVEncContext *s, size_t threshold, size_t size_increase) { if (put_bytes_left(&s->pb, 0) < threshold && s->slice_context_count == 1 @@ -2746,11 +2754,11 @@ int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t s } static int encode_thread(AVCodecContext *c, void *arg){ - MpegEncContext *s= *(void**)arg; + MPVEncContext *const s = *(void**)arg; int mb_x, mb_y, mb_y_order; int chr_h= 16>>s->chroma_y_shift; int i, j; - MpegEncContext best_s = { 0 }, backup_s; + MPVEncContext best_s = { 0 }, backup_s; uint8_t bit_buf[2][MAX_MB_BYTES]; uint8_t bit_buf2[2][MAX_MB_BYTES]; uint8_t bit_buf_tex[2][MAX_MB_BYTES]; @@ -3384,13 +3392,15 @@ static int encode_thread(AVCodecContext *c, void *arg){ } #define MERGE(field) dst->field += src->field; src->field=0 -static void merge_context_after_me(MpegEncContext *dst, MpegEncContext *src){ +static void merge_context_after_me(MPVEncContext *dst, MPVEncContext *src) +{ MERGE(me.scene_change_score); MERGE(me.mc_mb_var_sum_temp); MERGE(me.mb_var_sum_temp); } -static void merge_context_after_encode(MpegEncContext *dst, MpegEncContext *src){ +static void merge_context_after_encode(MPVEncContext *dst, MPVEncContext *src) +{ int i; MERGE(dct_count[0]); //note, the other dct vars are not part of the context @@ -3420,7 +3430,8 @@ static void merge_context_after_encode(MpegEncContext *dst, MpegEncContext *src) flush_put_bits(&dst->pb); } -static int estimate_qp(MpegEncContext *s, int dry_run){ +static int estimate_qp(MPVMainEncContext *s, int dry_run) +{ if (s->next_lambda){ s->current_picture_ptr->f->quality = s->current_picture.f->quality = s->next_lambda; @@ -3458,7 +3469,8 @@ static int estimate_qp(MpegEncContext *s, int dry_run){ } /* must be called before writing the header */ -static void set_frame_distances(MpegEncContext * s){ +static void set_frame_distances(MPVMainEncContext *s) +{ av_assert1(s->current_picture_ptr->f->pts != AV_NOPTS_VALUE); s->time = s->current_picture_ptr->f->pts * s->avctx->time_base.num; @@ -3472,7 +3484,7 @@ static void set_frame_distances(MpegEncContext * s){ } } -static int encode_picture(MpegEncContext *s, int picture_number) +static int encode_picture(MPVMainEncContext *s, int picture_number) { int i, ret; int bits; @@ -3753,7 +3765,8 @@ static int encode_picture(MpegEncContext *s, int picture_number) return 0; } -static void denoise_dct_c(MpegEncContext *s, int16_t *block){ +static void denoise_dct_c(MPVEncContext *s, int16_t *block) +{ const int intra= s->mb_intra; int i; @@ -3777,7 +3790,7 @@ static void denoise_dct_c(MpegEncContext *s, int16_t *block){ } } -static int dct_quantize_trellis_c(MpegEncContext *s, +static int dct_quantize_trellis_c(MPVEncContext *s, int16_t *block, int n, int qscale, int *overflow){ const int *qmat; @@ -4111,7 +4124,7 @@ static void build_basis(uint8_t *perm){ } } -static int dct_quantize_refine(MpegEncContext *s, //FIXME breaks denoise? +static int dct_quantize_refine(MPVEncContext *s, //FIXME breaks denoise? int16_t *block, int16_t *weight, int16_t *orig, int n, int qscale){ int16_t rem[64]; @@ -4463,7 +4476,7 @@ void ff_block_permute(int16_t *block, uint8_t *permutation, } } -int ff_dct_quantize_c(MpegEncContext *s, +int ff_dct_quantize_c(MPVEncContext *s, int16_t *block, int n, int qscale, int *overflow) { diff --git a/libavcodec/mpegvideo_motion.c b/libavcodec/mpegvideo_motion.c index 876a7375f8..12ae984537 100644 --- a/libavcodec/mpegvideo_motion.c +++ b/libavcodec/mpegvideo_motion.c @@ -32,7 +32,7 @@ #include "qpeldsp.h" #include "wmv2.h" -static void gmc1_motion(MpegEncContext *s, +static void gmc1_motion(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, uint8_t **ref_picture) { @@ -129,7 +129,7 @@ static void gmc1_motion(MpegEncContext *s, motion_x & 15, motion_y & 15, 128 - s->no_rounding); } -static void gmc_motion(MpegEncContext *s, +static void gmc_motion(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, uint8_t **ref_picture) { @@ -187,7 +187,7 @@ static void gmc_motion(MpegEncContext *s, (s->h_edge_pos + 1) >> 1, (s->v_edge_pos + 1) >> 1); } -static inline int hpel_motion(MpegEncContext *s, +static inline int hpel_motion(MPVContext *s, uint8_t *dest, uint8_t *src, int src_x, int src_y, op_pixels_func *pix_op, @@ -223,7 +223,7 @@ static inline int hpel_motion(MpegEncContext *s, } static av_always_inline -void mpeg_motion_internal(MpegEncContext *s, +void mpeg_motion_internal(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, @@ -365,7 +365,7 @@ void mpeg_motion_internal(MpegEncContext *s, } } /* apply one mpeg motion vector to the three components */ -static void mpeg_motion(MpegEncContext *s, +static void mpeg_motion(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int field_select, uint8_t **ref_picture, op_pixels_func (*pix_op)[4], @@ -383,7 +383,7 @@ static void mpeg_motion(MpegEncContext *s, motion_x, motion_y, h, 0, is_16x8, mb_y); } -static void mpeg_motion_field(MpegEncContext *s, uint8_t *dest_y, +static void mpeg_motion_field(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int bottom_field, int field_select, uint8_t **ref_picture, @@ -456,7 +456,7 @@ static inline void put_obmc(uint8_t *dst, uint8_t *src[5], int stride) } /* obmc for 1 8x8 luma block */ -static inline void obmc_motion(MpegEncContext *s, +static inline void obmc_motion(MPVContext *s, uint8_t *dest, uint8_t *src, int src_x, int src_y, op_pixels_func *pix_op, @@ -482,7 +482,7 @@ static inline void obmc_motion(MpegEncContext *s, put_obmc(dest, ptr, s->linesize); } -static inline void qpel_motion(MpegEncContext *s, +static inline void qpel_motion(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, @@ -589,7 +589,7 @@ static inline void qpel_motion(MpegEncContext *s, /** * H.263 chroma 4mv motion compensation. */ -static void chroma_4mv_motion(MpegEncContext *s, +static void chroma_4mv_motion(MPVContext *s, uint8_t *dest_cb, uint8_t *dest_cr, uint8_t **ref_picture, op_pixels_func *pix_op, @@ -641,7 +641,7 @@ static void chroma_4mv_motion(MpegEncContext *s, pix_op[dxy](dest_cr, ptr, s->uvlinesize, 8); } -static inline void prefetch_motion(MpegEncContext *s, uint8_t **pix, int dir) +static inline void prefetch_motion(MPVContext *s, uint8_t **pix, int dir) { /* fetch pixels for estimated mv 4 macroblocks ahead * optimized for 64byte cache lines */ @@ -655,7 +655,7 @@ static inline void prefetch_motion(MpegEncContext *s, uint8_t **pix, int dir) s->vdsp.prefetch(pix[1] + off, pix[2] - pix[1], 2); } -static inline void apply_obmc(MpegEncContext *s, +static inline void apply_obmc(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, @@ -742,7 +742,7 @@ static inline void apply_obmc(MpegEncContext *s, mx, my); } -static inline void apply_8x8(MpegEncContext *s, +static inline void apply_8x8(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, @@ -826,7 +826,7 @@ static inline void apply_8x8(MpegEncContext *s, * @param qpix_op qpel motion compensation function (average or put normally) * the motion vectors are taken from s->mv and the MV type from s->mv_type */ -static av_always_inline void mpv_motion_internal(MpegEncContext *s, +static av_always_inline void mpv_motion_internal(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, @@ -969,7 +969,7 @@ static av_always_inline void mpv_motion_internal(MpegEncContext *s, } } -void ff_mpv_motion(MpegEncContext *s, +void ff_mpv_motion(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int dir, uint8_t **ref_picture, diff --git a/libavcodec/mpegvideo_xvmc.c b/libavcodec/mpegvideo_xvmc.c index bfeb453834..28cb8e4d03 100644 --- a/libavcodec/mpegvideo_xvmc.c +++ b/libavcodec/mpegvideo_xvmc.c @@ -34,13 +34,13 @@ #include "version.h" /** - * Initialize the block field of the MpegEncContext pointer passed as + * Initialize the block field of the MPVDecContext pointer passed as * parameter after making sure that the data is not corrupted. * In order to implement something like direct rendering instead of decoding * coefficients in s->blocks and then copying them, copy them directly * into the data_blocks array provided by xvmc. */ -void ff_xvmc_init_block(MpegEncContext *s) +void ff_xvmc_init_block(MPVDecContext *s) { struct xvmc_pix_fmt *render = (struct xvmc_pix_fmt*)s->current_picture.f->data[2]; assert(render && render->xvmc_id == AV_XVMC_ID); @@ -48,7 +48,7 @@ void ff_xvmc_init_block(MpegEncContext *s) s->block = (int16_t (*)[64])(render->data_blocks + render->next_free_data_block_num * 64); } -static void exchange_uv(MpegEncContext *s) +static void exchange_uv(MPVDecContext *s) { int16_t (*tmp)[64]; @@ -61,7 +61,7 @@ static void exchange_uv(MpegEncContext *s) * Fill individual block pointers, so there are no gaps in the data_block array * in case not all blocks in the macroblock are coded. */ -void ff_xvmc_pack_pblocks(MpegEncContext *s, int cbp) +void ff_xvmc_pack_pblocks(MPVDecContext *s, int cbp) { int i, j = 0; const int mb_block_count = 4 + (1 << s->chroma_format); @@ -86,7 +86,7 @@ void ff_xvmc_pack_pblocks(MpegEncContext *s, int cbp) */ static int ff_xvmc_field_start(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size) { - struct MpegEncContext *s = avctx->priv_data; + MPVDecContext *const s = avctx->priv_data; struct xvmc_pix_fmt *last, *next, *render = (struct xvmc_pix_fmt*)s->current_picture.f->data[2]; const int mb_block_count = 4 + (1 << s->chroma_format); @@ -155,7 +155,7 @@ return -1; */ static int ff_xvmc_field_end(AVCodecContext *avctx) { - struct MpegEncContext *s = avctx->priv_data; + MPVDecContext *const s = avctx->priv_data; struct xvmc_pix_fmt *render = (struct xvmc_pix_fmt*)s->current_picture.f->data[2]; assert(render); @@ -170,7 +170,7 @@ static int ff_xvmc_field_end(AVCodecContext *avctx) */ static void ff_xvmc_decode_mb(void *opaque) { - MpegEncContext *const s = opaque; + MPVDecContext *const s = opaque; XvMCMacroBlock *mv_block; struct xvmc_pix_fmt *render; int i, cbp, blocks_per_mb; diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 21e7a55e13..94ebe0237f 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -32,6 +32,9 @@ #include "internal.h" #include "mpegvideo.h" +typedef MPVContext MPVEncContext; +typedef MPVContext MPVMainEncContext; + /* mpegvideo_enc common options */ #define FF_MPV_FLAG_SKIP_RD 0x0001 #define FF_MPV_FLAG_STRICT_GOP 0x0002 @@ -58,7 +61,7 @@ { "msad", "Sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" } #ifndef FF_MPV_OFFSET -#define FF_MPV_OFFSET(x) offsetof(MpegEncContext, x) +#define FF_MPV_OFFSET(x) offsetof(MPVMainEncContext, x) #endif #define FF_MPV_OPT_FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) #define FF_MPV_COMMON_OPTS \ @@ -129,26 +132,26 @@ FF_MPV_OPT_CMP_FUNC, \ extern const AVClass ff_mpv_enc_class; int ff_mpv_encode_init(AVCodecContext *avctx); -void ff_mpv_encode_init_x86(MpegEncContext *s); +void ff_mpv_encode_init_x86(MPVMainEncContext *s); int ff_mpv_encode_end(AVCodecContext *avctx); int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet); -int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t size_increase); +int ff_mpv_reallocate_putbitbuffer(MPVEncContext *s, size_t threshold, size_t size_increase); void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix); -int ff_dct_encode_init(MpegEncContext *s); -void ff_dct_encode_init_x86(MpegEncContext *s); +int ff_dct_encode_init(MPVEncContext *s); +void ff_dct_encode_init_x86(MPVEncContext *s); -int ff_dct_quantize_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow); -void ff_convert_matrix(MpegEncContext *s, int (*qmat)[64], uint16_t (*qmat16)[2][64], +int ff_dct_quantize_c(MPVEncContext *s, int16_t *block, int n, int qscale, int *overflow); +void ff_convert_matrix(MPVEncContext *s, int (*qmat)[64], uint16_t (*qmat16)[2][64], const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra); void ff_block_permute(int16_t *block, uint8_t *permutation, const uint8_t *scantable, int last); -static inline int get_bits_diff(MpegEncContext *s) +static inline int get_bits_diff(MPVEncContext *s) { const int bits = put_bits_count(&s->pb); const int last = s->last_bits; diff --git a/libavcodec/msmpeg4.c b/libavcodec/msmpeg4.c index f12586dd64..991b5f09c9 100644 --- a/libavcodec/msmpeg4.c +++ b/libavcodec/msmpeg4.c @@ -112,7 +112,7 @@ static av_cold void msmpeg4_common_init_static(void) init_h263_dc_for_msmpeg4(); } -av_cold void ff_msmpeg4_common_init(MpegEncContext *s) +av_cold void ff_msmpeg4_common_init(MPVMainContext *s) { static AVOnce init_static_once = AV_ONCE_INIT; @@ -158,7 +158,7 @@ av_cold void ff_msmpeg4_common_init(MpegEncContext *s) } /* predict coded block */ -int ff_msmpeg4_coded_block_pred(MpegEncContext * s, int n, uint8_t **coded_block_ptr) +int ff_msmpeg4_coded_block_pred(MPVContext * s, int n, uint8_t **coded_block_ptr) { int xy, wrap, pred, a, b, c; @@ -198,7 +198,7 @@ static int get_dc(uint8_t *src, int stride, int scale, int block_size) } /* dir = 0: left, dir = 1: top prediction */ -int ff_msmpeg4_pred_dc(MpegEncContext *s, int n, +int ff_msmpeg4_pred_dc(MPVContext *s, int n, int16_t **dc_val_ptr, int *dir_ptr) { int a, b, c, wrap, pred, scale; diff --git a/libavcodec/msmpeg4.h b/libavcodec/msmpeg4.h index dbe650cbbc..8d8ac31813 100644 --- a/libavcodec/msmpeg4.h +++ b/libavcodec/msmpeg4.h @@ -41,17 +41,17 @@ extern VLC ff_mb_non_intra_vlc[4]; extern VLC ff_inter_intra_vlc; -void ff_msmpeg4_common_init(MpegEncContext *s); -int ff_msmpeg4_coded_block_pred(MpegEncContext * s, int n, +void ff_msmpeg4_common_init(MPVMainContext *s); +int ff_msmpeg4_coded_block_pred(MPVContext * s, int n, uint8_t **coded_block_ptr); int ff_msmpeg4_decode_init(AVCodecContext *avctx); -int ff_msmpeg4_decode_picture_header(MpegEncContext *s); -int ff_msmpeg4_decode_ext_header(MpegEncContext *s, int buf_size); -void ff_msmpeg4_decode_motion(MpegEncContext * s, int *mx_ptr, int *my_ptr); -int ff_msmpeg4_decode_block(MpegEncContext * s, int16_t * block, +int ff_msmpeg4_decode_picture_header(MPVMainDecContext *s); +int ff_msmpeg4_decode_ext_header(MPVMainDecContext *s, int buf_size); +void ff_msmpeg4_decode_motion(MPVDecContext * s, int *mx_ptr, int *my_ptr); +int ff_msmpeg4_decode_block(MPVDecContext * s, int16_t * block, int n, int coded, const uint8_t *scan_table); -int ff_msmpeg4_pred_dc(MpegEncContext *s, int n, +int ff_msmpeg4_pred_dc(MPVContext *s, int n, int16_t **dc_val_ptr, int *dir_ptr); diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c index 77ad8a8ff4..4bcb119923 100644 --- a/libavcodec/msmpeg4dec.c +++ b/libavcodec/msmpeg4dec.c @@ -44,7 +44,7 @@ #define DEFAULT_INTER_INDEX 3 -static inline int msmpeg4v1_pred_dc(MpegEncContext * s, int n, +static inline int msmpeg4v1_pred_dc(MPVDecContext * s, int n, int32_t **dc_val_ptr) { int i; @@ -70,7 +70,7 @@ static VLC v2_mb_type_vlc; VLC ff_inter_intra_vlc; /* This is identical to H.263 except that its range is multiplied by 2. */ -static int msmpeg4v2_decode_motion(MpegEncContext * s, int pred, int f_code) +static int msmpeg4v2_decode_motion(MPVDecContext * s, int pred, int f_code) { int code, val, sign, shift; @@ -101,7 +101,7 @@ static int msmpeg4v2_decode_motion(MpegEncContext * s, int pred, int f_code) return val; } -static int msmpeg4v12_decode_mb(MpegEncContext *s, int16_t block[6][64]) +static int msmpeg4v12_decode_mb(MPVDecContext *s, int16_t block[6][64]) { int cbp, code, i; uint32_t * const mb_type_ptr = &s->current_picture.mb_type[s->mb_x + s->mb_y*s->mb_stride]; @@ -202,7 +202,7 @@ static int msmpeg4v12_decode_mb(MpegEncContext *s, int16_t block[6][64]) return 0; } -static int msmpeg4v34_decode_mb(MpegEncContext *s, int16_t block[6][64]) +static int msmpeg4v34_decode_mb(MPVDecContext *s, int16_t block[6][64]) { int cbp, code, i; uint8_t *coded_val; @@ -295,7 +295,7 @@ static int msmpeg4v34_decode_mb(MpegEncContext *s, int16_t block[6][64]) /* init all vlc decoding tables */ av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx) { - MpegEncContext *s = avctx->priv_data; + MPVMainDecContext *const s = avctx->priv_data; static volatile int done = 0; int ret; MVTable *mv; @@ -398,7 +398,7 @@ av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx) return 0; } -int ff_msmpeg4_decode_picture_header(MpegEncContext * s) +int ff_msmpeg4_decode_picture_header(MPVMainDecContext * s) { int code; @@ -554,7 +554,7 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s) return 0; } -int ff_msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size) +int ff_msmpeg4_decode_ext_header(MPVMainDecContext *s, int buf_size) { int left= buf_size*8 - get_bits_count(&s->gb); int length= s->msmpeg4_version>=3 ? 17 : 16; @@ -582,7 +582,7 @@ int ff_msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size) return 0; } -static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr) +static int msmpeg4_decode_dc(MPVDecContext * s, int n, int *dir_ptr) { int level, pred; @@ -638,7 +638,7 @@ static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr) return level; } -int ff_msmpeg4_decode_block(MpegEncContext * s, int16_t * block, +int ff_msmpeg4_decode_block(MPVDecContext * s, int16_t * block, int n, int coded, const uint8_t *scan_table) { int level, i, last, run, run_diff; @@ -825,7 +825,7 @@ int ff_msmpeg4_decode_block(MpegEncContext * s, int16_t * block, return 0; } -void ff_msmpeg4_decode_motion(MpegEncContext *s, int *mx_ptr, int *my_ptr) +void ff_msmpeg4_decode_motion(MPVDecContext *s, int *mx_ptr, int *my_ptr) { MVTable *mv; int code, mx, my; @@ -862,7 +862,7 @@ const AVCodec ff_msmpeg4v1_decoder = { .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 1"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_MSMPEG4V1, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainDecContext), .init = ff_msmpeg4_decode_init, .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, @@ -880,7 +880,7 @@ const AVCodec ff_msmpeg4v2_decoder = { .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 2"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_MSMPEG4V2, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainDecContext), .init = ff_msmpeg4_decode_init, .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, @@ -898,7 +898,7 @@ const AVCodec ff_msmpeg4v3_decoder = { .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 3"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_MSMPEG4V3, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainDecContext), .init = ff_msmpeg4_decode_init, .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, @@ -916,7 +916,7 @@ const AVCodec ff_wmv1_decoder = { .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 7"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_WMV1, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainDecContext), .init = ff_msmpeg4_decode_init, .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c index 5e1ed9cc27..0c4d777cc2 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -136,7 +136,7 @@ static av_cold void msmpeg4_encode_init_static(void) } } -av_cold void ff_msmpeg4_encode_init(MpegEncContext *s) +av_cold void ff_msmpeg4_encode_init(MPVMainEncContext *s) { static AVOnce init_static_once = AV_ONCE_INIT; @@ -152,7 +152,7 @@ av_cold void ff_msmpeg4_encode_init(MpegEncContext *s) static void find_best_tables(MSMPEG4EncContext *ms) { - MpegEncContext *const s = &ms->s; + MPVEncContext *const s = &ms->s; int i; int best = 0, best_size = INT_MAX; int chroma_best = 0, best_chroma_size = INT_MAX; @@ -216,7 +216,7 @@ static void find_best_tables(MSMPEG4EncContext *ms) } /* write MSMPEG4 compatible frame header */ -void ff_msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number) +void ff_msmpeg4_encode_picture_header(MPVMainEncContext * s, int picture_number) { MSMPEG4EncContext *const ms = (MSMPEG4EncContext*)s; @@ -278,7 +278,7 @@ void ff_msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number) s->esc3_run_length= 0; } -void ff_msmpeg4_encode_ext_header(MpegEncContext * s) +void ff_msmpeg4_encode_ext_header(MPVEncContext * s) { unsigned fps = s->avctx->time_base.den / s->avctx->time_base.num / FFMAX(s->avctx->ticks_per_frame, 1); put_bits(&s->pb, 5, FFMIN(fps, 31)); //yes 29.97 -> 29 @@ -291,7 +291,7 @@ void ff_msmpeg4_encode_ext_header(MpegEncContext * s) av_assert0(s->flipflop_rounding==0); } -void ff_msmpeg4_encode_motion(MpegEncContext * s, +void ff_msmpeg4_encode_motion(MPVEncContext * s, int mx, int my) { int code; @@ -324,7 +324,8 @@ void ff_msmpeg4_encode_motion(MpegEncContext * s, } } -void ff_msmpeg4_handle_slices(MpegEncContext *s){ +void ff_msmpeg4_handle_slices(MPVEncContext *s) +{ if (s->mb_x == 0) { if (s->slice_height && (s->mb_y % s->slice_height) == 0) { if(s->msmpeg4_version < 4){ @@ -337,7 +338,7 @@ void ff_msmpeg4_handle_slices(MpegEncContext *s){ } } -static void msmpeg4v2_encode_motion(MpegEncContext * s, int val) +static void msmpeg4v2_encode_motion(MPVEncContext * s, int val) { int range, bit_size, sign, code, bits; @@ -370,7 +371,7 @@ static void msmpeg4v2_encode_motion(MpegEncContext * s, int val) } } -void ff_msmpeg4_encode_mb(MpegEncContext * s, +void ff_msmpeg4_encode_mb(MPVEncContext * s, int16_t block[6][64], int motion_x, int motion_y) { @@ -493,7 +494,7 @@ void ff_msmpeg4_encode_mb(MpegEncContext * s, } } -static void msmpeg4_encode_dc(MpegEncContext * s, int level, int n, int *dir_ptr) +static void msmpeg4_encode_dc(MPVEncContext * s, int level, int n, int *dir_ptr) { int sign, code; int pred; @@ -556,7 +557,7 @@ static void msmpeg4_encode_dc(MpegEncContext * s, int level, int n, int *dir_ptr /* Encoding of a block; very similar to MPEG-4 except for a different * escape coding (same as H.263) and more VLC tables. */ -void ff_msmpeg4_encode_block(MpegEncContext * s, int16_t * block, int n) +void ff_msmpeg4_encode_block(MPVEncContext * s, int16_t * block, int n) { MSMPEG4EncContext *const ms = (MSMPEG4EncContext*)s; int level, run, last, i, j, last_index; diff --git a/libavcodec/msmpeg4enc.h b/libavcodec/msmpeg4enc.h index 98044913b1..80f7b0709e 100644 --- a/libavcodec/msmpeg4enc.h +++ b/libavcodec/msmpeg4enc.h @@ -23,25 +23,25 @@ #define AVCODEC_MSMPEG4ENC_H #include "config.h" -#include "mpegvideo.h" +#include "mpegvideoenc.h" #include "put_bits.h" #include "rl.h" typedef struct MSMPEG4EncContext { - MpegEncContext s; + MPVMainEncContext s; /** [mb_intra][isChroma][level][run][last] */ unsigned ac_stats[2][2][MAX_LEVEL + 1][MAX_RUN + 1][2]; } MSMPEG4EncContext; -void ff_msmpeg4_encode_init(MpegEncContext *s); -void ff_msmpeg4_encode_picture_header(MpegEncContext *s, int picture_number); -void ff_msmpeg4_encode_ext_header(MpegEncContext *s); -void ff_msmpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], +void ff_msmpeg4_encode_init(MPVMainEncContext *s); +void ff_msmpeg4_encode_picture_header(MPVMainEncContext *s, int picture_number); +void ff_msmpeg4_encode_ext_header(MPVEncContext *s); +void ff_msmpeg4_encode_mb(MPVEncContext *s, int16_t block[6][64], int motion_x, int motion_y); -void ff_msmpeg4_encode_block(MpegEncContext * s, int16_t * block, int n); -void ff_msmpeg4_handle_slices(MpegEncContext *s); -void ff_msmpeg4_encode_motion(MpegEncContext * s, int mx, int my); +void ff_msmpeg4_encode_block(MPVEncContext * s, int16_t * block, int n); +void ff_msmpeg4_handle_slices(MPVEncContext *s); +void ff_msmpeg4_encode_motion(MPVEncContext * s, int mx, int my); void ff_msmpeg4_code012(PutBitContext *pb, int n); diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c index d7a19f6ad2..64888540ac 100644 --- a/libavcodec/mss2.c +++ b/libavcodec/mss2.c @@ -381,7 +381,7 @@ static int decode_wmv9(AVCodecContext *avctx, const uint8_t *buf, int buf_size, MSS2Context *ctx = avctx->priv_data; MSS12Context *c = &ctx->c; VC1Context *v = avctx->priv_data; - MpegEncContext *s = &v->s; + MPVMainDecContext *const s = &v->s; AVFrame *f; int ret; diff --git a/libavcodec/neon/mpegvideo.c b/libavcodec/neon/mpegvideo.c index 8f05d77a65..e5c21290fd 100644 --- a/libavcodec/neon/mpegvideo.c +++ b/libavcodec/neon/mpegvideo.c @@ -83,7 +83,7 @@ static void inline ff_dct_unquantize_h263_neon(int qscale, int qadd, int nCoeffs vst1_s16(block, d0s16); } -static void dct_unquantize_h263_inter_neon(MpegEncContext *s, int16_t *block, +static void dct_unquantize_h263_inter_neon(MPVContext *s, int16_t *block, int n, int qscale) { int nCoeffs = s->inter_scantable.raster_end[s->block_last_index[n]]; @@ -92,7 +92,7 @@ static void dct_unquantize_h263_inter_neon(MpegEncContext *s, int16_t *block, ff_dct_unquantize_h263_neon(qscale, qadd, nCoeffs + 1, block); } -static void dct_unquantize_h263_intra_neon(MpegEncContext *s, int16_t *block, +static void dct_unquantize_h263_intra_neon(MPVContext *s, int16_t *block, int n, int qscale) { int qadd; @@ -124,7 +124,7 @@ static void dct_unquantize_h263_intra_neon(MpegEncContext *s, int16_t *block, } -av_cold void ff_mpv_common_init_neon(MpegEncContext *s) +av_cold void ff_mpv_common_init_neon(MPVMainContext *s) { int cpu_flags = av_get_cpu_flags(); diff --git a/libavcodec/nvdec_mpeg12.c b/libavcodec/nvdec_mpeg12.c index b8db4250bb..c3b92f2111 100644 --- a/libavcodec/nvdec_mpeg12.c +++ b/libavcodec/nvdec_mpeg12.c @@ -28,7 +28,7 @@ static int nvdec_mpeg12_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { - MpegEncContext *s = avctx->priv_data; + MPVDecContext *const s = avctx->priv_data; NVDECContext *ctx = avctx->internal->hwaccel_priv_data; CUVIDPICPARAMS *pp = &ctx->pic_params; diff --git a/libavcodec/nvdec_mpeg4.c b/libavcodec/nvdec_mpeg4.c index 2b2b1b87a1..5d3ed31a69 100644 --- a/libavcodec/nvdec_mpeg4.c +++ b/libavcodec/nvdec_mpeg4.c @@ -29,7 +29,7 @@ static int nvdec_mpeg4_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { Mpeg4DecContext *m = avctx->priv_data; - MpegEncContext *s = &m->m; + MPVEncContext *const s = &m->m; NVDECContext *ctx = avctx->internal->hwaccel_priv_data; CUVIDPICPARAMS *pp = &ctx->pic_params; diff --git a/libavcodec/nvdec_vc1.c b/libavcodec/nvdec_vc1.c index 10e7b5ab0d..9dc9f49b6a 100644 --- a/libavcodec/nvdec_vc1.c +++ b/libavcodec/nvdec_vc1.c @@ -28,7 +28,7 @@ static int nvdec_vc1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { VC1Context *v = avctx->priv_data; - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; NVDECContext *ctx = avctx->internal->hwaccel_priv_data; CUVIDPICPARAMS *pp = &ctx->pic_params; diff --git a/libavcodec/ppc/me_cmp.c b/libavcodec/ppc/me_cmp.c index 17f9a4f016..31a1881f01 100644 --- a/libavcodec/ppc/me_cmp.c +++ b/libavcodec/ppc/me_cmp.c @@ -28,7 +28,7 @@ #include "libavutil/ppc/util_altivec.h" #include "libavcodec/avcodec.h" -#include "libavcodec/mpegvideo.h" +#include "libavcodec/mpegvideoenc.h" #include "libavcodec/me_cmp.h" #if HAVE_ALTIVEC @@ -51,7 +51,7 @@ iv = vec_vsx_ld(1, pix);\ } #endif -static int sad16_x2_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int sad16_x2_altivec(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int i; @@ -91,7 +91,7 @@ static int sad16_x2_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int sad16_y2_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int sad16_y2_altivec(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int i; @@ -141,7 +141,7 @@ static int sad16_y2_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int sad16_xy2_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int sad16_xy2_altivec(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int i; @@ -230,7 +230,7 @@ static int sad16_xy2_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int sad16_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int sad16_altivec(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int i; @@ -265,7 +265,7 @@ static int sad16_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int sad8_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int sad8_altivec(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int i; @@ -309,7 +309,7 @@ static int sad8_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, /* Sum of Squared Errors for an 8x8 block, AltiVec-enhanced. * It's the sad8_altivec code above w/ squaring added. */ -static int sse8_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int sse8_altivec(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int i; @@ -354,7 +354,7 @@ static int sse8_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, /* Sum of Squared Errors for a 16x16 block, AltiVec-enhanced. * It's the sad16_altivec code above w/ squaring added. */ -static int sse16_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int sse16_altivec(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int i; @@ -392,7 +392,7 @@ static int sse16_altivec(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, return s; } -static int hadamard8_diff8x8_altivec(MpegEncContext *s, uint8_t *dst, +static int hadamard8_diff8x8_altivec(MPVEncContext *s, uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h) { int __attribute__((aligned(16))) sum; @@ -518,7 +518,7 @@ static int hadamard8_diff8x8_altivec(MpegEncContext *s, uint8_t *dst, * On the 970, the hand-made RA is still a win (around 690 vs. around 780), * but xlc goes to around 660 on the regular C code... */ -static int hadamard8_diff16x8_altivec(MpegEncContext *s, uint8_t *dst, +static int hadamard8_diff16x8_altivec(MPVEncContext *s, uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h) { int __attribute__((aligned(16))) sum; @@ -709,7 +709,7 @@ static int hadamard8_diff16x8_altivec(MpegEncContext *s, uint8_t *dst, return sum; } -static int hadamard8_diff16_altivec(MpegEncContext *s, uint8_t *dst, +static int hadamard8_diff16_altivec(MPVEncContext *s, uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h) { int score = hadamard8_diff16x8_altivec(s, dst, src, stride, 8); diff --git a/libavcodec/ppc/mpegvideo_altivec.c b/libavcodec/ppc/mpegvideo_altivec.c index bcb59ba845..e8f8413a39 100644 --- a/libavcodec/ppc/mpegvideo_altivec.c +++ b/libavcodec/ppc/mpegvideo_altivec.c @@ -38,7 +38,7 @@ /* AltiVec version of dct_unquantize_h263 this code assumes `block' is 16 bytes-aligned */ -static void dct_unquantize_h263_altivec(MpegEncContext *s, +static void dct_unquantize_h263_altivec(MPVContext *s, int16_t *block, int n, int qscale) { int i, level, qmul, qadd; @@ -116,7 +116,7 @@ static void dct_unquantize_h263_altivec(MpegEncContext *s, #endif /* HAVE_ALTIVEC */ -av_cold void ff_mpv_common_init_ppc(MpegEncContext *s) +av_cold void ff_mpv_common_init_ppc(MPVMainContext *s) { #if HAVE_ALTIVEC if (!PPC_ALTIVEC(av_get_cpu_flags())) diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index f814e23ed5..c5088d6790 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -35,7 +35,7 @@ #include "mpegvideoenc.h" #include "libavutil/eval.h" -void ff_write_pass1_stats(MpegEncContext *s) +void ff_write_pass1_stats(MPVMainEncContext *s) { snprintf(s->avctx->stats_out, 256, "in:%d out:%d type:%d q:%d itex:%d ptex:%d mv:%d misc:%d " @@ -77,7 +77,7 @@ static inline double bits2qp(RateControlEntry *rce, double bits) return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits + 1) / bits; } -static double get_diff_limited_q(MpegEncContext *s, RateControlEntry *rce, double q) +static double get_diff_limited_q(MPVMainEncContext *s, RateControlEntry *rce, double q) { RateControlContext *rcc = &s->rc_context; AVCodecContext *a = s->avctx; @@ -116,7 +116,7 @@ static double get_diff_limited_q(MpegEncContext *s, RateControlEntry *rce, doubl /** * Get the qmin & qmax for pict_type. */ -static void get_qminmax(int *qmin_ret, int *qmax_ret, MpegEncContext *s, int pict_type) +static void get_qminmax(int *qmin_ret, int *qmax_ret, MPVMainEncContext *s, int pict_type) { int qmin = s->lmin; int qmax = s->lmax; @@ -144,7 +144,7 @@ static void get_qminmax(int *qmin_ret, int *qmax_ret, MpegEncContext *s, int pic *qmax_ret = qmax; } -static double modify_qscale(MpegEncContext *s, RateControlEntry *rce, +static double modify_qscale(MPVMainEncContext *s, RateControlEntry *rce, double q, int frame_num) { RateControlContext *rcc = &s->rc_context; @@ -235,7 +235,7 @@ static double modify_qscale(MpegEncContext *s, RateControlEntry *rce, /** * Modify the bitrate curve from pass1 for one frame. */ -static double get_qscale(MpegEncContext *s, RateControlEntry *rce, +static double get_qscale(MPVMainEncContext *s, RateControlEntry *rce, double rate_factor, int frame_num) { RateControlContext *rcc = &s->rc_context; @@ -308,7 +308,7 @@ static double get_qscale(MpegEncContext *s, RateControlEntry *rce, return q; } -static int init_pass2(MpegEncContext *s) +static int init_pass2(MPVMainEncContext *s) { RateControlContext *rcc = &s->rc_context; AVCodecContext *a = s->avctx; @@ -469,7 +469,7 @@ static int init_pass2(MpegEncContext *s) return 0; } -av_cold int ff_rate_control_init(MpegEncContext *s) +av_cold int ff_rate_control_init(MPVMainEncContext *s) { RateControlContext *rcc = &s->rc_context; int i, res; @@ -669,7 +669,7 @@ av_cold int ff_rate_control_init(MpegEncContext *s) return 0; } -av_cold void ff_rate_control_uninit(MpegEncContext *s) +av_cold void ff_rate_control_uninit(MPVMainEncContext *s) { RateControlContext *rcc = &s->rc_context; emms_c(); @@ -678,7 +678,7 @@ av_cold void ff_rate_control_uninit(MpegEncContext *s) av_freep(&rcc->entry); } -int ff_vbv_update(MpegEncContext *s, int frame_size) +int ff_vbv_update(MPVMainEncContext *s, int frame_size) { RateControlContext *rcc = &s->rc_context; const double fps = get_fps(s->avctx); @@ -737,7 +737,7 @@ static void update_predictor(Predictor *p, double q, double var, double size) p->coeff += new_coeff; } -static void adaptive_quantization(MpegEncContext *s, double q) +static void adaptive_quantization(MPVMainEncContext *s, double q) { int i; const float lumi_masking = s->avctx->lumi_masking / (128.0 * 128.0); @@ -854,7 +854,7 @@ static void adaptive_quantization(MpegEncContext *s, double q) } } -void ff_get_2pass_fcode(MpegEncContext *s) +void ff_get_2pass_fcode(MPVMainEncContext *s) { RateControlContext *rcc = &s->rc_context; RateControlEntry *rce = &rcc->entry[s->picture_number]; @@ -865,7 +865,7 @@ void ff_get_2pass_fcode(MpegEncContext *s) // FIXME rd or at least approx for dquant -float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run) +float ff_rate_estimate_qscale(MPVMainEncContext *s, int dry_run) { float q; int qmin, qmax; diff --git a/libavcodec/ratecontrol.h b/libavcodec/ratecontrol.h index 2a7aaec644..99715ebdfb 100644 --- a/libavcodec/ratecontrol.h +++ b/libavcodec/ratecontrol.h @@ -86,14 +86,16 @@ typedef struct RateControlContext{ AVExpr * rc_eq_eval; }RateControlContext; -struct MpegEncContext; +#define MPVMainEncContext MPVContext +struct MPVMainEncContext; /* rate control */ -int ff_rate_control_init(struct MpegEncContext *s); -float ff_rate_estimate_qscale(struct MpegEncContext *s, int dry_run); -void ff_write_pass1_stats(struct MpegEncContext *s); -void ff_rate_control_uninit(struct MpegEncContext *s); -int ff_vbv_update(struct MpegEncContext *s, int frame_size); -void ff_get_2pass_fcode(struct MpegEncContext *s); +int ff_rate_control_init(struct MPVMainEncContext *s); +float ff_rate_estimate_qscale(struct MPVMainEncContext *s, int dry_run); +void ff_write_pass1_stats(struct MPVMainEncContext *s); +void ff_rate_control_uninit(struct MPVMainEncContext *s); +int ff_vbv_update(struct MPVMainEncContext *s, int frame_size); +void ff_get_2pass_fcode(struct MPVMainEncContext *s); +#undef MPVMainEncContext #endif /* AVCODEC_RATECONTROL_H */ diff --git a/libavcodec/rv10.c b/libavcodec/rv10.c index 4dfaa3460d..185aacb5c7 100644 --- a/libavcodec/rv10.c +++ b/libavcodec/rv10.c @@ -51,7 +51,7 @@ #define DC_VLC_BITS 9 typedef struct RVDecContext { - MpegEncContext m; + MPVMainDecContext m; int sub_id; int orig_width, orig_height; } RVDecContext; @@ -79,7 +79,7 @@ static const uint16_t rv_chrom_len_count[15] = { static VLC rv_dc_lum, rv_dc_chrom; -int ff_rv_decode_dc(MpegEncContext *s, int n) +int ff_rv_decode_dc(MPVDecContext *s, int n) { int code; @@ -96,7 +96,7 @@ int ff_rv_decode_dc(MpegEncContext *s, int n) } /* read RV 1.0 compatible frame header */ -static int rv10_decode_picture_header(MpegEncContext *s) +static int rv10_decode_picture_header(MPVDecContext *s) { int mb_count, pb_frame, marker, mb_xy; @@ -156,7 +156,7 @@ static int rv10_decode_picture_header(MpegEncContext *s) static int rv20_decode_picture_header(RVDecContext *rv, int whole_size) { - MpegEncContext *s = &rv->m; + MPVMainDecContext *const s = &rv->m; int seq, mb_pos, i, ret; int rpr_max; @@ -366,7 +366,7 @@ static av_cold int rv10_decode_init(AVCodecContext *avctx) { static AVOnce init_static_once = AV_ONCE_INIT; RVDecContext *rv = avctx->priv_data; - MpegEncContext *s = &rv->m; + MPVMainDecContext *const s = &rv->m; int major_ver, minor_ver, micro_ver, ret; if (avctx->extradata_size < 8) { @@ -432,7 +432,7 @@ static av_cold int rv10_decode_init(AVCodecContext *avctx) static av_cold int rv10_decode_end(AVCodecContext *avctx) { - MpegEncContext *s = avctx->priv_data; + MPVMainDecContext *const s = avctx->priv_data; ff_mpv_common_end(s); return 0; @@ -442,7 +442,7 @@ static int rv10_decode_packet(AVCodecContext *avctx, const uint8_t *buf, int buf_size, int buf_size2, int whole_size) { RVDecContext *rv = avctx->priv_data; - MpegEncContext *s = &rv->m; + MPVDecContext *const s = &rv->m; int mb_count, mb_pos, left, start_mb_x, active_bits_size, ret; active_bits_size = buf_size * 8; @@ -596,7 +596,7 @@ static int rv10_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, { const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; - MpegEncContext *s = avctx->priv_data; + MPVMainDecContext *const s = avctx->priv_data; AVFrame *pict = data; int i, ret; int slice_count; diff --git a/libavcodec/rv10.h b/libavcodec/rv10.h index 364270e76a..bbb0b97c7c 100644 --- a/libavcodec/rv10.h +++ b/libavcodec/rv10.h @@ -24,10 +24,11 @@ #include #include "mpegvideo.h" +#include "mpegvideoenc.h" -int ff_rv_decode_dc(MpegEncContext *s, int n); +int ff_rv_decode_dc(MPVDecContext *s, int n); -int ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number); -void ff_rv20_encode_picture_header(MpegEncContext *s, int picture_number); +int ff_rv10_encode_picture_header(MPVMainEncContext *s, int picture_number); +void ff_rv20_encode_picture_header(MPVMainEncContext *s, int picture_number); #endif /* AVCODEC_RV10_H */ diff --git a/libavcodec/rv10enc.c b/libavcodec/rv10enc.c index 0c74da1b3c..25f3179196 100644 --- a/libavcodec/rv10enc.c +++ b/libavcodec/rv10enc.c @@ -30,7 +30,7 @@ #include "put_bits.h" #include "rv10.h" -int ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number) +int ff_rv10_encode_picture_header(MPVMainEncContext *s, int picture_number) { int full_frame= 0; @@ -70,7 +70,7 @@ const AVCodec ff_rv10_encoder = { .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_RV10, .priv_class = &ff_mpv_enc_class, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainEncContext), .init = ff_mpv_encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, diff --git a/libavcodec/rv20enc.c b/libavcodec/rv20enc.c index 9f935d61e2..22bcad9837 100644 --- a/libavcodec/rv20enc.c +++ b/libavcodec/rv20enc.c @@ -33,7 +33,8 @@ #include "put_bits.h" #include "rv10.h" -void ff_rv20_encode_picture_header(MpegEncContext *s, int picture_number){ +void ff_rv20_encode_picture_header(MPVMainEncContext *s, int picture_number) +{ put_bits(&s->pb, 2, s->pict_type); //I 0 vs. 1 ? put_bits(&s->pb, 1, 0); /* unknown bit */ put_bits(&s->pb, 5, s->qscale); @@ -67,7 +68,7 @@ const AVCodec ff_rv20_encoder = { .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_RV20, .priv_class = &ff_mpv_enc_class, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MPVMainEncContext), .init = ff_mpv_encode_init, .encode2 = ff_mpv_encode_picture, .close = ff_mpv_encode_end, diff --git a/libavcodec/rv30.c b/libavcodec/rv30.c index d11b8430e7..5c828741aa 100644 --- a/libavcodec/rv30.c +++ b/libavcodec/rv30.c @@ -116,7 +116,7 @@ static int rv30_decode_mb_info(RV34DecContext *r) { static const int rv30_p_types[6] = { RV34_MB_SKIP, RV34_MB_P_16x16, RV34_MB_P_8x8, -1, RV34_MB_TYPE_INTRA, RV34_MB_TYPE_INTRA16x16 }; static const int rv30_b_types[6] = { RV34_MB_SKIP, RV34_MB_B_DIRECT, RV34_MB_B_FORWARD, RV34_MB_B_BACKWARD, RV34_MB_TYPE_INTRA, RV34_MB_TYPE_INTRA16x16 }; - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; GetBitContext *gb = &s->gb; unsigned code = get_interleaved_ue_golomb(gb); @@ -151,7 +151,7 @@ static inline void rv30_weak_loop_filter(uint8_t *src, const int step, static void rv30_loop_filter(RV34DecContext *r, int row) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; int mb_pos, mb_x; int i, j, k; uint8_t *Y, *C; diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c index e68072de06..8ef80d5b34 100644 --- a/libavcodec/rv34.c +++ b/libavcodec/rv34.c @@ -345,7 +345,7 @@ static inline RV34VLC* choose_vlc_set(int quant, int mod, int type) */ static int rv34_decode_intra_mb_header(RV34DecContext *r, int8_t *intra_types) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; GetBitContext *gb = &s->gb; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; int t; @@ -380,7 +380,7 @@ static int rv34_decode_intra_mb_header(RV34DecContext *r, int8_t *intra_types) */ static int rv34_decode_inter_mb_header(RV34DecContext *r, int8_t *intra_types) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; GetBitContext *gb = &s->gb; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; int i, t; @@ -458,7 +458,7 @@ static const uint8_t avail_indexes[4] = { 6, 7, 10, 11 }; */ static void rv34_pred_mv(RV34DecContext *r, int block_type, int subblock_no, int dmv_no) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; int mv_pos = s->mb_x * 2 + s->mb_y * 2 * s->b8_stride; int A[2] = {0}, B[2], C[2]; int i, j; @@ -542,7 +542,7 @@ static inline void rv34_pred_b_vector(int A[2], int B[2], int C[2], */ static void rv34_pred_mv_b(RV34DecContext *r, int block_type, int dir) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; int mv_pos = s->mb_x * 2 + s->mb_y * 2 * s->b8_stride; int A[2] = { 0 }, B[2] = { 0 }, C[2] = { 0 }; @@ -594,7 +594,7 @@ static void rv34_pred_mv_b(RV34DecContext *r, int block_type, int dir) */ static void rv34_pred_mv_rv3(RV34DecContext *r, int block_type, int dir) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; int mv_pos = s->mb_x * 2 + s->mb_y * 2 * s->b8_stride; int A[2] = {0}, B[2], C[2]; int i, j, k; @@ -662,7 +662,7 @@ static inline void rv34_mc(RV34DecContext *r, const int block_type, qpel_mc_func (*qpel_mc)[16], h264_chroma_mc_func (*chroma_mc)) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; uint8_t *Y, *U, *V, *srcY, *srcU, *srcV; int dxy, mx, my, umx, umy, lx, ly, uvmx, uvmy, src_x, src_y, uvsrc_x, uvsrc_y; int mv_pos = s->mb_x * 2 + s->mb_y * 2 * s->b8_stride + mv_off; @@ -850,7 +850,7 @@ static const int num_mvs[RV34_MB_TYPES] = { 0, 0, 1, 4, 1, 1, 0, 0, 2, 2, 2, 1 } */ static int rv34_decode_mv(RV34DecContext *r, int block_type) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; GetBitContext *gb = &s->gb; int i, j, k, l; int mv_pos = s->mb_x * 2 + s->mb_y * 2 * s->b8_stride; @@ -1009,7 +1009,7 @@ static inline void rv34_process_block(RV34DecContext *r, uint8_t *pdst, int stride, int fc, int sc, int q_dc, int q_ac) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; int16_t *ptr = s->block[0]; int has_ac = rv34_decode_block(ptr, &s->gb, r->cur_vlcs, fc, sc, q_dc, q_ac, q_ac); @@ -1024,7 +1024,7 @@ static inline void rv34_process_block(RV34DecContext *r, static void rv34_output_i16x16(RV34DecContext *r, int8_t *intra_types, int cbp) { LOCAL_ALIGNED_16(int16_t, block16, [16]); - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; GetBitContext *gb = &s->gb; int q_dc = rv34_qscale_tab[ r->luma_dc_quant_i[s->qscale] ], q_ac = rv34_qscale_tab[s->qscale]; @@ -1086,7 +1086,7 @@ static void rv34_output_i16x16(RV34DecContext *r, int8_t *intra_types, int cbp) static void rv34_output_intra(RV34DecContext *r, int8_t *intra_types, int cbp) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; uint8_t *dst = s->dest[0]; int avail[6*8] = {0}; int i, j, k; @@ -1162,7 +1162,7 @@ static int is_mv_diff_gt_3(int16_t (*motion_val)[2], int step) static int rv34_set_deblock_coef(RV34DecContext *r) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; int hmvmask = 0, vmvmask = 0, i, j; int midx = s->mb_x * 2 + s->mb_y * 2 * s->b8_stride; int16_t (*motion_val)[2] = &s->current_picture_ptr->motion_val[0][midx]; @@ -1192,7 +1192,7 @@ static int rv34_set_deblock_coef(RV34DecContext *r) static int rv34_decode_inter_macroblock(RV34DecContext *r, int8_t *intra_types) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; GetBitContext *gb = &s->gb; uint8_t *dst = s->dest[0]; int16_t *ptr = s->block[0]; @@ -1300,7 +1300,7 @@ static int rv34_decode_inter_macroblock(RV34DecContext *r, int8_t *intra_types) static int rv34_decode_intra_macroblock(RV34DecContext *r, int8_t *intra_types) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; int cbp, dist; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; @@ -1338,7 +1338,7 @@ static int rv34_decode_intra_macroblock(RV34DecContext *r, int8_t *intra_types) return 0; } -static int check_slice_end(RV34DecContext *r, MpegEncContext *s) +static int check_slice_end(RV34DecContext *r, MPVDecContext *s) { int bits; if(s->mb_y >= s->mb_height) @@ -1403,7 +1403,7 @@ static int rv34_decoder_realloc(RV34DecContext *r) static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int buf_size) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; GetBitContext *gb = &s->gb; int mb_pos, slice_type; int res; @@ -1487,7 +1487,7 @@ av_cold int ff_rv34_decode_init(AVCodecContext *avctx) { static AVOnce init_static_once = AV_ONCE_INIT; RV34DecContext *r = avctx->priv_data; - MpegEncContext *s = &r->s; + MPVMainDecContext *const s = &r->s; int ret; ff_mpv_decode_init(s, avctx); @@ -1516,7 +1516,7 @@ av_cold int ff_rv34_decode_init(AVCodecContext *avctx) int ff_rv34_decode_update_thread_context(AVCodecContext *dst, const AVCodecContext *src) { RV34DecContext *r = dst->priv_data, *r1 = src->priv_data; - MpegEncContext * const s = &r->s, * const s1 = &r1->s; + MPVMainDecContext *const s = &r->s, *const s1 = &r1->s; int err; if (dst == src || !s1->context_initialized) @@ -1557,7 +1557,7 @@ static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n, in static int finish_frame(AVCodecContext *avctx, AVFrame *pict) { RV34DecContext *r = avctx->priv_data; - MpegEncContext *s = &r->s; + MPVMainDecContext *const s = &r->s; int got_picture = 0, ret; ff_er_frame_end(&s->er); @@ -1601,7 +1601,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx, const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; RV34DecContext *r = avctx->priv_data; - MpegEncContext *s = &r->s; + MPVMainDecContext *const s = &r->s; AVFrame *pict = data; SliceInfo si; int i, ret; diff --git a/libavcodec/rv34.h b/libavcodec/rv34.h index 53b29dc245..32ec738597 100644 --- a/libavcodec/rv34.h +++ b/libavcodec/rv34.h @@ -84,7 +84,7 @@ typedef struct SliceInfo{ /** decoder context */ typedef struct RV34DecContext{ - MpegEncContext s; + MPVMainDecContext s; RV34DSPContext rdsp; int8_t *intra_types_hist;///< old block types, used for prediction int8_t *intra_types; ///< block types diff --git a/libavcodec/rv40.c b/libavcodec/rv40.c index 0b3f733bc6..56ad4f45e7 100644 --- a/libavcodec/rv40.c +++ b/libavcodec/rv40.c @@ -168,7 +168,7 @@ static int rv40_parse_slice_header(RV34DecContext *r, GetBitContext *gb, SliceIn */ static int rv40_decode_intra_types(RV34DecContext *r, GetBitContext *gb, int8_t *dst) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; int i, j, k, v; int A, B, C; int pattern; @@ -230,7 +230,7 @@ static int rv40_decode_intra_types(RV34DecContext *r, GetBitContext *gb, int8_t */ static int rv40_decode_mb_info(RV34DecContext *r) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; GetBitContext *gb = &s->gb; int q, i; int prev_type = 0; @@ -340,7 +340,7 @@ static void rv40_adaptive_loop_filter(RV34DSPContext *rdsp, */ static void rv40_loop_filter(RV34DecContext *r, int row) { - MpegEncContext *s = &r->s; + MPVDecContext *const s = &r->s; int mb_pos, mb_x; int i, j, k; uint8_t *Y, *C; diff --git a/libavcodec/snow.h b/libavcodec/snow.h index f5beca66e9..2e09025277 100644 --- a/libavcodec/snow.h +++ b/libavcodec/snow.h @@ -32,7 +32,7 @@ #include "rangecoder.h" #include "mathops.h" -#include "mpegvideo.h" +#include "mpegvideoenc.h" #include "h264qpel.h" #define SNOW_MAX_PLANES 4 @@ -182,7 +182,7 @@ typedef struct SnowContext{ int iterative_dia_size; int scenechange_threshold; - MpegEncContext m; // needed for motion estimation, should not be used for anything else, the idea is to eventually make the motion estimation independent of MpegEncContext, so this will be removed then (FIXME/XXX) + MPVMainEncContext m; // needed for motion estimation, should not be used for anything else, the idea is to eventually make the motion estimation independent of mpegvideo, so this will be removed then (FIXME/XXX) uint8_t *scratchbuf; uint8_t *emu_edge_buffer; diff --git a/libavcodec/snow_dwt.c b/libavcodec/snow_dwt.c index c093ebff07..8d717b6bf8 100644 --- a/libavcodec/snow_dwt.c +++ b/libavcodec/snow_dwt.c @@ -25,6 +25,8 @@ #include "me_cmp.h" #include "snow_dwt.h" +#define MPVEncContext MPVContext + int ff_slice_buffer_init(slice_buffer *buf, int line_count, int max_allocated_lines, int line_width, IDWTELEM *base_buffer) @@ -740,7 +742,7 @@ void ff_spatial_idwt(IDWTELEM *buffer, IDWTELEM *temp, int width, int height, decomposition_count, y); } -static inline int w_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, +static inline int w_c(struct MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int w, int h, int type) { int s, i, j; @@ -809,32 +811,32 @@ static inline int w_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, pt return s >> 9; } -static int w53_8_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) +static int w53_8_c(struct MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) { return w_c(v, pix1, pix2, line_size, 8, h, 1); } -static int w97_8_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) +static int w97_8_c(struct MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) { return w_c(v, pix1, pix2, line_size, 8, h, 0); } -static int w53_16_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) +static int w53_16_c(struct MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) { return w_c(v, pix1, pix2, line_size, 16, h, 1); } -static int w97_16_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) +static int w97_16_c(struct MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) { return w_c(v, pix1, pix2, line_size, 16, h, 0); } -int ff_w53_32_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) +int ff_w53_32_c(struct MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) { return w_c(v, pix1, pix2, line_size, 32, h, 1); } -int ff_w97_32_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) +int ff_w97_32_c(struct MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h) { return w_c(v, pix1, pix2, line_size, 32, h, 0); } diff --git a/libavcodec/snow_dwt.h b/libavcodec/snow_dwt.h index 390bc57130..ef6690b0ca 100644 --- a/libavcodec/snow_dwt.h +++ b/libavcodec/snow_dwt.h @@ -24,7 +24,8 @@ #include #include -struct MpegEncContext; +#define MPVEncContext MPVContext +struct MPVEncContext; typedef int DWTELEM; typedef short IDWTELEM; @@ -104,8 +105,8 @@ void ff_snow_inner_add_yblock(const uint8_t *obmc, const int obmc_stride, int src_y, int src_stride, slice_buffer *sb, int add, uint8_t *dst8); -int ff_w53_32_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h); -int ff_w97_32_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h); +int ff_w53_32_c(struct MPVContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h); +int ff_w97_32_c(struct MPVContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h); void ff_spatial_dwt(int *buffer, int *temp, int width, int height, int stride, int type, int decomposition_count); @@ -123,4 +124,6 @@ void ff_spatial_idwt(IDWTELEM *buffer, IDWTELEM *temp, int width, int height, void ff_dwt_init(SnowDWTContext *c); void ff_dwt_init_x86(SnowDWTContext *c); +#undef MPVEncContext + #endif /* AVCODEC_DWT_H */ diff --git a/libavcodec/speedhqenc.c b/libavcodec/speedhqenc.c index ba3b1d9393..fb4d426b46 100644 --- a/libavcodec/speedhqenc.c +++ b/libavcodec/speedhqenc.c @@ -56,7 +56,7 @@ static uint32_t speedhq_chr_dc_uni[512]; static uint8_t uni_speedhq_ac_vlc_len[64 * 64 * 2]; typedef struct SpeedHQEncContext { - MpegEncContext m; + MPVMainEncContext m; int slice_start; } SpeedHQEncContext; @@ -90,7 +90,7 @@ static av_cold void speedhq_init_static_data(void) ff_mpeg1_init_uni_ac_vlc(&ff_rl_speedhq, uni_speedhq_ac_vlc_len); } -av_cold int ff_speedhq_encode_init(MpegEncContext *s) +av_cold int ff_speedhq_encode_init(MPVMainEncContext *s) { static AVOnce init_static_once = AV_ONCE_INIT; @@ -128,7 +128,7 @@ av_cold int ff_speedhq_encode_init(MpegEncContext *s) return 0; } -void ff_speedhq_encode_picture_header(MpegEncContext *s) +void ff_speedhq_encode_picture_header(MPVMainEncContext *s) { SpeedHQEncContext *ctx = (SpeedHQEncContext*)s; @@ -140,7 +140,7 @@ void ff_speedhq_encode_picture_header(MpegEncContext *s) put_bits_le(&s->pb, 24, 0); } -void ff_speedhq_end_slice(MpegEncContext *s) +void ff_speedhq_end_slice(MPVEncContext *s) { SpeedHQEncContext *ctx = (SpeedHQEncContext*)s; int slice_len; @@ -188,7 +188,7 @@ static inline void encode_dc(PutBitContext *pb, int diff, int component) } } -static void encode_block(MpegEncContext *s, int16_t *block, int n) +static void encode_block(MPVEncContext *s, int16_t *block, int n) { int alevel, level, last_non_zero, dc, i, j, run, last_index, sign; int code; @@ -237,7 +237,7 @@ static void encode_block(MpegEncContext *s, int16_t *block, int n) put_bits_le(&s->pb, 4, 6); } -void ff_speedhq_encode_mb(MpegEncContext *s, int16_t block[12][64]) +void ff_speedhq_encode_mb(MPVEncContext *s, int16_t block[12][64]) { int i; for(i=0;i<6;i++) { diff --git a/libavcodec/speedhqenc.h b/libavcodec/speedhqenc.h index 5100bb2d34..5ca8868f28 100644 --- a/libavcodec/speedhqenc.h +++ b/libavcodec/speedhqenc.h @@ -33,15 +33,15 @@ #include "mjpeg.h" #include "mjpegenc_common.h" -#include "mpegvideo.h" +#include "mpegvideoenc.h" #include "put_bits.h" -int ff_speedhq_encode_init(MpegEncContext *s); -void ff_speedhq_encode_close(MpegEncContext *s); -void ff_speedhq_encode_mb(MpegEncContext *s, int16_t block[12][64]); +int ff_speedhq_encode_init(MPVMainEncContext *s); +void ff_speedhq_encode_close(MPVMainEncContext *s); +void ff_speedhq_encode_mb(MPVEncContext *s, int16_t block[12][64]); -void ff_speedhq_encode_picture_header(MpegEncContext *s); -void ff_speedhq_end_slice(MpegEncContext *s); +void ff_speedhq_encode_picture_header(MPVMainEncContext *s); +void ff_speedhq_end_slice(MPVEncContext *s); int ff_speedhq_mb_y_order_to_mb(int mb_y_order, int mb_height, int *first_in_slice); diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c index 9cef3d8ef6..7af82bb3ac 100644 --- a/libavcodec/svq1enc.c +++ b/libavcodec/svq1enc.c @@ -237,7 +237,8 @@ static int encode_block(SVQ1EncContext *s, uint8_t *src, uint8_t *ref, return best_score; } -static void init_block_index(MpegEncContext *s){ +static void init_block_index(MPVEncContext *s) +{ s->block_index[0]= s->b8_stride*(s->mb_y*2 ) + s->mb_x*2; s->block_index[1]= s->b8_stride*(s->mb_y*2 ) + 1 + s->mb_x*2; s->block_index[2]= s->b8_stride*(s->mb_y*2 + 1) + s->mb_x*2; diff --git a/libavcodec/svq1enc.h b/libavcodec/svq1enc.h index bb6af082d5..ee4a0b673c 100644 --- a/libavcodec/svq1enc.h +++ b/libavcodec/svq1enc.h @@ -29,14 +29,14 @@ #include "avcodec.h" #include "hpeldsp.h" #include "me_cmp.h" -#include "mpegvideo.h" +#include "mpegvideoenc.h" #include "put_bits.h" typedef struct SVQ1EncContext { /* FIXME: Needed for motion estimation, should not be used for anything * else, the idea is to make the motion estimation eventually independent - * of MpegEncContext, so this will be removed then. */ - MpegEncContext m; + * of MPVMainEncContext, so this will be removed then. */ + MPVMainEncContext m; AVCodecContext *avctx; MECmpContext mecc; HpelDSPContext hdsp; diff --git a/libavcodec/vaapi_mpeg2.c b/libavcodec/vaapi_mpeg2.c index 26e0cd827c..057afdd878 100644 --- a/libavcodec/vaapi_mpeg2.c +++ b/libavcodec/vaapi_mpeg2.c @@ -27,21 +27,21 @@ #include "vaapi_decode.h" /** Reconstruct bitstream f_code */ -static inline int mpeg2_get_f_code(const MpegEncContext *s) +static inline int mpeg2_get_f_code(const MPVDecContext *s) { return (s->mpeg_f_code[0][0] << 12) | (s->mpeg_f_code[0][1] << 8) | (s->mpeg_f_code[1][0] << 4) | s->mpeg_f_code[1][1]; } /** Determine frame start: first field for field picture or frame picture */ -static inline int mpeg2_get_is_frame_start(const MpegEncContext *s) +static inline int mpeg2_get_is_frame_start(const MPVDecContext *s) { return s->first_field || s->picture_structure == PICT_FRAME; } static int vaapi_mpeg2_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size) { - const MpegEncContext *s = avctx->priv_data; + const MPVDecContext *const s = avctx->priv_data; VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private; VAPictureParameterBufferMPEG2 pic_param; VAIQMatrixBufferMPEG2 iq_matrix; @@ -114,7 +114,7 @@ fail: static int vaapi_mpeg2_end_frame(AVCodecContext *avctx) { - MpegEncContext *s = avctx->priv_data; + MPVDecContext *const s = avctx->priv_data; VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private; int ret; @@ -130,7 +130,7 @@ fail: static int vaapi_mpeg2_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { - const MpegEncContext *s = avctx->priv_data; + const MPVDecContext *const s = avctx->priv_data; VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private; VASliceParameterBufferMPEG2 slice_param; GetBitContext gb; diff --git a/libavcodec/vaapi_mpeg4.c b/libavcodec/vaapi_mpeg4.c index 71e155154c..090902e29d 100644 --- a/libavcodec/vaapi_mpeg4.c +++ b/libavcodec/vaapi_mpeg4.c @@ -46,7 +46,7 @@ static int mpeg4_get_intra_dc_vlc_thr(Mpeg4DecContext *s) static int vaapi_mpeg4_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size) { Mpeg4DecContext *ctx = avctx->priv_data; - MpegEncContext *s = &ctx->m; + MPVDecContext *const s = &ctx->m; VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private; VAPictureParameterBufferMPEG4 pic_param; int i, err; @@ -136,7 +136,7 @@ fail: static int vaapi_mpeg4_end_frame(AVCodecContext *avctx) { - MpegEncContext *s = avctx->priv_data; + MPVDecContext *const s = avctx->priv_data; VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private; int ret; @@ -152,7 +152,7 @@ fail: static int vaapi_mpeg4_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { - MpegEncContext *s = avctx->priv_data; + MPVDecContext *const s = avctx->priv_data; VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private; VASliceParameterBufferMPEG4 slice_param; int err; diff --git a/libavcodec/vaapi_vc1.c b/libavcodec/vaapi_vc1.c index 4e9607d9be..3d0903333a 100644 --- a/libavcodec/vaapi_vc1.c +++ b/libavcodec/vaapi_vc1.c @@ -114,7 +114,7 @@ static inline int vc1_has_FORWARDMB_bitplane(const VC1Context *v) /** Reconstruct bitstream PTYPE (7.1.1.4, index into Table-35) */ static int vc1_get_PTYPE(const VC1Context *v) { - const MpegEncContext *s = &v->s; + const MPVDecContext *const s = &v->s; switch (s->pict_type) { case AV_PICTURE_TYPE_I: return 0; case AV_PICTURE_TYPE_P: return v->p_frame_skipped ? 4 : 1; @@ -126,7 +126,7 @@ static int vc1_get_PTYPE(const VC1Context *v) /** Reconstruct bitstream FPTYPE (9.1.1.42, index into Table-105) */ static int vc1_get_FPTYPE(const VC1Context *v) { - const MpegEncContext *s = &v->s; + const MPVDecContext *const s = &v->s; switch (s->pict_type) { case AV_PICTURE_TYPE_I: return 0; case AV_PICTURE_TYPE_P: return 3; @@ -250,7 +250,7 @@ static inline void vc1_pack_bitplanes(uint8_t *bitplane, int n, const uint8_t *f static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size) { const VC1Context *v = avctx->priv_data; - const MpegEncContext *s = &v->s; + const MPVDecContext *const s = &v->s; VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private; VAPictureParameterBufferVC1 pic_param; int err; @@ -447,7 +447,7 @@ fail: static int vaapi_vc1_end_frame(AVCodecContext *avctx) { VC1Context *v = avctx->priv_data; - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private; int ret; @@ -464,7 +464,7 @@ fail: static int vaapi_vc1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { const VC1Context *v = avctx->priv_data; - const MpegEncContext *s = &v->s; + const MPVDecContext *const s = &v->s; VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private; VASliceParameterBufferVC1 slice_param; int mb_height; diff --git a/libavcodec/vc1.h b/libavcodec/vc1.h index 9b25f0872f..25a043af56 100644 --- a/libavcodec/vc1.h +++ b/libavcodec/vc1.h @@ -171,7 +171,7 @@ enum Imode { * Many members are only used for Advanced Profile */ typedef struct VC1Context{ - MpegEncContext s; + MPVMainDecContext s; IntraX8Context x8; H264ChromaContext h264chroma; VC1DSPContext vc1dsp; diff --git a/libavcodec/vc1_block.c b/libavcodec/vc1_block.c index c922efe4c8..61dc4a5a20 100644 --- a/libavcodec/vc1_block.c +++ b/libavcodec/vc1_block.c @@ -58,7 +58,7 @@ static const int block_map[6] = {0, 2, 1, 3, 4, 5}; static inline void init_block_index(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; ff_init_block_index(s); if (v->field_mode && !(v->second_field ^ v->tff)) { s->dest[0] += s->current_picture_ptr->f->linesize[0]; @@ -71,7 +71,7 @@ static inline void init_block_index(VC1Context *v) static void vc1_put_blocks_clamped(VC1Context *v, int put_signed) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; uint8_t *dest; int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6; int fieldtx = 0; @@ -329,14 +329,14 @@ static inline void vc1_b_mc(VC1Context *v, int dmv_x[2], int dmv_y[2], /** Get predicted DC value for I-frames only * prediction dir: left=0, top=1 - * @param s MpegEncContext + * @param s MPVDecContext * @param overlap flag indicating that overlap filtering is used * @param pq integer part of picture quantizer * @param[in] n block index in the current MB * @param dc_val_ptr Pointer to DC predictor * @param dir_ptr Prediction direction for use in AC prediction */ -static inline int vc1_i_pred_dc(MpegEncContext *s, int overlap, int pq, int n, +static inline int vc1_i_pred_dc(MPVDecContext *s, int overlap, int pq, int n, int16_t **dc_val_ptr, int *dir_ptr) { int a, b, c, wrap, pred, scale; @@ -392,7 +392,7 @@ static inline int vc1_i_pred_dc(MpegEncContext *s, int overlap, int pq, int n, /** Get predicted DC value * prediction dir: left=0, top=1 - * @param s MpegEncContext + * @param s MPVDecContext * @param overlap flag indicating that overlap filtering is used * @param pq integer part of picture quantizer * @param[in] n block index in the current MB @@ -401,7 +401,7 @@ static inline int vc1_i_pred_dc(MpegEncContext *s, int overlap, int pq, int n, * @param dc_val_ptr Pointer to DC predictor * @param dir_ptr Prediction direction for use in AC prediction */ -static inline int ff_vc1_pred_dc(MpegEncContext *s, int overlap, int pq, int n, +static inline int ff_vc1_pred_dc(MPVDecContext *s, int overlap, int pq, int n, int a_avail, int c_avail, int16_t **dc_val_ptr, int *dir_ptr) { @@ -472,7 +472,7 @@ static inline int ff_vc1_pred_dc(MpegEncContext *s, int overlap, int pq, int n, * @{ */ -static inline int vc1_coded_block_pred(MpegEncContext * s, int n, +static inline int vc1_coded_block_pred(MPVDecContext * s, int n, uint8_t **coded_block_ptr) { int xy, wrap, pred, a, b, c; @@ -578,8 +578,8 @@ static int vc1_decode_ac_coeff(VC1Context *v, int *last, int *skip, static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n, int coded, int codingset) { + MPVDecContext *const s = &v->s; GetBitContext *gb = &v->s.gb; - MpegEncContext *s = &v->s; int dc_pred_dir = 0; /* Direction of the DC prediction used */ int i; int16_t *dc_val; @@ -716,8 +716,8 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n, static int vc1_decode_i_block_adv(VC1Context *v, int16_t block[64], int n, int coded, int codingset, int mquant) { + MPVDecContext *const s = &v->s; GetBitContext *gb = &v->s.gb; - MpegEncContext *s = &v->s; int dc_pred_dir = 0; /* Direction of the DC prediction used */ int i; int16_t *dc_val = NULL; @@ -907,8 +907,8 @@ static int vc1_decode_i_block_adv(VC1Context *v, int16_t block[64], int n, static int vc1_decode_intra_block(VC1Context *v, int16_t block[64], int n, int coded, int mquant, int codingset) { + MPVDecContext *const s = &v->s; GetBitContext *gb = &v->s.gb; - MpegEncContext *s = &v->s; int dc_pred_dir = 0; /* Direction of the DC prediction used */ int i; int16_t *dc_val = NULL; @@ -1116,7 +1116,7 @@ static int vc1_decode_p_block(VC1Context *v, int16_t block[64], int n, uint8_t *dst, int linesize, int skip_block, int *ttmb_out) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; GetBitContext *gb = &s->gb; int i, j; int subblkpat = 0; @@ -1285,7 +1285,7 @@ static const uint8_t size_table[6] = { 0, 2, 3, 4, 5, 8 }; */ static int vc1_decode_p_mb(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; GetBitContext *gb = &s->gb; int i, j; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; @@ -1517,7 +1517,7 @@ end: static int vc1_decode_p_mb_intfr(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; GetBitContext *gb = &s->gb; int i; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; @@ -1727,7 +1727,7 @@ static int vc1_decode_p_mb_intfr(VC1Context *v) static int vc1_decode_p_mb_intfi(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; GetBitContext *gb = &s->gb; int i; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; @@ -1851,7 +1851,7 @@ static int vc1_decode_p_mb_intfi(VC1Context *v) */ static int vc1_decode_b_mb(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; GetBitContext *gb = &s->gb; int i, j; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; @@ -2009,7 +2009,7 @@ static int vc1_decode_b_mb(VC1Context *v) */ static int vc1_decode_b_mb_intfi(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; GetBitContext *gb = &s->gb; int i, j; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; @@ -2176,7 +2176,7 @@ static int vc1_decode_b_mb_intfi(VC1Context *v) */ static int vc1_decode_b_mb_intfr(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; GetBitContext *gb = &s->gb; int i, j; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; @@ -2526,8 +2526,8 @@ static int vc1_decode_b_mb_intfr(VC1Context *v) */ static void vc1_decode_i_blocks(VC1Context *v) { + MPVDecContext *const s = &v->s; int k, j; - MpegEncContext *s = &v->s; int cbp, val; uint8_t *coded_val; int mb_pos; @@ -2651,8 +2651,8 @@ static void vc1_decode_i_blocks(VC1Context *v) */ static int vc1_decode_i_blocks_adv(VC1Context *v) { + MPVDecContext *const s = &v->s; int k; - MpegEncContext *s = &v->s; int cbp, val; uint8_t *coded_val; int mb_pos; @@ -2794,7 +2794,7 @@ static int vc1_decode_i_blocks_adv(VC1Context *v) static void vc1_decode_p_blocks(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int apply_loop_filter; /* select coding mode used for VLC tables selection */ @@ -2886,7 +2886,7 @@ static void vc1_decode_p_blocks(VC1Context *v) static void vc1_decode_b_blocks(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; /* select coding mode used for VLC tables selection */ switch (v->c_ac_table_index) { @@ -2970,7 +2970,7 @@ static void vc1_decode_b_blocks(VC1Context *v) static void vc1_decode_skip_blocks(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; if (!v->s.last_picture.f->data[0]) return; diff --git a/libavcodec/vc1_loopfilter.c b/libavcodec/vc1_loopfilter.c index 0f990cccef..e5819b1042 100644 --- a/libavcodec/vc1_loopfilter.c +++ b/libavcodec/vc1_loopfilter.c @@ -104,7 +104,7 @@ static av_always_inline void vc1_v_overlap_filter(VC1Context *v, int16_t (*top_b void ff_vc1_i_overlap_filter(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int16_t (*topleft_blk)[64], (*top_blk)[64], (*left_blk)[64], (*cur_blk)[64]; int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; @@ -160,7 +160,7 @@ void ff_vc1_i_overlap_filter(VC1Context *v) void ff_vc1_p_overlap_filter(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int16_t (*topleft_blk)[64], (*top_blk)[64], (*left_blk)[64], (*cur_blk)[64]; int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; @@ -206,7 +206,7 @@ void ff_vc1_p_overlap_filter(VC1Context *v) static av_always_inline void vc1_i_h_loop_filter(VC1Context *v, uint8_t *dest, uint32_t flags, int block_num) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int pq = v->pq; uint8_t *dst; @@ -239,7 +239,7 @@ static av_always_inline void vc1_i_v_loop_filter(VC1Context *v, uint8_t *dest, uint32_t flags, uint8_t fieldtx, int block_num) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int pq = v->pq; uint8_t *dst; @@ -270,7 +270,7 @@ static av_always_inline void vc1_i_v_loop_filter(VC1Context *v, uint8_t *dest, void ff_vc1_i_loop_filter(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; uint8_t *dest, fieldtx; @@ -364,7 +364,7 @@ static av_always_inline void vc1_p_h_loop_filter(VC1Context *v, uint8_t *dest, u uint8_t *is_intra, int16_t (*mv)[2], uint8_t *mv_f, int *ttblk, uint32_t flags, int block_num) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int pq = v->pq; uint32_t left_cbp = cbp[0] >> (block_num * 4), right_cbp; uint8_t left_is_intra, right_is_intra; @@ -417,7 +417,7 @@ static av_always_inline void vc1_p_v_loop_filter(VC1Context *v, uint8_t *dest, u uint8_t *is_intra, int16_t (*mv)[2], uint8_t *mv_f, int *ttblk, uint32_t flags, int block_num) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int pq = v->pq; uint32_t top_cbp = cbp[0] >> (block_num * 4), bottom_cbp; uint8_t top_is_intra, bottom_is_intra; @@ -469,7 +469,7 @@ static av_always_inline void vc1_p_v_loop_filter(VC1Context *v, uint8_t *dest, u void ff_vc1_p_loop_filter(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6; uint8_t *dest; uint32_t *cbp; @@ -802,7 +802,7 @@ void ff_vc1_p_loop_filter(VC1Context *v) static av_always_inline void vc1_p_h_intfr_loop_filter(VC1Context *v, uint8_t *dest, int *ttblk, uint32_t flags, uint8_t fieldtx, int block_num) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int pq = v->pq; int tt; int linesize = block_num > 3 ? s->uvlinesize : s->linesize; @@ -852,7 +852,7 @@ static av_always_inline void vc1_p_h_intfr_loop_filter(VC1Context *v, uint8_t *d static av_always_inline void vc1_p_v_intfr_loop_filter(VC1Context *v, uint8_t *dest, int *ttblk, uint32_t flags, uint8_t fieldtx, int block_num) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int pq = v->pq; int tt; int linesize = block_num > 3 ? s->uvlinesize : s->linesize; @@ -908,7 +908,7 @@ static av_always_inline void vc1_p_v_intfr_loop_filter(VC1Context *v, uint8_t *d void ff_vc1_p_intfr_loop_filter(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; uint8_t *dest; @@ -1112,7 +1112,7 @@ void ff_vc1_p_intfr_loop_filter(VC1Context *v) static av_always_inline void vc1_b_h_intfi_loop_filter(VC1Context *v, uint8_t *dest, uint32_t *cbp, int *ttblk, uint32_t flags, int block_num) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int pq = v->pq; uint8_t *dst; uint32_t block_cbp = cbp[0] >> (block_num * 4); @@ -1144,7 +1144,7 @@ static av_always_inline void vc1_b_h_intfi_loop_filter(VC1Context *v, uint8_t *d static av_always_inline void vc1_b_v_intfi_loop_filter(VC1Context *v, uint8_t *dest, uint32_t *cbp, int *ttblk, uint32_t flags, int block_num) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int pq = v->pq; uint8_t *dst; uint32_t block_cbp = cbp[0] >> (block_num * 4); @@ -1171,7 +1171,7 @@ static av_always_inline void vc1_b_v_intfi_loop_filter(VC1Context *v, uint8_t *d void ff_vc1_b_intfi_loop_filter(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6; uint8_t *dest; uint32_t *cbp; diff --git a/libavcodec/vc1_mc.c b/libavcodec/vc1_mc.c index 1b8d8799b3..e9beb96e6d 100644 --- a/libavcodec/vc1_mc.c +++ b/libavcodec/vc1_mc.c @@ -107,7 +107,7 @@ static const uint8_t popcount4[16] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, static av_always_inline int get_luma_mv(VC1Context *v, int dir, int16_t *tx, int16_t *ty) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int idx = v->mv_f[dir][s->block_index[0] + v->blocks_off] | (v->mv_f[dir][s->block_index[1] + v->blocks_off] << 1) | (v->mv_f[dir][s->block_index[2] + v->blocks_off] << 2) | @@ -139,7 +139,7 @@ static av_always_inline int get_luma_mv(VC1Context *v, int dir, int16_t *tx, int static av_always_inline int get_chroma_mv(VC1Context *v, int dir, int16_t *tx, int16_t *ty) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int idx = !v->mb_type[0][s->block_index[0]] | (!v->mb_type[0][s->block_index[1]] << 1) | (!v->mb_type[0][s->block_index[2]] << 2) | @@ -171,7 +171,7 @@ static av_always_inline int get_chroma_mv(VC1Context *v, int dir, int16_t *tx, i */ void ff_vc1_mc_1mv(VC1Context *v, int dir) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; H264ChromaContext *h264chroma = &v->h264chroma; uint8_t *srcY, *srcU, *srcV; int dxy, mx, my, uvmx, uvmy, src_x, src_y, uvsrc_x, uvsrc_y; @@ -451,7 +451,7 @@ void ff_vc1_mc_1mv(VC1Context *v, int dir) */ void ff_vc1_mc_4mv_luma(VC1Context *v, int n, int dir, int avg) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; uint8_t *srcY; int dxy, mx, my, src_x, src_y; int off; @@ -633,7 +633,7 @@ void ff_vc1_mc_4mv_luma(VC1Context *v, int n, int dir, int avg) */ void ff_vc1_mc_4mv_chroma(VC1Context *v, int dir) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; H264ChromaContext *h264chroma = &v->h264chroma; uint8_t *srcU, *srcV; int uvmx, uvmy, uvsrc_x, uvsrc_y; @@ -838,7 +838,7 @@ void ff_vc1_mc_4mv_chroma(VC1Context *v, int dir) */ void ff_vc1_mc_4mv_chroma4(VC1Context *v, int dir, int dir2, int avg) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; H264ChromaContext *h264chroma = &v->h264chroma; uint8_t *srcU, *srcV; int uvsrc_x, uvsrc_y; @@ -1003,7 +1003,7 @@ void ff_vc1_mc_4mv_chroma4(VC1Context *v, int dir, int dir2, int avg) */ void ff_vc1_interp_mc(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; H264ChromaContext *h264chroma = &v->h264chroma; uint8_t *srcY, *srcU, *srcV; int dxy, mx, my, uvmx, uvmy, src_x, src_y, uvsrc_x, uvsrc_y; diff --git a/libavcodec/vc1_pred.c b/libavcodec/vc1_pred.c index ad2caf6db2..812118c7eb 100644 --- a/libavcodec/vc1_pred.c +++ b/libavcodec/vc1_pred.c @@ -213,7 +213,7 @@ void ff_vc1_pred_mv(VC1Context *v, int n, int dmv_x, int dmv_y, int mv1, int r_x, int r_y, uint8_t* is_intra, int pred_flag, int dir) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int xy, wrap, off = 0; int16_t *A, *B, *C; int px, py; @@ -470,7 +470,7 @@ void ff_vc1_pred_mv(VC1Context *v, int n, int dmv_x, int dmv_y, void ff_vc1_pred_mv_intfr(VC1Context *v, int n, int dmv_x, int dmv_y, int mvn, int r_x, int r_y, int dir) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int xy, wrap, off = 0; int A[2], B[2], C[2]; int px = 0, py = 0; @@ -691,7 +691,7 @@ void ff_vc1_pred_mv_intfr(VC1Context *v, int n, int dmv_x, int dmv_y, void ff_vc1_pred_b_mv(VC1Context *v, int dmv_x[2], int dmv_y[2], int direct, int mvtype) { - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int xy, wrap, off = 0; int16_t *A, *B, *C; int px, py; @@ -892,7 +892,7 @@ void ff_vc1_pred_b_mv_intfi(VC1Context *v, int n, int *dmv_x, int *dmv_y, int mv1, int *pred_flag) { int dir = (v->bmvtype == BMV_TYPE_BACKWARD) ? 1 : 0; - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; if (v->bmvtype == BMV_TYPE_DIRECT) { diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c index 7ed5133cfa..78a3422d18 100644 --- a/libavcodec/vc1dec.c +++ b/libavcodec/vc1dec.c @@ -179,7 +179,7 @@ static void vc1_draw_sprites(VC1Context *v, SpriteData* sd) uint8_t* src_h[2][2]; int xoff[2], xadv[2], yoff[2], yadv[2], alpha; int ysub[2]; - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; for (i = 0; i <= v->two_sprites; i++) { xoff[i] = av_clip(sd->coefs[i][2], 0, v->sprite_width-1 << 16); @@ -271,8 +271,8 @@ static void vc1_draw_sprites(VC1Context *v, SpriteData* sd) static int vc1_decode_sprites(VC1Context *v, GetBitContext* gb) { + MPVDecContext *const s = &v->s; int ret; - MpegEncContext *s = &v->s; AVCodecContext *avctx = s->avctx; SpriteData sd; @@ -304,7 +304,7 @@ static int vc1_decode_sprites(VC1Context *v, GetBitContext* gb) static void vc1_sprite_flush(AVCodecContext *avctx) { VC1Context *v = avctx->priv_data; - MpegEncContext *s = &v->s; + MPVDecContext *const s = &v->s; AVFrame *f = s->current_picture.f; int plane, i; @@ -323,7 +323,7 @@ static void vc1_sprite_flush(AVCodecContext *avctx) av_cold int ff_vc1_decode_init_alloc_tables(VC1Context *v) { - MpegEncContext *s = &v->s; + MPVMainDecContext *const s = &v->s; int i, ret = AVERROR(ENOMEM); int mb_height = FFALIGN(s->mb_height, 2); @@ -422,7 +422,7 @@ av_cold void ff_vc1_init_transposed_scantables(VC1Context *v) static av_cold int vc1_decode_init(AVCodecContext *avctx) { VC1Context *v = avctx->priv_data; - MpegEncContext *s = &v->s; + MPVMainDecContext *const s = &v->s; GetBitContext gb; int ret; @@ -584,7 +584,6 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) } /** Close a VC1/WMV3 decoder - * @warning Initial try at using MpegEncContext stuff */ av_cold int ff_vc1_decode_end(AVCodecContext *avctx) { @@ -625,7 +624,7 @@ static int vc1_decode_frame(AVCodecContext *avctx, void *data, const uint8_t *buf = avpkt->data; int buf_size = avpkt->size, n_slices = 0, i, ret; VC1Context *v = avctx->priv_data; - MpegEncContext *s = &v->s; + MPVMainDecContext *const s = &v->s; AVFrame *pict = data; uint8_t *buf2 = NULL; const uint8_t *buf_start = buf, *buf_start_second_field = NULL; diff --git a/libavcodec/vdpau.c b/libavcodec/vdpau.c index f96ac15e2a..95cd5c3bcd 100644 --- a/libavcodec/vdpau.c +++ b/libavcodec/vdpau.c @@ -366,7 +366,7 @@ int ff_vdpau_common_end_frame(AVCodecContext *avctx, AVFrame *frame, CONFIG_VC1_VDPAU_HWACCEL || CONFIG_WMV3_VDPAU_HWACCEL int ff_vdpau_mpeg_end_frame(AVCodecContext *avctx) { - MpegEncContext *s = avctx->priv_data; + MPVDecContext *const s = avctx->priv_data; Picture *pic = s->current_picture_ptr; struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private; int val; diff --git a/libavcodec/vdpau_mpeg12.c b/libavcodec/vdpau_mpeg12.c index 72220ffb4e..eb1a364470 100644 --- a/libavcodec/vdpau_mpeg12.c +++ b/libavcodec/vdpau_mpeg12.c @@ -32,7 +32,7 @@ static int vdpau_mpeg_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { - MpegEncContext * const s = avctx->priv_data; + MPVDecContext *const s = avctx->priv_data; Picture *pic = s->current_picture_ptr; struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private; VdpPictureInfoMPEG1Or2 *info = &pic_ctx->info.mpeg; @@ -83,7 +83,7 @@ static int vdpau_mpeg_start_frame(AVCodecContext *avctx, static int vdpau_mpeg_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { - MpegEncContext * const s = avctx->priv_data; + MPVDecContext *const s = avctx->priv_data; Picture *pic = s->current_picture_ptr; struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private; int val; diff --git a/libavcodec/vdpau_mpeg4.c b/libavcodec/vdpau_mpeg4.c index 93b25beb1f..51676fe065 100644 --- a/libavcodec/vdpau_mpeg4.c +++ b/libavcodec/vdpau_mpeg4.c @@ -33,7 +33,7 @@ static int vdpau_mpeg4_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { Mpeg4DecContext *ctx = avctx->priv_data; - MpegEncContext * const s = &ctx->m; + MPVDecContext *const s = &ctx->m; Picture *pic = s->current_picture_ptr; struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private; VdpPictureInfoMPEG4Part2 *info = &pic_ctx->info.mpeg4; diff --git a/libavcodec/vdpau_vc1.c b/libavcodec/vdpau_vc1.c index 96c91b58be..e3aa36fbdd 100644 --- a/libavcodec/vdpau_vc1.c +++ b/libavcodec/vdpau_vc1.c @@ -33,7 +33,7 @@ static int vdpau_vc1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { VC1Context * const v = avctx->priv_data; - MpegEncContext * const s = &v->s; + MPVDecContext *const s = &v->s; Picture *pic = s->current_picture_ptr; struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private; VdpPictureInfoVC1 *info = &pic_ctx->info.vc1; @@ -101,7 +101,7 @@ static int vdpau_vc1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { VC1Context * const v = avctx->priv_data; - MpegEncContext * const s = &v->s; + MPVDecContext *const s = &v->s; Picture *pic = s->current_picture_ptr; struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private; int val; diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index 51d4eacfd8..f6d2805dba 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -1091,7 +1091,7 @@ static int videotoolbox_mpeg_decode_slice(AVCodecContext *avctx, static int videotoolbox_mpeg_end_frame(AVCodecContext *avctx) { - MpegEncContext *s = avctx->priv_data; + MPVDecContext *const s = avctx->priv_data; AVFrame *frame = s->current_picture_ptr->f; return ff_videotoolbox_common_end_frame(avctx, frame); diff --git a/libavcodec/wmv2.c b/libavcodec/wmv2.c index 8d1d117dea..29ed71f8aa 100644 --- a/libavcodec/wmv2.c +++ b/libavcodec/wmv2.c @@ -25,7 +25,7 @@ #include "wmv2.h" -av_cold void ff_wmv2_common_init(MpegEncContext *s) +av_cold void ff_wmv2_common_init(MPVMainContext *s) { WMV2Context *const w = s->private_ctx; @@ -47,7 +47,7 @@ av_cold void ff_wmv2_common_init(MpegEncContext *s) s->idsp.idct = NULL; } -void ff_mspel_motion(MpegEncContext *s, uint8_t *dest_y, +void ff_mspel_motion(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, uint8_t **ref_picture, op_pixels_func (*pix_op)[4], int motion_x, int motion_y, int h) diff --git a/libavcodec/wmv2.h b/libavcodec/wmv2.h index 4001093881..07b22644fc 100644 --- a/libavcodec/wmv2.h +++ b/libavcodec/wmv2.h @@ -22,6 +22,7 @@ #define AVCODEC_WMV2_H #include "mpegvideo.h" +#include "mpegvideoenc.h" #include "wmv2dsp.h" #define SKIP_TYPE_NONE 0 @@ -35,24 +36,24 @@ typedef struct WMV2Context { int hshift; } WMV2Context; -void ff_wmv2_common_init(MpegEncContext *s); +void ff_wmv2_common_init(MPVMainContext *s); -int ff_wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64]); -int ff_wmv2_encode_picture_header(MpegEncContext * s, int picture_number); -void ff_wmv2_encode_mb(MpegEncContext * s, int16_t block[6][64], +int ff_wmv2_decode_mb(MPVDecContext *s, int16_t block[6][64]); +int ff_wmv2_encode_picture_header(MPVMainEncContext * s, int picture_number); +void ff_wmv2_encode_mb(MPVEncContext * s, int16_t block[6][64], int motion_x, int motion_y); -int ff_wmv2_decode_picture_header(MpegEncContext * s); -int ff_wmv2_decode_secondary_picture_header(MpegEncContext * s); -void ff_wmv2_add_mb(MpegEncContext *s, int16_t block[6][64], +int ff_wmv2_decode_picture_header(MPVMainDecContext * s); +int ff_wmv2_decode_secondary_picture_header(MPVMainDecContext * s); +void ff_wmv2_add_mb(MPVContext *s, int16_t block[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr); -void ff_mspel_motion(MpegEncContext *s, +void ff_mspel_motion(MPVContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, uint8_t **ref_picture, op_pixels_func (*pix_op)[4], int motion_x, int motion_y, int h); -static av_always_inline int wmv2_get_cbp_table_index(MpegEncContext *s, int cbp_index) +static av_always_inline int wmv2_get_cbp_table_index(MPVContext *s, int cbp_index) { static const uint8_t map[3][3] = { { 0, 2, 1 }, diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c index f9d91f9571..00cb1cf6fc 100644 --- a/libavcodec/wmv2dec.c +++ b/libavcodec/wmv2dec.c @@ -34,7 +34,7 @@ #include "wmv2data.h" typedef struct WMV2DecContext { - MpegEncContext s; + MPVMainDecContext s; WMV2Context common; IntraX8Context x8; int j_type_bit; @@ -57,7 +57,7 @@ typedef struct WMV2DecContext { static void wmv2_add_block(WMV2DecContext *w, int16_t *block1, uint8_t *dst, int stride, int n) { - MpegEncContext *const s = &w->s; + MPVDecContext *const s = &w->s; if (s->block_last_index[n] >= 0) { switch (w->abt_type_table[n]) { @@ -80,7 +80,7 @@ static void wmv2_add_block(WMV2DecContext *w, int16_t *block1, } } -void ff_wmv2_add_mb(MpegEncContext *s, int16_t block1[6][64], +void ff_wmv2_add_mb(MPVDecContext *s, int16_t block1[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr) { WMV2DecContext *const w = (WMV2DecContext *) s; @@ -101,7 +101,7 @@ static int parse_mb_skip(WMV2DecContext *w) { int mb_x, mb_y; int coded_mb_count = 0; - MpegEncContext *const s = &w->s; + MPVDecContext *const s = &w->s; uint32_t *const mb_type = s->current_picture_ptr->mb_type; w->skip_type = get_bits(&s->gb, 2); @@ -164,7 +164,7 @@ static int parse_mb_skip(WMV2DecContext *w) static int decode_ext_header(WMV2DecContext *w) { - MpegEncContext *const s = &w->s; + MPVDecContext *const s = &w->s; GetBitContext gb; int fps; int code; @@ -200,7 +200,7 @@ static int decode_ext_header(WMV2DecContext *w) return 0; } -int ff_wmv2_decode_picture_header(MpegEncContext *s) +int ff_wmv2_decode_picture_header(MPVMainDecContext *s) { WMV2DecContext *const w = (WMV2DecContext *) s; int code; @@ -235,7 +235,7 @@ int ff_wmv2_decode_picture_header(MpegEncContext *s) return 0; } -int ff_wmv2_decode_secondary_picture_header(MpegEncContext *s) +int ff_wmv2_decode_secondary_picture_header(MPVMainDecContext *s) { WMV2DecContext *const w = (WMV2DecContext *) s; @@ -347,7 +347,7 @@ int ff_wmv2_decode_secondary_picture_header(MpegEncContext *s) static inline void wmv2_decode_motion(WMV2DecContext *w, int *mx_ptr, int *my_ptr) { - MpegEncContext *const s = &w->s; + MPVDecContext *const s = &w->s; ff_msmpeg4_decode_motion(s, mx_ptr, my_ptr); @@ -359,7 +359,7 @@ static inline void wmv2_decode_motion(WMV2DecContext *w, int *mx_ptr, int *my_pt static int16_t *wmv2_pred_motion(WMV2DecContext *w, int *px, int *py) { - MpegEncContext *const s = &w->s; + MPVDecContext *const s = &w->s; int xy, wrap, diff, type; int16_t *A, *B, *C, *mot_val; @@ -405,7 +405,7 @@ static int16_t *wmv2_pred_motion(WMV2DecContext *w, int *px, int *py) static inline int wmv2_decode_inter_block(WMV2DecContext *w, int16_t *block, int n, int cbp) { - MpegEncContext *const s = &w->s; + MPVDecContext *const s = &w->s; static const int sub_cbp_table[3] = { 2, 3, 1 }; int sub_cbp, ret; @@ -442,7 +442,7 @@ static inline int wmv2_decode_inter_block(WMV2DecContext *w, int16_t *block, } } -int ff_wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64]) +int ff_wmv2_decode_mb(MPVDecContext *s, int16_t block[6][64]) { /* The following is only allowed because this encoder * does not use slice threading. */ @@ -562,7 +562,7 @@ int ff_wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64]) static av_cold int wmv2_decode_init(AVCodecContext *avctx) { WMV2DecContext *const w = avctx->priv_data; - MpegEncContext *const s = &w->s; + MPVMainDecContext *const s = &w->s; int ret; s->private_ctx = &w->common; diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c index d8481301e1..14f817f2d6 100644 --- a/libavcodec/wmv2enc.c +++ b/libavcodec/wmv2enc.c @@ -43,7 +43,7 @@ typedef struct WMV2EncContext { static int encode_ext_header(WMV2EncContext *w) { - MpegEncContext *const s = &w->msmpeg4.s; + MPVMainEncContext *const s = &w->msmpeg4.s; PutBitContext pb; int code; @@ -70,7 +70,7 @@ static int encode_ext_header(WMV2EncContext *w) static av_cold int wmv2_encode_init(AVCodecContext *avctx) { WMV2EncContext *const w = avctx->priv_data; - MpegEncContext *const s = &w->msmpeg4.s; + MPVMainEncContext *const s = &w->msmpeg4.s; s->private_ctx = &w->common; if (ff_mpv_encode_init(avctx) < 0) @@ -88,7 +88,7 @@ static av_cold int wmv2_encode_init(AVCodecContext *avctx) return 0; } -int ff_wmv2_encode_picture_header(MpegEncContext *s, int picture_number) +int ff_wmv2_encode_picture_header(MPVMainEncContext *s, int picture_number) { WMV2EncContext *const w = (WMV2EncContext *) s; @@ -161,7 +161,7 @@ int ff_wmv2_encode_picture_header(MpegEncContext *s, int picture_number) /* Nearly identical to wmv1 but that is just because we do not use the * useless M$ crap features. It is duplicated here in case someone wants * to add support for these crap features. */ -void ff_wmv2_encode_mb(MpegEncContext *s, int16_t block[6][64], +void ff_wmv2_encode_mb(MPVEncContext *s, int16_t block[6][64], int motion_x, int motion_y) { WMV2EncContext *const w = (WMV2EncContext *) s; diff --git a/libavcodec/x86/me_cmp.asm b/libavcodec/x86/me_cmp.asm index ad06d485ab..08ffc10f79 100644 --- a/libavcodec/x86/me_cmp.asm +++ b/libavcodec/x86/me_cmp.asm @@ -214,7 +214,7 @@ hadamard8x8_diff %+ SUFFIX: hadamard8_16_wrapper %1, 3 %elif cpuflag(mmx) ALIGN 16 -; int ff_hadamard8_diff_ ## cpu(MpegEncContext *s, uint8_t *src1, +; int ff_hadamard8_diff_ ## cpu(MPVEncContext *s, uint8_t *src1, ; uint8_t *src2, ptrdiff_t stride, int h) ; r0 = void *s = unused, int h = unused (always 8) ; note how r1, r2 and r3 are not clobbered in this function, so 16x16 @@ -279,7 +279,7 @@ INIT_XMM ssse3 %define ABS_SUM_8x8 ABS_SUM_8x8_64 HADAMARD8_DIFF 9 -; int ff_sse*_*(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +; int ff_sse*_*(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ; ptrdiff_t line_size, int h) %macro SUM_SQUARED_ERRORS 1 @@ -471,7 +471,7 @@ HF_NOISE 8 HF_NOISE 16 ;--------------------------------------------------------------------------------------- -;int ff_sad_(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); +;int ff_sad_(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); ;--------------------------------------------------------------------------------------- ;%1 = 8/16 %macro SAD 1 @@ -526,7 +526,7 @@ INIT_XMM sse2 SAD 16 ;------------------------------------------------------------------------------------------ -;int ff_sad_x2_(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); +;int ff_sad_x2_(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); ;------------------------------------------------------------------------------------------ ;%1 = 8/16 %macro SAD_X2 1 @@ -603,7 +603,7 @@ INIT_XMM sse2 SAD_X2 16 ;------------------------------------------------------------------------------------------ -;int ff_sad_y2_(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); +;int ff_sad_y2_(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); ;------------------------------------------------------------------------------------------ ;%1 = 8/16 %macro SAD_Y2 1 @@ -673,7 +673,7 @@ INIT_XMM sse2 SAD_Y2 16 ;------------------------------------------------------------------------------------------- -;int ff_sad_approx_xy2_(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); +;int ff_sad_approx_xy2_(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); ;------------------------------------------------------------------------------------------- ;%1 = 8/16 %macro SAD_APPROX_XY2 1 @@ -774,7 +774,7 @@ INIT_XMM sse2 SAD_APPROX_XY2 16 ;-------------------------------------------------------------------- -;int ff_vsad_intra(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +;int ff_vsad_intra(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ; ptrdiff_t line_size, int h); ;-------------------------------------------------------------------- ; %1 = 8/16 @@ -835,7 +835,7 @@ INIT_XMM sse2 VSAD_INTRA 16 ;--------------------------------------------------------------------- -;int ff_vsad_approx(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +;int ff_vsad_approx(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ; ptrdiff_t line_size, int h); ;--------------------------------------------------------------------- ; %1 = 8/16 diff --git a/libavcodec/x86/me_cmp_init.c b/libavcodec/x86/me_cmp_init.c index 9af911bb88..f8709d5f57 100644 --- a/libavcodec/x86/me_cmp_init.c +++ b/libavcodec/x86/me_cmp_init.c @@ -28,61 +28,61 @@ #include "libavutil/x86/asm.h" #include "libavutil/x86/cpu.h" #include "libavcodec/me_cmp.h" -#include "libavcodec/mpegvideo.h" +#include "libavcodec/mpegvideoenc.h" int ff_sum_abs_dctelem_mmx(int16_t *block); int ff_sum_abs_dctelem_mmxext(int16_t *block); int ff_sum_abs_dctelem_sse2(int16_t *block); int ff_sum_abs_dctelem_ssse3(int16_t *block); -int ff_sse8_mmx(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sse8_mmx(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sse16_mmx(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sse16_mmx(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sse16_sse2(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sse16_sse2(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); int ff_hf_noise8_mmx(uint8_t *pix1, ptrdiff_t stride, int h); int ff_hf_noise16_mmx(uint8_t *pix1, ptrdiff_t stride, int h); -int ff_sad8_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad8_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sad16_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad16_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sad16_sse2(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad16_sse2(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sad8_x2_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad8_x2_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sad16_x2_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad16_x2_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sad16_x2_sse2(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad16_x2_sse2(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sad8_y2_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad8_y2_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sad16_y2_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad16_y2_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sad16_y2_sse2(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad16_y2_sse2(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sad8_approx_xy2_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad8_approx_xy2_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sad16_approx_xy2_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad16_approx_xy2_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_sad16_approx_xy2_sse2(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_sad16_approx_xy2_sse2(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_vsad_intra8_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_vsad_intra8_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_vsad_intra16_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_vsad_intra16_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_vsad_intra16_sse2(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_vsad_intra16_sse2(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_vsad8_approx_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_vsad8_approx_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_vsad16_approx_mmxext(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_vsad16_approx_mmxext(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); -int ff_vsad16_approx_sse2(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +int ff_vsad16_approx_sse2(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h); #define hadamard_func(cpu) \ - int ff_hadamard8_diff_ ## cpu(MpegEncContext *s, uint8_t *src1, \ + int ff_hadamard8_diff_ ## cpu(MPVEncContext *s, uint8_t *src1, \ uint8_t *src2, ptrdiff_t stride, int h); \ - int ff_hadamard8_diff16_ ## cpu(MpegEncContext *s, uint8_t *src1, \ + int ff_hadamard8_diff16_ ## cpu(MPVEncContext *s, uint8_t *src1, \ uint8_t *src2, ptrdiff_t stride, int h); hadamard_func(mmx) @@ -91,7 +91,7 @@ hadamard_func(sse2) hadamard_func(ssse3) #if HAVE_X86ASM -static int nsse16_mmx(MpegEncContext *c, uint8_t *pix1, uint8_t *pix2, +static int nsse16_mmx(MPVEncContext *c, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int score1, score2; @@ -109,7 +109,7 @@ static int nsse16_mmx(MpegEncContext *c, uint8_t *pix1, uint8_t *pix2, return score1 + FFABS(score2) * 8; } -static int nsse8_mmx(MpegEncContext *c, uint8_t *pix1, uint8_t *pix2, +static int nsse8_mmx(MPVEncContext *c, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int score1 = ff_sse8_mmx(c, pix1, pix2, stride, h); @@ -126,7 +126,7 @@ static int nsse8_mmx(MpegEncContext *c, uint8_t *pix1, uint8_t *pix2, #if HAVE_INLINE_ASM -static int vsad_intra16_mmx(MpegEncContext *v, uint8_t *pix, uint8_t *dummy, +static int vsad_intra16_mmx(MPVEncContext *v, uint8_t *pix, uint8_t *dummy, ptrdiff_t stride, int h) { int tmp; @@ -190,7 +190,7 @@ static int vsad_intra16_mmx(MpegEncContext *v, uint8_t *pix, uint8_t *dummy, } #undef SUM -static int vsad16_mmx(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, +static int vsad16_mmx(MPVEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t stride, int h) { int tmp; @@ -434,7 +434,7 @@ static inline void sad8_y2a_mmx(uint8_t *blk1, uint8_t *blk2, } #define PIX_SAD(suf) \ -static int sad8_ ## suf(MpegEncContext *v, uint8_t *blk2, \ +static int sad8_ ## suf(MPVEncContext *v, uint8_t *blk2, \ uint8_t *blk1, ptrdiff_t stride, int h) \ { \ av_assert2(h == 8); \ @@ -448,7 +448,7 @@ static int sad8_ ## suf(MpegEncContext *v, uint8_t *blk2, \ return sum_ ## suf(); \ } \ \ -static int sad8_x2_ ## suf(MpegEncContext *v, uint8_t *blk2, \ +static int sad8_x2_ ## suf(MPVEncContext *v, uint8_t *blk2, \ uint8_t *blk1, ptrdiff_t stride, int h) \ { \ av_assert2(h == 8); \ @@ -463,7 +463,7 @@ static int sad8_x2_ ## suf(MpegEncContext *v, uint8_t *blk2, \ return sum_ ## suf(); \ } \ \ -static int sad8_y2_ ## suf(MpegEncContext *v, uint8_t *blk2, \ +static int sad8_y2_ ## suf(MPVEncContext *v, uint8_t *blk2, \ uint8_t *blk1, ptrdiff_t stride, int h) \ { \ av_assert2(h == 8); \ @@ -478,7 +478,7 @@ static int sad8_y2_ ## suf(MpegEncContext *v, uint8_t *blk2, \ return sum_ ## suf(); \ } \ \ -static int sad8_xy2_ ## suf(MpegEncContext *v, uint8_t *blk2, \ +static int sad8_xy2_ ## suf(MPVEncContext *v, uint8_t *blk2, \ uint8_t *blk1, ptrdiff_t stride, int h) \ { \ av_assert2(h == 8); \ @@ -492,7 +492,7 @@ static int sad8_xy2_ ## suf(MpegEncContext *v, uint8_t *blk2, \ return sum_ ## suf(); \ } \ \ -static int sad16_ ## suf(MpegEncContext *v, uint8_t *blk2, \ +static int sad16_ ## suf(MPVEncContext *v, uint8_t *blk2, \ uint8_t *blk1, ptrdiff_t stride, int h) \ { \ __asm__ volatile ( \ @@ -506,7 +506,7 @@ static int sad16_ ## suf(MpegEncContext *v, uint8_t *blk2, \ return sum_ ## suf(); \ } \ \ -static int sad16_x2_ ## suf(MpegEncContext *v, uint8_t *blk2, \ +static int sad16_x2_ ## suf(MPVEncContext *v, uint8_t *blk2, \ uint8_t *blk1, ptrdiff_t stride, int h) \ { \ __asm__ volatile ( \ @@ -521,7 +521,7 @@ static int sad16_x2_ ## suf(MpegEncContext *v, uint8_t *blk2, \ return sum_ ## suf(); \ } \ \ -static int sad16_y2_ ## suf(MpegEncContext *v, uint8_t *blk2, \ +static int sad16_y2_ ## suf(MPVEncContext *v, uint8_t *blk2, \ uint8_t *blk1, ptrdiff_t stride, int h) \ { \ __asm__ volatile ( \ @@ -536,7 +536,7 @@ static int sad16_y2_ ## suf(MpegEncContext *v, uint8_t *blk2, \ return sum_ ## suf(); \ } \ \ -static int sad16_xy2_ ## suf(MpegEncContext *v, uint8_t *blk2, \ +static int sad16_xy2_ ## suf(MPVEncContext *v, uint8_t *blk2, \ uint8_t *blk1, ptrdiff_t stride, int h) \ { \ __asm__ volatile ( \ diff --git a/libavcodec/x86/mpegvideo.c b/libavcodec/x86/mpegvideo.c index 73967cafda..bfd464704b 100644 --- a/libavcodec/x86/mpegvideo.c +++ b/libavcodec/x86/mpegvideo.c @@ -29,7 +29,7 @@ #if HAVE_MMX_INLINE -static void dct_unquantize_h263_intra_mmx(MpegEncContext *s, +static void dct_unquantize_h263_intra_mmx(MPVContext *s, int16_t *block, int n, int qscale) { x86_reg level, qmul, qadd, nCoeffs; @@ -104,7 +104,7 @@ __asm__ volatile( } -static void dct_unquantize_h263_inter_mmx(MpegEncContext *s, +static void dct_unquantize_h263_inter_mmx(MPVContext *s, int16_t *block, int n, int qscale) { x86_reg qmul, qadd, nCoeffs; @@ -165,7 +165,7 @@ __asm__ volatile( ); } -static void dct_unquantize_mpeg1_intra_mmx(MpegEncContext *s, +static void dct_unquantize_mpeg1_intra_mmx(MPVContext *s, int16_t *block, int n, int qscale) { x86_reg nCoeffs; @@ -234,7 +234,7 @@ __asm__ volatile( block[0]= block0; } -static void dct_unquantize_mpeg1_inter_mmx(MpegEncContext *s, +static void dct_unquantize_mpeg1_inter_mmx(MPVContext *s, int16_t *block, int n, int qscale) { x86_reg nCoeffs; @@ -300,7 +300,7 @@ __asm__ volatile( ); } -static void dct_unquantize_mpeg2_intra_mmx(MpegEncContext *s, +static void dct_unquantize_mpeg2_intra_mmx(MPVContext *s, int16_t *block, int n, int qscale) { x86_reg nCoeffs; @@ -369,7 +369,7 @@ __asm__ volatile( //Note, we do not do mismatch control for intra as errors cannot accumulate } -static void dct_unquantize_mpeg2_inter_mmx(MpegEncContext *s, +static void dct_unquantize_mpeg2_inter_mmx(MPVContext *s, int16_t *block, int n, int qscale) { x86_reg nCoeffs; @@ -451,7 +451,7 @@ __asm__ volatile( #endif /* HAVE_MMX_INLINE */ -av_cold void ff_mpv_common_init_x86(MpegEncContext *s) +av_cold void ff_mpv_common_init_x86(MPVMainContext *s) { #if HAVE_MMX_INLINE int cpu_flags = av_get_cpu_flags(); diff --git a/libavcodec/x86/mpegvideoenc.c b/libavcodec/x86/mpegvideoenc.c index 3691cce26c..7c0cf27e30 100644 --- a/libavcodec/x86/mpegvideoenc.c +++ b/libavcodec/x86/mpegvideoenc.c @@ -97,7 +97,8 @@ DECLARE_ALIGNED(16, static const uint16_t, inv_zigzag_direct16)[64] = { #if HAVE_INLINE_ASM #if HAVE_MMX_INLINE -static void denoise_dct_mmx(MpegEncContext *s, int16_t *block){ +static void denoise_dct_mmx(MPVEncContext *s, int16_t *block) +{ const int intra= s->mb_intra; int *sum= s->dct_error_sum[intra]; uint16_t *offset= s->dct_offset[intra]; @@ -153,7 +154,8 @@ static void denoise_dct_mmx(MpegEncContext *s, int16_t *block){ #endif /* HAVE_MMX_INLINE */ #if HAVE_SSE2_INLINE -static void denoise_dct_sse2(MpegEncContext *s, int16_t *block){ +static void denoise_dct_sse2(MPVEncContext *s, int16_t *block) +{ const int intra= s->mb_intra; int *sum= s->dct_error_sum[intra]; uint16_t *offset= s->dct_offset[intra]; @@ -211,7 +213,7 @@ static void denoise_dct_sse2(MpegEncContext *s, int16_t *block){ #endif /* HAVE_SSE2_INLINE */ #endif /* HAVE_INLINE_ASM */ -av_cold void ff_dct_encode_init_x86(MpegEncContext *s) +av_cold void ff_dct_encode_init_x86(MPVEncContext *s) { const int dct_algo = s->avctx->dct_algo; diff --git a/libavcodec/x86/mpegvideoenc_template.c b/libavcodec/x86/mpegvideoenc_template.c index 30c06a6b2c..19a0d3ac7e 100644 --- a/libavcodec/x86/mpegvideoenc_template.c +++ b/libavcodec/x86/mpegvideoenc_template.c @@ -100,7 +100,7 @@ "psubw "a", "b" \n\t" // out=((ABS(block[i])*qmat[0] - bias[0]*qmat[0])>>16)*sign(block[i]) #endif -static int RENAME(dct_quantize)(MpegEncContext *s, +static int RENAME(dct_quantize)(MPVEncContext *s, int16_t *block, int n, int qscale, int *overflow) { diff --git a/libavcodec/xvmc_internal.h b/libavcodec/xvmc_internal.h index d365ef0266..ec9efdc471 100644 --- a/libavcodec/xvmc_internal.h +++ b/libavcodec/xvmc_internal.h @@ -21,11 +21,9 @@ #ifndef AVCODEC_XVMC_INTERNAL_H #define AVCODEC_XVMC_INTERNAL_H -#include "avcodec.h" #include "mpegvideo.h" -#include "version.h" -void ff_xvmc_init_block(MpegEncContext *s); -void ff_xvmc_pack_pblocks(MpegEncContext *s, int cbp); +void ff_xvmc_init_block(MPVDecContext *s); +void ff_xvmc_pack_pblocks(MPVDecContext *s, int cbp); #endif /* AVCODEC_XVMC_INTERNAL_H */ From patchwork Sun Jan 30 06:27:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33917 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770670iov; Sat, 29 Jan 2022 22:30:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJzYNG/zZ1WUuD9nsQ5QdIt6QJNoPPwylZfWaOynwul3S+6G22CdxghTXzngkT7XDkv5tAgC X-Received: by 2002:a05:6402:2066:: with SMTP id bd6mr15539255edb.364.1643524240272; Sat, 29 Jan 2022 22:30:40 -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 z22si6909040edd.349.2022.01.29.22.30.39; Sat, 29 Jan 2022 22:30:40 -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=lOP2ld82; 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 3A75568B17E; Sun, 30 Jan 2022 08:28:40 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2058.outbound.protection.outlook.com [40.92.90.58]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B74BF68B151 for ; Sun, 30 Jan 2022 08:28:38 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=U2ACsylHwrZx9yKZZRZKDp2JoOIPayizClNpY/7FfMaavjCet/L0UQhgpYltg2ZU5+qEAUBDQjd2hJym9tXRvL/LC6N+11sCYN6CHoSHoRLsOkGQr3S0XzY98+xAqJPFtmyugNRufjYO67azUNmMIX5SjWiO4aCRoqZYTs0EjFiqHg67433WlTvNucnXrLP9YvSiowsjytlH0Z51peCTdCWu3n6jaZfWki93G8M0V4r/dpOUb2rrTU+Th/Pxt7NwCmhKBBld50l+d9dUbIUtBPad/Nc4kST+LvjJHREI75U04Sa7j66vf1CfP7gPDQim9BCLK2LQ4JyUFsddarzdiw== 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=Dmv73b1+VxoXS1HF5a2+6VZQXLBEEXbWtjrkx5Xsnug=; b=UNUDExul1leyLfDU9QMOVsodPu5QCbnZeSAgv+jIw6pMgtxy2+mFtPFlsVXbPpv9yMsp6QrP1thg7/qeOz0mzGZd1MlDUHDFNc9xXIZKA7gw0al9Bs5sL7P5lBIT9KrMQ6Ft0/VlgcmHoIGZ3FLL91zJ4oZGlcS1kSkjcNWKVWYR/BHwOiibBrLahSM1ZKTo0vb46hnzeQLxsx4bPHAPq0xIq5JQoX9lrncTbdkouQ6OBL6EU1SJNlLRXkI+gQN+pNwkzO6xGNQkkxRGZOAR+1gnaeiJyXQXdELDCiSerulpiFn9zj5iJNffyM0I6YE/7EEvouZ1cfHyk1VvOzrraw== 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=Dmv73b1+VxoXS1HF5a2+6VZQXLBEEXbWtjrkx5Xsnug=; b=lOP2ld82XVIiY/KmlcQkl3rb/0GQGRYPU+8iZWhzRGiijOiAvWDsSdMWPdZH3Y8e7FSXNyFiOTNCCKG9SWX/Royt//bN7pJ+aTAXGRdLkHYEohEWmUEJY0uaFwJpoegoZ047r30xMeFcTrQCKDZ134W9/2otoj26vHt+C4o/YjOVonDlLlLNSJ6+OH0L2iMOxNems1wNQL/ktEynyCNMsT4FYvTPlrEu9aancDiBOqbBDfxi09+Ez9IGlG/95tg1NfjSQo25DrAyiJ9wUaRJrkQNjp45ZEHpQ1Xb6RAB6MsB5z+bfID0Yb2zTNoOvUQjp/SZUGPO5Q1l5ZvC4f4H2w== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:37 +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:28:37 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:25 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [qZ5bRqeYU8kZs76SHyjMfT43MVkAe8xR] 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-16-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 20d92f76-1f52-48ad-7037-08d9e3b9bfcd X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NxtDfP43+MwC2J+9MTivQoVocQLcz9RJB4tFiNQgvg69Y6MJmqysA6eO9tT8xshTNIJJA/ijAt1iKQac8VjvjMYbybSvAqbSVzUdM6vpvNc2QASqslyFDRPApxwktNqVYHCAFm/Te2cwqeXF5VeHO1yC7i+o64AOxoC4KGcYn6A9YFlAKmNNL8vKgsyOsapCh5SGKqw3WKU9lkrui1SUbEQVZSMkLtjP0kuyHFGSIoyotO53+o9bagjEdjCc9koPxMMQDlbk7b3ZQ81foSGjsDrCCR5ic06HrwLBx2PKDhgcD0hBwbbWuV0F0DMJWJiUvkXTct9ZfLNnZ8is3GaE4yYrbAW4YE+e67nHG4mqr4/KTNulrfKrxhhtKeRSlaEA7PS5w+w6WafF9ipYSy0ib8x10rUuvo/HGrS05dpnylBzozrFPgaqJSz9g4pBC8Tol1dB17jQptgpytPO5o8eH1V226cJhPWtCXT4FrewBzDBpvycwCh80dKjaoedgvteTMUvNDribLr+RkBf6kB6euZ6R2NH8U6UIEFBRJ/jtkEg1Io1oO15rphkiTlCyFDI X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: DLSAq4vwPlKA5AQB9yg+NxvY/plX7ep+du1nXvWnOAa43YSymsEoSQGAKrAEiVNVxcMGmtern6haueCF12t4En027iA0xQ7KArGAbCS4HLv9o/8j9lqyALrxfGdvVOZqAvr/ujhFM55p/qy4tRt5qdzqeexgqUbGu8jMdnQ7bYjnUrxV7D3eZSeX/7iX7vcQBUDyRuYS1R/F4rLKzEmLZsUyezpJtXhQ2IyETRUOtoUNZZdhW58UdwebEnGDPJsMuTfG2OExI7BSDcbHe1XGeZgi8Shsl24tdlocfIJBJ0GWima0Vvl3RM3jUf6LzVLsMchk1Xw4UGKhoh2npVu50C44Kf4YaP/5pVopODDOXdbuCz0nbTZQ3mun6Yjn2S1smVWpHeBono5WwgUWNjEYv2FE0v4kNC5e/l8p6xa69jxPMeZtR/hFfzh7/bBSXPjvdGZTBXFTbLn3f+5SAEcNlZhuSRCW0E95sr5cv8FBztCXopT/9RL0XWPQwI5/JyTUrBxjkHjiaDn+odmH4HzLnFO02jE9tuR6ISUkHqfibz3yl4fFC1HV0qgR9xQ00e+7G5WoCCjVfNdupzV9raalUK7l4kYATjT51cZWfGZfl1Fv7YcBdyULU/VQXPQMDbHl77u0ITTDh0v9f7f1fFn/VfqodICUBZzPtvaylKLs4CSuW713EWzNlMSgKv8QPMV1e8GPYODiaUO/5JFKiaUB1TZK5SYvdUvEfeMy8w776SoNUX7nC5yS2KOl3C3DIrnuFMbvzmT+zzTxwkS/Y7sGVLRlmsCbPW5xe5bZ6+vrSJv3dW1cvDtVrpvLbtWlnlabFBtHiey48dDkoueSr4NoafXcKR4OK5GcuXZvDlWq3CCZXQS45egBVT98h6Xbwi4UwPA3wYZ0cvU9Lx+bE3Uj+9zeJEcmXQ+LuYcpQHBakOmPdlEaWHFc+GqJ/FCYDZuTmoQ7K7xkc3ub3NH80Pmipw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 20d92f76-1f52-48ad-7037-08d9e3b9bfcd 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:28:37.6939 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 17/41] avcodec/mpegvideo_enc: Don't find encoder by ID 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: niljGSWOn/WK mpegvideo-based encoders supporting bframes implement this by opening encoders of their own to test how long the chains of bframes are supposed to be. The needed AVCodec was obtained via avcodec_find_encoder(). This is complicated, as the current encoder can be directly obtained. And it also is not guaranteed that one actually gets the current encoder or not another encoder for the same codec ID (the latter does not seem to be the case now). Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_enc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 02efc9c2e9..f21febd4db 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -1216,7 +1216,6 @@ static int encode_frame(AVCodecContext *c, AVFrame *frame, AVPacket *pkt) static int estimate_best_b_count(MPVMainEncContext *s) { - const AVCodec *codec = avcodec_find_encoder(s->avctx->codec_id); AVPacket *pkt; const int scale = s->brd_scale; int width = s->width >> scale; @@ -1300,7 +1299,7 @@ static int estimate_best_b_count(MPVMainEncContext *s) c->time_base = s->avctx->time_base; c->max_b_frames = s->max_b_frames; - ret = avcodec_open2(c, codec, NULL); + ret = avcodec_open2(c, s->avctx->codec, NULL); if (ret < 0) goto fail; From patchwork Sun Jan 30 06:27:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33919 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770849iov; Sat, 29 Jan 2022 22:31:02 -0800 (PST) X-Google-Smtp-Source: ABdhPJztOWOl7lEg4Rb5QLaq3ZJRJVu+MqaM9BPgaScO4UQKVGft6C+ATpHkBsqD3nNUDGt9T5Pc X-Received: by 2002:a05:6402:270a:: with SMTP id y10mr15167721edd.413.1643524262327; Sat, 29 Jan 2022 22:31:02 -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 g4si6617308ejt.919.2022.01.29.22.31.01; Sat, 29 Jan 2022 22:31:02 -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=WRamSmTR; 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 7310B68B1B9; Sun, 30 Jan 2022 08:28:45 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2051.outbound.protection.outlook.com [40.92.90.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9591168B1F7 for ; Sun, 30 Jan 2022 08:28:42 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=E+C4zvQstwUwkR9gR86WWxAYpzuB1t8RdUwXb2K3dxC47e9b4IcHtgClvmYZ2qT2LeajSDvsT8FGRClnQs1oYK+Px43y6X965zQivrrzCMmivW8OmRpgYwH0/04sx0nqxJ+HE4OE8gi1oCcOVsaeK/xCNsbnDsBu/EckyT2OZjw+RvHzvVDCuG9Med5iSmPNAaEVDY63s4D1lcMksqajacn+LwPMWY+j8DNKOsNCSxnY1vsRPsrukzEq1B8tI5+OFBGq9S/EpGIqrSN4OhbcdLtJNxknbMYWo8cbySG3yi9B5lOzMmo07/GDYENFb704KoCoZxCr/VoiT1tMwKSjDw== 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=Al8eYbTHTCZj3dhv7ZpixeCJJ68nRgWTvS4/LRoD8bg=; b=UwPqmQinTFpXm87DdUyWNkMLiAyxZWEgp2kD+xoGBmm2Y57mCHEhhfNPsoxXeWlGW5tNx+nHgr7VRy+Z9h1kYoL0Ccvh5y6jSVgUz4M66iuO4WIYKx7DVfUsftKq0E7rLjXFEAzzDGLZ0ovOsTeS31Nh2EC2nY0DZPZcJS/M19BoHHGP02Ln/xLsJacg1s89IMj61k+TGYGvd0e7PaAXIFTi3TI+ktrHqBIy+rIznKeF2vGnCRHccve1WO+Zpz7HWrCUxhsrObBYuuivAN5jlBT2muS3y1tjAgbUT0f1axQDCPSUJN4eSFtJez0M70ba9RietjL2ZIjhsgKGSiGAxg== 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=Al8eYbTHTCZj3dhv7ZpixeCJJ68nRgWTvS4/LRoD8bg=; b=WRamSmTRdxLE3grdv5USFRg23+ExvRoyAKFl4K8hJ2LJn8+w3IMvRODdYZCuDjxAGlIxTz/pZRi8mIE/Dypbli4wpFvQDE4yS30zuH8udVOFrK4D+iu+qXuqti+D4t0mrc4CTovRIn97e0z8mQDoWtnADNoz7k68bfnrJdbwFRQXVQMJha/BprVr9RpsrADb/oNeFTnHUashlzKxWf0kxLbABKwsbIPqLGuPcEowZ1aB46kTq7iQoyzngh5xICd1Y97mTIs8mvhzWTuSZB6nz3dD7oeRxATPu2+SqvxPVy52OfOqZoonboSmd1punGvmWnJRi6KOLnNmu7pbaCiz9g== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:39 +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:28:39 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:26 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [I8r7RuN2NNHh+HFFUAiXJs08pO7+QnaW] 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-17-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bd5f2d02-eb09-4d07-e5bc-08d9e3b9c0af X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EqwR6D5Tb6kIZLzzUIW435vP494yLh04OExuLWiBjmr2FMMmCq8HJOCIFeG89iu8HIHAOmads+lMuu8nCwVgsDSm5k1Lt4xSpVHFsURpFBEiaOjEduCl6Ifi+twGBLWjOke78lU1O+ncJD1Y2PUYWFo6TN/Kzjo/vIXE0l0nvDZx0zfduaQDZYY7xaHaGbLmTUGNJVCVtWZfziNd77nAEJps/OFrkJtZ+16ZYqU6PVt9QQGJ0qOgA9IZ5pQZ0vgmTBiT5291hv44OGDOGptKJkRWd+ugPaOBv24O1vsff0s9Ww3y7Lr3iYy7lBwTziyUOu7wFluTPfFAWP7HPx3SveVHWqZLplmOgC0T4qVsMqoJcFLdVdHa0tUcIzDFootOqeO0PngO+kyDT5ONYAaW73C4byW2LElAZCAYmr6y/TP3rLH80f9cnqBm4CPgrLP2BzvBlacJlcJVyvT/QIWZTfvmTOKcouXuy/EuRYFhE6KrWTGHy+oj+GiD+7RruUywaJFYHRsfULoVa7BwbBtQSFwR3BmJxeETZN8zxQt0qw4= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +oLzmwvnMB3xbjLKHZDDtzcg/NBSn0vjqExHx9KCqjKZGNBT9YoCuKsbP0GPACpe5cJVpYEJZG1YB37YLckPJdqNx5MRB80BFC+YR5H/mjp3v2d6WSj4LbSDxTrhPxPum11biNnl8EVDKvEp+UexwcxJWHgKroYm6nlNHOfdKerAW+fpZxcITc/wxoNxB6kIAdNqi3kxXjsHdISxyIwkAS8ZrmZ+WiMXswNYuJIXFeApyajHl2pBT/GxX0TCsHYetD4U2zQGLXteclPOcCGbBhpdpgrEBfPHyC/9B+leDTY0D+5Schyj0MIilQSJZIPhVXFMgWsjvKasmeDD6vMBRFUACs0b15x7hBLmCTV3I4BzE42uLwZGQiqiq+94K3fl70dhkVVgdFrpA+zo9DTrzMBroQL5MgOVPOZ8PSANOjCiB5z7aYTY7HiC/5lhobNzymSPoHvkRBo5xT++8iG+c2srVfDTCSjKBOYbgIgqci/ODwJKlN980Izq3B/17YbXiC/077OeGs4cuyGWZjASwwEq/cQM8QeVjtArD8lHeVvw4slMJ4N+4mI92otXQQrnUWmw3Ewz17gCh64XW1uMb2pRmpBr4beluOwc9cmXcmHEBUDhDHT0tn9becAfcHwY07aR2HzSGIhaoi2VcBU721gPhVOi+XJIrF7VG3K4EqpH2nke7Tur9lzxebK0RmugRlV2UwAzi/vN8Ct/5Jbbe10IjzqXP4zS0YAxFEH7RQSncV9qjFKfmrhWyq6+h5uJSq53Tp3ZaGxsn0pfgEv+usMsL/bE1pWykqnpWk+iZNV1sOs74T9E2VZVUP7FHl6InOqS9HEYSxJ3RIhAdiydSRtCaNKSM+X4PcwuKEpmZzfAKgVDF0HyBkgMj1/A/C3NZImzjVpQXtO4WOSOlLkDxmcjTUrmOgoUFrzIBSz+bmYo1W0Yqg/a5aaFXovYix6azkHEohiGP66ccYgSWVuvjg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bd5f2d02-eb09-4d07-e5bc-08d9e3b9c0af 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:28:39.5232 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 18/41] avcodec/mpegvideoenc: Add proper 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: Zi9E/3uKApBl This is in preparation for moving fields only used by the main encoder thread from MPVContext to MPVMainEncContext. Signed-off-by: Andreas Rheinhardt --- libavcodec/dnxhdenc.c | 302 +++++++++++++++++++------------------ libavcodec/flvenc.c | 3 +- libavcodec/h261enc.c | 15 +- libavcodec/ituh263enc.c | 13 +- libavcodec/mjpegenc.c | 24 +-- libavcodec/mpeg12enc.c | 23 +-- libavcodec/mpeg4videoenc.c | 35 +++-- libavcodec/mpegvideo_enc.c | 135 +++++++++-------- libavcodec/mpegvideoenc.h | 7 +- libavcodec/msmpeg4enc.c | 12 +- libavcodec/ratecontrol.c | 59 +++++--- libavcodec/ratecontrol.h | 2 - libavcodec/rv10enc.c | 3 +- libavcodec/rv20enc.c | 3 +- libavcodec/snow.c | 11 +- libavcodec/snowenc.c | 170 +++++++++++---------- libavcodec/speedhqenc.c | 8 +- libavcodec/svq1enc.c | 159 +++++++++---------- libavcodec/wmv2enc.c | 12 +- 19 files changed, 539 insertions(+), 457 deletions(-) diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c index 74989276b9..9ad95ac20a 100644 --- a/libavcodec/dnxhdenc.c +++ b/libavcodec/dnxhdenc.c @@ -267,30 +267,31 @@ static av_cold int dnxhd_init_qmat(DNXHDEncContext *ctx, int lbias, int cbias) int qscale, i; const uint8_t *luma_weight_table = ctx->cid_table->luma_weight; const uint8_t *chroma_weight_table = ctx->cid_table->chroma_weight; + MPVEncContext *const s = &ctx->m.common; - if (!FF_ALLOCZ_TYPED_ARRAY(ctx->qmatrix_l, ctx->m.avctx->qmax + 1) || - !FF_ALLOCZ_TYPED_ARRAY(ctx->qmatrix_c, ctx->m.avctx->qmax + 1) || - !FF_ALLOCZ_TYPED_ARRAY(ctx->qmatrix_l16, ctx->m.avctx->qmax + 1) || - !FF_ALLOCZ_TYPED_ARRAY(ctx->qmatrix_c16, ctx->m.avctx->qmax + 1)) + if (!FF_ALLOCZ_TYPED_ARRAY(ctx->qmatrix_l, s->avctx->qmax + 1) || + !FF_ALLOCZ_TYPED_ARRAY(ctx->qmatrix_c, s->avctx->qmax + 1) || + !FF_ALLOCZ_TYPED_ARRAY(ctx->qmatrix_l16, s->avctx->qmax + 1) || + !FF_ALLOCZ_TYPED_ARRAY(ctx->qmatrix_c16, s->avctx->qmax + 1)) return AVERROR(ENOMEM); if (ctx->bit_depth == 8) { for (i = 1; i < 64; i++) { - int j = ctx->m.idsp.idct_permutation[ff_zigzag_direct[i]]; + int j = s->idsp.idct_permutation[ff_zigzag_direct[i]]; weight_matrix[j] = ctx->cid_table->luma_weight[i]; } - ff_convert_matrix(&ctx->m, ctx->qmatrix_l, ctx->qmatrix_l16, + ff_convert_matrix(s, ctx->qmatrix_l, ctx->qmatrix_l16, weight_matrix, ctx->intra_quant_bias, 1, - ctx->m.avctx->qmax, 1); + s->avctx->qmax, 1); for (i = 1; i < 64; i++) { - int j = ctx->m.idsp.idct_permutation[ff_zigzag_direct[i]]; + int j = s->idsp.idct_permutation[ff_zigzag_direct[i]]; weight_matrix[j] = ctx->cid_table->chroma_weight[i]; } - ff_convert_matrix(&ctx->m, ctx->qmatrix_c, ctx->qmatrix_c16, + ff_convert_matrix(s, ctx->qmatrix_c, ctx->qmatrix_c16, weight_matrix, ctx->intra_quant_bias, 1, - ctx->m.avctx->qmax, 1); + s->avctx->qmax, 1); - for (qscale = 1; qscale <= ctx->m.avctx->qmax; qscale++) { + for (qscale = 1; qscale <= s->avctx->qmax; qscale++) { for (i = 0; i < 64; i++) { ctx->qmatrix_l[qscale][i] <<= 2; ctx->qmatrix_c[qscale][i] <<= 2; @@ -302,7 +303,7 @@ static av_cold int dnxhd_init_qmat(DNXHDEncContext *ctx, int lbias, int cbias) } } else { // 10-bit - for (qscale = 1; qscale <= ctx->m.avctx->qmax; qscale++) { + for (qscale = 1; qscale <= s->avctx->qmax; qscale++) { for (i = 1; i < 64; i++) { int j = ff_zigzag_direct[i]; @@ -325,22 +326,23 @@ static av_cold int dnxhd_init_qmat(DNXHDEncContext *ctx, int lbias, int cbias) } } - ctx->m.q_chroma_intra_matrix16 = ctx->qmatrix_c16; - ctx->m.q_chroma_intra_matrix = ctx->qmatrix_c; - ctx->m.q_intra_matrix16 = ctx->qmatrix_l16; - ctx->m.q_intra_matrix = ctx->qmatrix_l; + s->q_chroma_intra_matrix16 = ctx->qmatrix_c16; + s->q_chroma_intra_matrix = ctx->qmatrix_c; + s->q_intra_matrix16 = ctx->qmatrix_l16; + s->q_intra_matrix = ctx->qmatrix_l; return 0; } static av_cold int dnxhd_init_rc(DNXHDEncContext *ctx) { - if (!FF_ALLOCZ_TYPED_ARRAY(ctx->mb_rc, (ctx->m.avctx->qmax + 1) * ctx->m.mb_num)) + MPVEncContext *const s = &ctx->m.common; + if (!FF_ALLOCZ_TYPED_ARRAY(ctx->mb_rc, (s->avctx->qmax + 1) * s->mb_num)) return AVERROR(ENOMEM); - if (ctx->m.avctx->mb_decision != FF_MB_DECISION_RD) { - if (!FF_ALLOCZ_TYPED_ARRAY(ctx->mb_cmp, ctx->m.mb_num) || - !FF_ALLOCZ_TYPED_ARRAY(ctx->mb_cmp_tmp, ctx->m.mb_num)) + if (s->avctx->mb_decision != FF_MB_DECISION_RD) { + if (!FF_ALLOCZ_TYPED_ARRAY(ctx->mb_cmp, s->mb_num) || + !FF_ALLOCZ_TYPED_ARRAY(ctx->mb_cmp_tmp, s->mb_num)) return AVERROR(ENOMEM); } ctx->frame_bits = (ctx->coding_unit_size - @@ -353,6 +355,7 @@ static av_cold int dnxhd_init_rc(DNXHDEncContext *ctx) static av_cold int dnxhd_encode_init(AVCodecContext *avctx) { DNXHDEncContext *ctx = avctx->priv_data; + MPVEncContext *const s = &ctx->m.common; int i, ret; switch (avctx->pix_fmt) { @@ -412,31 +415,31 @@ static av_cold int dnxhd_encode_init(AVCodecContext *avctx) ctx->cid_table = ff_dnxhd_get_cid_table(ctx->cid); av_assert0(ctx->cid_table); - ctx->m.avctx = avctx; - ctx->m.mb_intra = 1; - ctx->m.h263_aic = 1; + s->avctx = avctx; + s->mb_intra = 1; + s->h263_aic = 1; avctx->bits_per_raw_sample = ctx->bit_depth; ff_blockdsp_init(&ctx->bdsp, avctx); - ff_fdctdsp_init(&ctx->m.fdsp, avctx); - ff_mpv_idct_init(&ctx->m); - ff_mpegvideoencdsp_init(&ctx->m.mpvencdsp, avctx); - ff_pixblockdsp_init(&ctx->m.pdsp, avctx); - ff_dct_encode_init(&ctx->m); + ff_fdctdsp_init(&s->fdsp, avctx); + ff_mpv_idct_init(s); + ff_mpegvideoencdsp_init(&s->mpvencdsp, avctx); + ff_pixblockdsp_init(&s->pdsp, avctx); + ff_dct_encode_init(s); if (ctx->profile != FF_PROFILE_DNXHD) - ff_videodsp_init(&ctx->m.vdsp, ctx->bit_depth); + ff_videodsp_init(&s->vdsp, ctx->bit_depth); - if (!ctx->m.dct_quantize) - ctx->m.dct_quantize = ff_dct_quantize_c; + if (!s->dct_quantize) + s->dct_quantize = ff_dct_quantize_c; if (ctx->is_444 || ctx->profile == FF_PROFILE_DNXHR_HQX) { - ctx->m.dct_quantize = dnxhd_10bit_dct_quantize_444; + s->dct_quantize = dnxhd_10bit_dct_quantize_444; ctx->get_pixels_8x4_sym = dnxhd_10bit_get_pixels_8x4_sym; ctx->block_width_l2 = 4; } else if (ctx->bit_depth == 10) { - ctx->m.dct_quantize = dnxhd_10bit_dct_quantize; + s->dct_quantize = dnxhd_10bit_dct_quantize; ctx->get_pixels_8x4_sym = dnxhd_10bit_get_pixels_8x4_sym; ctx->block_width_l2 = 4; } else { @@ -447,12 +450,12 @@ static av_cold int dnxhd_encode_init(AVCodecContext *avctx) if (ARCH_X86) ff_dnxhdenc_init_x86(ctx); - ctx->m.mb_height = (avctx->height + 15) / 16; - ctx->m.mb_width = (avctx->width + 15) / 16; + s->mb_height = (avctx->height + 15) / 16; + s->mb_width = (avctx->width + 15) / 16; if (avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) { ctx->interlaced = 1; - ctx->m.mb_height /= 2; + s->mb_height /= 2; } if (ctx->interlaced && ctx->profile != FF_PROFILE_DNXHD) { @@ -461,7 +464,7 @@ static av_cold int dnxhd_encode_init(AVCodecContext *avctx) return AVERROR(EINVAL); } - ctx->m.mb_num = ctx->m.mb_height * ctx->m.mb_width; + s->mb_num = s->mb_height * s->mb_width; if (ctx->cid_table->frame_size == DNXHD_VARIABLE) { ctx->frame_size = ff_dnxhd_get_hr_frame_size(ctx->cid, @@ -473,8 +476,8 @@ static av_cold int dnxhd_encode_init(AVCodecContext *avctx) ctx->coding_unit_size = ctx->cid_table->coding_unit_size; } - if (ctx->m.mb_height > 68) - ctx->data_offset = 0x170 + (ctx->m.mb_height << 2); + if (s->mb_height > 68) + ctx->data_offset = 0x170 + (s->mb_height << 2); else ctx->data_offset = 0x280; @@ -492,10 +495,10 @@ static av_cold int dnxhd_encode_init(AVCodecContext *avctx) if ((ret = dnxhd_init_rc(ctx)) < 0) return ret; - if (!FF_ALLOCZ_TYPED_ARRAY(ctx->slice_size, ctx->m.mb_height) || - !FF_ALLOCZ_TYPED_ARRAY(ctx->slice_offs, ctx->m.mb_height) || - !FF_ALLOCZ_TYPED_ARRAY(ctx->mb_bits, ctx->m.mb_num) || - !FF_ALLOCZ_TYPED_ARRAY(ctx->mb_qscale, ctx->m.mb_num)) + if (!FF_ALLOCZ_TYPED_ARRAY(ctx->slice_size, s->mb_height) || + !FF_ALLOCZ_TYPED_ARRAY(ctx->slice_offs, s->mb_height) || + !FF_ALLOCZ_TYPED_ARRAY(ctx->mb_bits, s->mb_num) || + !FF_ALLOCZ_TYPED_ARRAY(ctx->mb_qscale, s->mb_num)) return AVERROR(ENOMEM); if (avctx->active_thread_type == FF_THREAD_SLICE) { @@ -525,6 +528,7 @@ static av_cold int dnxhd_encode_init(AVCodecContext *avctx) static int dnxhd_write_header(AVCodecContext *avctx, uint8_t *buf) { DNXHDEncContext *ctx = avctx->priv_data; + MPVEncContext *const s = &ctx->m.common; memset(buf, 0, ctx->data_offset); @@ -550,8 +554,8 @@ static int dnxhd_write_header(AVCodecContext *avctx, uint8_t *buf) buf[0x5f] = 0x01; // UDL buf[0x167] = 0x02; // reserved - AV_WB16(buf + 0x16a, ctx->m.mb_height * 4 + 4); // MSIPS - AV_WB16(buf + 0x16c, ctx->m.mb_height); // Ns + AV_WB16(buf + 0x16a, s->mb_height * 4 + 4); // MSIPS + AV_WB16(buf + 0x16c, s->mb_height); // Ns buf[0x16f] = 0x10; // reserved ctx->msip = buf + 0x170; @@ -567,7 +571,7 @@ static av_always_inline void dnxhd_encode_dc(DNXHDEncContext *ctx, int diff) } else { nbits = av_log2_16bit(2 * diff); } - put_bits(&ctx->m.pb, ctx->cid_table->dc_bits[nbits] + nbits, + put_bits(&ctx->m.common.pb, ctx->cid_table->dc_bits[nbits] + nbits, (ctx->cid_table->dc_codes[nbits] << nbits) + av_mod_uintp2(diff, nbits)); } @@ -576,26 +580,27 @@ static av_always_inline void dnxhd_encode_block(DNXHDEncContext *ctx, int16_t *block, int last_index, int n) { + MPVEncContext *const s = &ctx->m.common; int last_non_zero = 0; int slevel, i, j; - dnxhd_encode_dc(ctx, block[0] - ctx->m.last_dc[n]); - ctx->m.last_dc[n] = block[0]; + dnxhd_encode_dc(ctx, block[0] - s->last_dc[n]); + s->last_dc[n] = block[0]; for (i = 1; i <= last_index; i++) { - j = ctx->m.intra_scantable.permutated[i]; + j = s->intra_scantable.permutated[i]; slevel = block[j]; if (slevel) { int run_level = i - last_non_zero - 1; int rlevel = slevel * (1 << 1) | !!run_level; - put_bits(&ctx->m.pb, ctx->vlc_bits[rlevel], ctx->vlc_codes[rlevel]); + put_bits(&s->pb, ctx->vlc_bits[rlevel], ctx->vlc_codes[rlevel]); if (run_level) - put_bits(&ctx->m.pb, ctx->run_bits[run_level], + put_bits(&s->pb, ctx->run_bits[run_level], ctx->run_codes[run_level]); last_non_zero = i; } } - put_bits(&ctx->m.pb, ctx->vlc_bits[0], ctx->vlc_codes[0]); // EOB + put_bits(&s->pb, ctx->vlc_bits[0], ctx->vlc_codes[0]); // EOB } static av_always_inline @@ -615,7 +620,7 @@ void dnxhd_unquantize_c(DNXHDEncContext *ctx, int16_t *block, int n, } for (i = 1; i <= last_index; i++) { - int j = ctx->m.intra_scantable.permutated[i]; + int j = ctx->m.common.intra_scantable.permutated[i]; level = block[j]; if (level) { if (level < 0) { @@ -663,7 +668,7 @@ int dnxhd_calc_ac_bits(DNXHDEncContext *ctx, int16_t *block, int last_index) int bits = 0; int i, j, level; for (i = 1; i <= last_index; i++) { - j = ctx->m.intra_scantable.permutated[i]; + j = ctx->m.common.intra_scantable.permutated[i]; level = block[j]; if (level) { int run_level = i - last_non_zero - 1; @@ -678,40 +683,41 @@ int dnxhd_calc_ac_bits(DNXHDEncContext *ctx, int16_t *block, int last_index) static av_always_inline void dnxhd_get_blocks(DNXHDEncContext *ctx, int mb_x, int mb_y) { + MPVEncContext *const s = &ctx->m.common; const int bs = ctx->block_width_l2; const int bw = 1 << bs; int dct_y_offset = ctx->dct_y_offset; int dct_uv_offset = ctx->dct_uv_offset; - int linesize = ctx->m.linesize; - int uvlinesize = ctx->m.uvlinesize; + int linesize = s->linesize; + int uvlinesize = s->uvlinesize; const uint8_t *ptr_y = ctx->thread[0]->src[0] + - ((mb_y << 4) * ctx->m.linesize) + (mb_x << bs + 1); + ((mb_y << 4) * s->linesize) + (mb_x << bs + 1); const uint8_t *ptr_u = ctx->thread[0]->src[1] + - ((mb_y << 4) * ctx->m.uvlinesize) + (mb_x << bs + ctx->is_444); + ((mb_y << 4) * s->uvlinesize) + (mb_x << bs + ctx->is_444); const uint8_t *ptr_v = ctx->thread[0]->src[2] + - ((mb_y << 4) * ctx->m.uvlinesize) + (mb_x << bs + ctx->is_444); - PixblockDSPContext *pdsp = &ctx->m.pdsp; - VideoDSPContext *vdsp = &ctx->m.vdsp; - - if (ctx->bit_depth != 10 && vdsp->emulated_edge_mc && ((mb_x << 4) + 16 > ctx->m.avctx->width || - (mb_y << 4) + 16 > ctx->m.avctx->height)) { - int y_w = ctx->m.avctx->width - (mb_x << 4); - int y_h = ctx->m.avctx->height - (mb_y << 4); + ((mb_y << 4) * s->uvlinesize) + (mb_x << bs + ctx->is_444); + PixblockDSPContext *pdsp = &s->pdsp; + VideoDSPContext *vdsp = &s->vdsp; + + if (ctx->bit_depth != 10 && vdsp->emulated_edge_mc && ((mb_x << 4) + 16 > s->avctx->width || + (mb_y << 4) + 16 > s->avctx->height)) { + int y_w = s->avctx->width - (mb_x << 4); + int y_h = s->avctx->height - (mb_y << 4); int uv_w = (y_w + 1) / 2; int uv_h = y_h; linesize = 16; uvlinesize = 8; vdsp->emulated_edge_mc(&ctx->edge_buf_y[0], ptr_y, - linesize, ctx->m.linesize, + linesize, s->linesize, linesize, 16, 0, 0, y_w, y_h); vdsp->emulated_edge_mc(&ctx->edge_buf_uv[0][0], ptr_u, - uvlinesize, ctx->m.uvlinesize, + uvlinesize, s->uvlinesize, uvlinesize, 16, 0, 0, uv_w, uv_h); vdsp->emulated_edge_mc(&ctx->edge_buf_uv[1][0], ptr_v, - uvlinesize, ctx->m.uvlinesize, + uvlinesize, s->uvlinesize, uvlinesize, 16, 0, 0, uv_w, uv_h); @@ -720,25 +726,25 @@ void dnxhd_get_blocks(DNXHDEncContext *ctx, int mb_x, int mb_y) ptr_y = &ctx->edge_buf_y[0]; ptr_u = &ctx->edge_buf_uv[0][0]; ptr_v = &ctx->edge_buf_uv[1][0]; - } else if (ctx->bit_depth == 10 && vdsp->emulated_edge_mc && ((mb_x << 4) + 16 > ctx->m.avctx->width || - (mb_y << 4) + 16 > ctx->m.avctx->height)) { - int y_w = ctx->m.avctx->width - (mb_x << 4); - int y_h = ctx->m.avctx->height - (mb_y << 4); + } else if (ctx->bit_depth == 10 && vdsp->emulated_edge_mc && ((mb_x << 4) + 16 > s->avctx->width || + (mb_y << 4) + 16 > s->avctx->height)) { + int y_w = s->avctx->width - (mb_x << 4); + int y_h = s->avctx->height - (mb_y << 4); int uv_w = ctx->is_444 ? y_w : (y_w + 1) / 2; int uv_h = y_h; linesize = 32; uvlinesize = 16 + 16 * ctx->is_444; vdsp->emulated_edge_mc(&ctx->edge_buf_y[0], ptr_y, - linesize, ctx->m.linesize, + linesize, s->linesize, linesize / 2, 16, 0, 0, y_w, y_h); vdsp->emulated_edge_mc(&ctx->edge_buf_uv[0][0], ptr_u, - uvlinesize, ctx->m.uvlinesize, + uvlinesize, s->uvlinesize, uvlinesize / 2, 16, 0, 0, uv_w, uv_h); vdsp->emulated_edge_mc(&ctx->edge_buf_uv[1][0], ptr_v, - uvlinesize, ctx->m.uvlinesize, + uvlinesize, s->uvlinesize, uvlinesize / 2, 16, 0, 0, uv_w, uv_h); @@ -755,7 +761,7 @@ void dnxhd_get_blocks(DNXHDEncContext *ctx, int mb_x, int mb_y) pdsp->get_pixels(ctx->blocks[2], ptr_u, uvlinesize); pdsp->get_pixels(ctx->blocks[3], ptr_v, uvlinesize); - if (mb_y + 1 == ctx->m.mb_height && ctx->m.avctx->height == 1080) { + if (mb_y + 1 == s->mb_height && s->avctx->height == 1080) { if (ctx->interlaced) { ctx->get_pixels_8x4_sym(ctx->blocks[4], ptr_y + dct_y_offset, @@ -821,17 +827,18 @@ static int dnxhd_calc_bits_thread(AVCodecContext *avctx, void *arg, int jobnr, int threadnr) { DNXHDEncContext *ctx = avctx->priv_data; + MPVEncContext *const s = &ctx->m.common; int mb_y = jobnr, mb_x; int qscale = ctx->qscale; LOCAL_ALIGNED_16(int16_t, block, [64]); ctx = ctx->thread[threadnr]; - ctx->m.last_dc[0] = - ctx->m.last_dc[1] = - ctx->m.last_dc[2] = 1 << (ctx->bit_depth + 2); + s->last_dc[0] = + s->last_dc[1] = + s->last_dc[2] = 1 << (ctx->bit_depth + 2); - for (mb_x = 0; mb_x < ctx->m.mb_width; mb_x++) { - unsigned mb = mb_y * ctx->m.mb_width + mb_x; + for (mb_x = 0; mb_x < s->mb_width; mb_x++) { + unsigned mb = mb_y * s->mb_width + mb_x; int ssd = 0; int ac_bits = 0; int dc_bits = 0; @@ -845,12 +852,12 @@ static int dnxhd_calc_bits_thread(AVCodecContext *avctx, void *arg, int n = dnxhd_switch_matrix(ctx, i); memcpy(block, src_block, 64 * sizeof(*block)); - last_index = ctx->m.dct_quantize(&ctx->m, block, + last_index = s->dct_quantize(s, block, ctx->is_444 ? 4 * (n > 0): 4 & (2*i), qscale, &overflow); ac_bits += dnxhd_calc_ac_bits(ctx, block, last_index); - diff = block[0] - ctx->m.last_dc[n]; + diff = block[0] - s->last_dc[n]; if (diff < 0) nbits = av_log2_16bit(-2 * diff); else @@ -859,16 +866,16 @@ static int dnxhd_calc_bits_thread(AVCodecContext *avctx, void *arg, av_assert1(nbits < ctx->bit_depth + 4); dc_bits += ctx->cid_table->dc_bits[nbits] + nbits; - ctx->m.last_dc[n] = block[0]; + s->last_dc[n] = block[0]; if (avctx->mb_decision == FF_MB_DECISION_RD || !RC_VARIANCE) { dnxhd_unquantize_c(ctx, block, i, qscale, last_index); - ctx->m.idsp.idct(block); + s->idsp.idct(block); ssd += dnxhd_ssd_block(block, src_block); } } - ctx->mb_rc[(qscale * ctx->m.mb_num) + mb].ssd = ssd; - ctx->mb_rc[(qscale * ctx->m.mb_num) + mb].bits = ac_bits + dc_bits + 12 + + ctx->mb_rc[(qscale * s->mb_num) + mb].ssd = ssd; + ctx->mb_rc[(qscale * s->mb_num) + mb].bits = ac_bits + dc_bits + 12 + (1 + ctx->is_444) * 8 * ctx->vlc_bits[0]; } return 0; @@ -878,50 +885,52 @@ static int dnxhd_encode_thread(AVCodecContext *avctx, void *arg, int jobnr, int threadnr) { DNXHDEncContext *ctx = avctx->priv_data; + MPVEncContext *const s = &ctx->m.common; int mb_y = jobnr, mb_x; ctx = ctx->thread[threadnr]; - init_put_bits(&ctx->m.pb, (uint8_t *)arg + ctx->data_offset + ctx->slice_offs[jobnr], + init_put_bits(&s->pb, (uint8_t *)arg + ctx->data_offset + ctx->slice_offs[jobnr], ctx->slice_size[jobnr]); - ctx->m.last_dc[0] = - ctx->m.last_dc[1] = - ctx->m.last_dc[2] = 1 << (ctx->bit_depth + 2); - for (mb_x = 0; mb_x < ctx->m.mb_width; mb_x++) { - unsigned mb = mb_y * ctx->m.mb_width + mb_x; + s->last_dc[0] = + s->last_dc[1] = + s->last_dc[2] = 1 << (ctx->bit_depth + 2); + for (mb_x = 0; mb_x < s->mb_width; mb_x++) { + unsigned mb = mb_y * s->mb_width + mb_x; int qscale = ctx->mb_qscale[mb]; int i; - put_bits(&ctx->m.pb, 11, qscale); - put_bits(&ctx->m.pb, 1, avctx->pix_fmt == AV_PIX_FMT_YUV444P10); + put_bits(&s->pb, 11, qscale); + put_bits(&s->pb, 1, avctx->pix_fmt == AV_PIX_FMT_YUV444P10); dnxhd_get_blocks(ctx, mb_x, mb_y); for (i = 0; i < 8 + 4 * ctx->is_444; i++) { int16_t *block = ctx->blocks[i]; int overflow, n = dnxhd_switch_matrix(ctx, i); - int last_index = ctx->m.dct_quantize(&ctx->m, block, + int last_index = s->dct_quantize(s, block, ctx->is_444 ? (((i >> 1) % 3) < 1 ? 0 : 4): 4 & (2*i), qscale, &overflow); dnxhd_encode_block(ctx, block, last_index, n); } } - if (put_bits_count(&ctx->m.pb) & 31) - put_bits(&ctx->m.pb, 32 - (put_bits_count(&ctx->m.pb) & 31), 0); - flush_put_bits(&ctx->m.pb); + if (put_bits_count(&s->pb) & 31) + put_bits(&s->pb, 32 - (put_bits_count(&s->pb) & 31), 0); + flush_put_bits(&s->pb); return 0; } static void dnxhd_setup_threads_slices(DNXHDEncContext *ctx) { + MPVEncContext *const s = &ctx->m.common; int mb_y, mb_x; int offset = 0; - for (mb_y = 0; mb_y < ctx->m.mb_height; mb_y++) { + for (mb_y = 0; mb_y < s->mb_height; mb_y++) { int thread_size; ctx->slice_offs[mb_y] = offset; ctx->slice_size[mb_y] = 0; - for (mb_x = 0; mb_x < ctx->m.mb_width; mb_x++) { - unsigned mb = mb_y * ctx->m.mb_width + mb_x; + for (mb_x = 0; mb_x < s->mb_width; mb_x++) { + unsigned mb = mb_y * s->mb_width + mb_x; ctx->slice_size[mb_y] += ctx->mb_bits[mb]; } ctx->slice_size[mb_y] = (ctx->slice_size[mb_y] + 31) & ~31; @@ -935,28 +944,29 @@ static int dnxhd_mb_var_thread(AVCodecContext *avctx, void *arg, int jobnr, int threadnr) { DNXHDEncContext *ctx = avctx->priv_data; + MPVEncContext *const s = &ctx->m.common; int mb_y = jobnr, mb_x, x, y; - int partial_last_row = (mb_y == ctx->m.mb_height - 1) && + int partial_last_row = (mb_y == s->mb_height - 1) && ((avctx->height >> ctx->interlaced) & 0xF); ctx = ctx->thread[threadnr]; if (ctx->bit_depth == 8) { - uint8_t *pix = ctx->thread[0]->src[0] + ((mb_y << 4) * ctx->m.linesize); - for (mb_x = 0; mb_x < ctx->m.mb_width; ++mb_x, pix += 16) { - unsigned mb = mb_y * ctx->m.mb_width + mb_x; + uint8_t *pix = ctx->thread[0]->src[0] + ((mb_y << 4) * s->linesize); + for (mb_x = 0; mb_x < s->mb_width; ++mb_x, pix += 16) { + unsigned mb = mb_y * s->mb_width + mb_x; int sum; int varc; if (!partial_last_row && mb_x * 16 <= avctx->width - 16 && (avctx->width % 16) == 0) { - sum = ctx->m.mpvencdsp.pix_sum(pix, ctx->m.linesize); - varc = ctx->m.mpvencdsp.pix_norm1(pix, ctx->m.linesize); + sum = s->mpvencdsp.pix_sum(pix, s->linesize); + varc = s->mpvencdsp.pix_norm1(pix, s->linesize); } else { int bw = FFMIN(avctx->width - 16 * mb_x, 16); int bh = FFMIN((avctx->height >> ctx->interlaced) - 16 * mb_y, 16); sum = varc = 0; for (y = 0; y < bh; y++) { for (x = 0; x < bw; x++) { - uint8_t val = pix[x + y * ctx->m.linesize]; + uint8_t val = pix[x + y * s->linesize]; sum += val; varc += val * val; } @@ -968,11 +978,11 @@ static int dnxhd_mb_var_thread(AVCodecContext *avctx, void *arg, ctx->mb_cmp[mb].mb = mb; } } else { // 10-bit - const int linesize = ctx->m.linesize >> 1; - for (mb_x = 0; mb_x < ctx->m.mb_width; ++mb_x) { + const int linesize = s->linesize >> 1; + for (mb_x = 0; mb_x < s->mb_width; ++mb_x) { uint16_t *pix = (uint16_t *)ctx->thread[0]->src[0] + ((mb_y << 4) * linesize) + (mb_x << 4); - unsigned mb = mb_y * ctx->m.mb_width + mb_x; + unsigned mb = mb_y * s->mb_width + mb_x; int sum = 0; int sqsum = 0; int bw = FFMIN(avctx->width - 16 * mb_x, 16); @@ -1001,6 +1011,7 @@ static int dnxhd_mb_var_thread(AVCodecContext *avctx, void *arg, static int dnxhd_encode_rdo(AVCodecContext *avctx, DNXHDEncContext *ctx) { + MPVEncContext *const s = &ctx->m.common; int lambda, up_step, down_step; int last_lower = INT_MAX, last_higher = 0; int x, y, q; @@ -1008,7 +1019,7 @@ static int dnxhd_encode_rdo(AVCodecContext *avctx, DNXHDEncContext *ctx) for (q = 1; q < avctx->qmax; q++) { ctx->qscale = q; avctx->execute2(avctx, dnxhd_calc_bits_thread, - NULL, NULL, ctx->m.mb_height); + NULL, NULL, s->mb_height); } up_step = down_step = 2 << LAMBDA_FRAC_BITS; lambda = ctx->lambda; @@ -1020,14 +1031,14 @@ static int dnxhd_encode_rdo(AVCodecContext *avctx, DNXHDEncContext *ctx) lambda++; end = 1; // need to set final qscales/bits } - for (y = 0; y < ctx->m.mb_height; y++) { - for (x = 0; x < ctx->m.mb_width; x++) { + for (y = 0; y < s->mb_height; y++) { + for (x = 0; x < s->mb_width; x++) { unsigned min = UINT_MAX; int qscale = 1; - int mb = y * ctx->m.mb_width + x; + int mb = y * s->mb_width + x; int rc = 0; for (q = 1; q < avctx->qmax; q++) { - int i = (q*ctx->m.mb_num) + mb; + int i = (q*s->mb_num) + mb; unsigned score = ctx->mb_rc[i].bits * lambda + ((unsigned) ctx->mb_rc[i].ssd << LAMBDA_FRAC_BITS); if (score < min) { @@ -1078,6 +1089,7 @@ static int dnxhd_encode_rdo(AVCodecContext *avctx, DNXHDEncContext *ctx) static int dnxhd_find_qscale(DNXHDEncContext *ctx) { + MPVEncContext *const s = &ctx->m.common; int bits = 0; int up_step = 1; int down_step = 1; @@ -1091,11 +1103,11 @@ static int dnxhd_find_qscale(DNXHDEncContext *ctx) bits = 0; ctx->qscale = qscale; // XXX avoid recalculating bits - ctx->m.avctx->execute2(ctx->m.avctx, dnxhd_calc_bits_thread, - NULL, NULL, ctx->m.mb_height); - for (y = 0; y < ctx->m.mb_height; y++) { - for (x = 0; x < ctx->m.mb_width; x++) - bits += ctx->mb_rc[(qscale*ctx->m.mb_num) + (y*ctx->m.mb_width+x)].bits; + s->avctx->execute2(s->avctx, dnxhd_calc_bits_thread, + NULL, NULL, s->mb_height); + for (y = 0; y < s->mb_height; y++) { + for (x = 0; x < s->mb_width; x++) + bits += ctx->mb_rc[(qscale*s->mb_num) + (y*s->mb_width+x)].bits; bits = (bits+31)&~31; // padding if (bits > ctx->frame_bits) break; @@ -1124,7 +1136,7 @@ static int dnxhd_find_qscale(DNXHDEncContext *ctx) else qscale += up_step++; down_step = 1; - if (qscale >= ctx->m.avctx->qmax) + if (qscale >= s->avctx->qmax) return AVERROR(EINVAL); } } @@ -1190,25 +1202,26 @@ static void radix_sort(RCCMPEntry *data, RCCMPEntry *tmp, int size) static int dnxhd_encode_fast(AVCodecContext *avctx, DNXHDEncContext *ctx) { + MPVEncContext *const s = &ctx->m.common; int max_bits = 0; int ret, x, y; if ((ret = dnxhd_find_qscale(ctx)) < 0) return ret; - for (y = 0; y < ctx->m.mb_height; y++) { - for (x = 0; x < ctx->m.mb_width; x++) { - int mb = y * ctx->m.mb_width + x; - int rc = (ctx->qscale * ctx->m.mb_num ) + mb; + for (y = 0; y < s->mb_height; y++) { + for (x = 0; x < s->mb_width; x++) { + int mb = y * s->mb_width + x; + int rc = (ctx->qscale * s->mb_num ) + mb; int delta_bits; ctx->mb_qscale[mb] = ctx->qscale; ctx->mb_bits[mb] = ctx->mb_rc[rc].bits; max_bits += ctx->mb_rc[rc].bits; if (!RC_VARIANCE) { delta_bits = ctx->mb_rc[rc].bits - - ctx->mb_rc[rc + ctx->m.mb_num].bits; + ctx->mb_rc[rc + s->mb_num].bits; ctx->mb_cmp[mb].mb = mb; ctx->mb_cmp[mb].value = delta_bits ? ((ctx->mb_rc[rc].ssd - - ctx->mb_rc[rc + ctx->m.mb_num].ssd) * 100) / + ctx->mb_rc[rc + s->mb_num].ssd) * 100) / delta_bits : INT_MIN; // avoid increasing qscale } @@ -1218,15 +1231,15 @@ static int dnxhd_encode_fast(AVCodecContext *avctx, DNXHDEncContext *ctx) if (!ret) { if (RC_VARIANCE) avctx->execute2(avctx, dnxhd_mb_var_thread, - NULL, NULL, ctx->m.mb_height); - radix_sort(ctx->mb_cmp, ctx->mb_cmp_tmp, ctx->m.mb_num); - for (x = 0; x < ctx->m.mb_num && max_bits > ctx->frame_bits; x++) { + NULL, NULL, s->mb_height); + radix_sort(ctx->mb_cmp, ctx->mb_cmp_tmp, s->mb_num); + for (x = 0; x < s->mb_num && max_bits > ctx->frame_bits; x++) { int mb = ctx->mb_cmp[x].mb; - int rc = (ctx->qscale * ctx->m.mb_num ) + mb; + int rc = (ctx->qscale * s->mb_num ) + mb; max_bits -= ctx->mb_rc[rc].bits - - ctx->mb_rc[rc + ctx->m.mb_num].bits; + ctx->mb_rc[rc + s->mb_num].bits; ctx->mb_qscale[mb] = ctx->qscale + 1; - ctx->mb_bits[mb] = ctx->mb_rc[rc + ctx->m.mb_num].bits; + ctx->mb_bits[mb] = ctx->mb_rc[rc + s->mb_num].bits; } } return 0; @@ -1234,13 +1247,13 @@ static int dnxhd_encode_fast(AVCodecContext *avctx, DNXHDEncContext *ctx) static void dnxhd_load_picture(DNXHDEncContext *ctx, const AVFrame *frame) { - int i; + MPVEncContext *const s = &ctx->m.common; - for (i = 0; i < ctx->m.avctx->thread_count; i++) { - ctx->thread[i]->m.linesize = frame->linesize[0] << ctx->interlaced; - ctx->thread[i]->m.uvlinesize = frame->linesize[1] << ctx->interlaced; - ctx->thread[i]->dct_y_offset = ctx->m.linesize *8; - ctx->thread[i]->dct_uv_offset = ctx->m.uvlinesize*8; + for (int i = 0; i < s->avctx->thread_count; i++) { + ctx->thread[i]->m.common.linesize = frame->linesize[0] << ctx->interlaced; + ctx->thread[i]->m.common.uvlinesize = frame->linesize[1] << ctx->interlaced; + ctx->thread[i]->dct_y_offset = s->linesize *8; + ctx->thread[i]->dct_uv_offset = s->uvlinesize*8; } ctx->cur_field = frame->interlaced_frame && !frame->top_field_first; @@ -1250,6 +1263,7 @@ static int dnxhd_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet) { DNXHDEncContext *ctx = avctx->priv_data; + MPVEncContext *const s = &ctx->m.common; int first_field = 1; int offset, i, ret; uint8_t *buf; @@ -1282,13 +1296,13 @@ encode_coding_unit: dnxhd_setup_threads_slices(ctx); offset = 0; - for (i = 0; i < ctx->m.mb_height; i++) { + for (i = 0; i < s->mb_height; i++) { AV_WB32(ctx->msip + i * 4, offset); offset += ctx->slice_size[i]; av_assert1(!(ctx->slice_size[i] & 3)); } - avctx->execute2(avctx, dnxhd_encode_thread, buf, NULL, ctx->m.mb_height); + avctx->execute2(avctx, dnxhd_encode_thread, buf, NULL, s->mb_height); av_assert1(ctx->data_offset + offset + 4 <= ctx->coding_unit_size); memset(buf + ctx->data_offset + offset, 0, diff --git a/libavcodec/flvenc.c b/libavcodec/flvenc.c index 1de9e4da55..1d3d76747a 100644 --- a/libavcodec/flvenc.c +++ b/libavcodec/flvenc.c @@ -24,8 +24,9 @@ #include "mpegvideodata.h" #include "mpegvideoenc.h" -void ff_flv_encode_picture_header(MPVMainEncContext *s, int picture_number) +void ff_flv_encode_picture_header(MPVMainEncContext *m, int picture_number) { + MPVEncContext *const s = &m->common; int format; align_put_bits(&s->pb); diff --git a/libavcodec/h261enc.c b/libavcodec/h261enc.c index a2e4c55c93..e4429fa89c 100644 --- a/libavcodec/h261enc.c +++ b/libavcodec/h261enc.c @@ -59,9 +59,10 @@ int ff_h261_get_picture_format(int width, int height) return AVERROR(EINVAL); } -void ff_h261_encode_picture_header(MPVMainEncContext *s, int picture_number) +void ff_h261_encode_picture_header(MPVMainEncContext *m, int picture_number) { - H261EncContext *const h = (H261EncContext *)s; + H261EncContext *const h = (H261EncContext *)m; + MPVEncContext *const s = &m->common; int format, temp_ref; align_put_bits(&s->pb); @@ -174,9 +175,8 @@ static inline int get_cbp(MPVEncContext *s, int16_t block[6][64]) * @param block the 8x8 block * @param n block index (0-3 are luma, 4-5 are chroma) */ -static void h261_encode_block(H261EncContext *h, int16_t *block, int n) +static void h261_encode_block(MPVEncContext *s, int16_t *block, int n) { - MPVEncContext *const s = &h->s; int level, run, i, j, last_index, last_non_zero, sign, slevel, code; RLTable *rl; @@ -325,7 +325,7 @@ void ff_h261_encode_mb(MPVEncContext *s, int16_t block[6][64], } for (i = 0; i < 6; i++) /* encode each block */ - h261_encode_block(h, block[i], i); + h261_encode_block(s, block[i], i); if (!IS_16X16(com->mtype)) { s->last_mv[0][0][0] = 0; @@ -380,9 +380,10 @@ static av_cold void h261_encode_init_static(void) init_uni_h261_rl_tab(&ff_h261_rl_tcoeff, uni_h261_rl_len); } -av_cold void ff_h261_encode_init(MPVMainEncContext *s) +av_cold void ff_h261_encode_init(MPVMainEncContext *m) { - H261EncContext *const h = (H261EncContext*)s; + H261EncContext *const h = (H261EncContext*)m; + MPVEncContext *const s = &m->common; static AVOnce init_static_once = AV_ONCE_INIT; s->private_ctx = &h->common; diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c index 97f3ad95f2..4af7ccb527 100644 --- a/libavcodec/ituh263enc.c +++ b/libavcodec/ituh263enc.c @@ -102,8 +102,9 @@ av_const int ff_h263_aspect_to_info(AVRational aspect){ return FF_ASPECT_EXTENDED; } -void ff_h263_encode_picture_header(MPVMainEncContext * s, int picture_number) +void ff_h263_encode_picture_header(MPVMainEncContext *m, int picture_number) { + MPVEncContext *const s = &m->common; int format, coded_frame_rate, coded_frame_rate_base, i, temp_ref; int best_clock_code=1; int best_divisor=60; @@ -266,12 +267,13 @@ void ff_h263_encode_gob_header(MPVEncContext *s, int mb_line) /** * modify qscale so that encoding is actually possible in H.263 (limit difference to -2..2) */ -void ff_clean_h263_qscales(MPVMainEncContext *s) +void ff_clean_h263_qscales(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; int i; int8_t * const qscale_table = s->current_picture.qscale_table; - ff_init_qscale_tab(s); + ff_init_qscale_tab(m); for(i=1; imb_num; i++){ if(qscale_table[ s->mb_index2xy[i] ] - qscale_table[ s->mb_index2xy[i-1] ] >2) @@ -812,8 +814,9 @@ static av_cold void h263_encode_init_static(void) init_mv_penalty_and_fcode(); } -av_cold void ff_h263_encode_init(MPVMainEncContext *s) +av_cold void ff_h263_encode_init(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; static AVOnce init_static_once = AV_ONCE_INIT; s->me.mv_penalty= mv_penalty; // FIXME exact table for MSMPEG4 & H.263+ @@ -878,7 +881,7 @@ void ff_h263_encode_mba(MPVEncContext *s) put_bits(&s->pb, ff_mba_length[i], mb_pos); } -#define OFFSET(x) offsetof(MPVMainEncContext, x) +#define OFFSET(x) offsetof(MPVMainEncContext, common.x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption h263_options[] = { { "obmc", "use overlapped block motion compensation.", OFFSET(obmc), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 481ee884e9..23772c4c1f 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -75,8 +75,9 @@ static av_cold void init_uni_ac_vlc(const uint8_t huff_size_ac[256], } } -static void mjpeg_encode_picture_header(MPVMainEncContext *s) +static void mjpeg_encode_picture_header(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; ff_mjpeg_encode_picture_header(s->avctx, &s->pb, s->mjpeg_ctx, &s->intra_scantable, 0, s->intra_matrix, s->chroma_intra_matrix, @@ -87,13 +88,13 @@ static void mjpeg_encode_picture_header(MPVMainEncContext *s) s->thread_context[i]->esc_pos = 0; } -void ff_mjpeg_amv_encode_picture_header(MPVMainEncContext *s) +void ff_mjpeg_amv_encode_picture_header(MPVMainEncContext *main) { - MJPEGEncContext *const m = (MJPEGEncContext*)s; - av_assert2(s->mjpeg_ctx == &m->mjpeg); + MJPEGEncContext *const m = (MJPEGEncContext*)main; + av_assert2(main->common.mjpeg_ctx == &m->mjpeg); /* s->huffman == HUFFMAN_TABLE_OPTIMAL can only be true for MJPEG. */ if (!CONFIG_MJPEG_ENCODER || m->mjpeg.huffman != HUFFMAN_TABLE_OPTIMAL) - mjpeg_encode_picture_header(s); + mjpeg_encode_picture_header(main); } #if CONFIG_MJPEG_ENCODER @@ -235,7 +236,9 @@ int ff_mjpeg_encode_stuffing(MPVEncContext *s) s->intra_chroma_ac_vlc_length = s->intra_chroma_ac_vlc_last_length = m->uni_chroma_ac_vlc_len; - mjpeg_encode_picture_header(s); + /* HUFFMAN_TABLE_OPTIMAL is incompatible with slice threading, + * therefore the following cast is allowed. */ + mjpeg_encode_picture_header((MPVMainEncContext*)s); mjpeg_encode_picture_frame(s); } #endif @@ -260,7 +263,7 @@ fail: return ret; } -static int alloc_huffman(MPVMainEncContext *s) +static int alloc_huffman(MPVEncContext *s) { MJpegContext *m = s->mjpeg_ctx; size_t num_mbs, num_blocks, num_codes; @@ -288,9 +291,10 @@ static int alloc_huffman(MPVMainEncContext *s) return 0; } -av_cold int ff_mjpeg_encode_init(MPVMainEncContext *s) +av_cold int ff_mjpeg_encode_init(MPVMainEncContext *main) { - MJpegContext *const m = &((MJPEGEncContext*)s)->mjpeg; + MJpegContext *const m = &((MJPEGEncContext*)main)->mjpeg; + MPVEncContext *const s = &main->common; int ret, use_slices; s->mjpeg_ctx = m; @@ -589,7 +593,7 @@ void ff_mjpeg_encode_mb(MPVEncContext *s, int16_t block[12][64]) static int amv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet) { - MPVMainEncContext *const s = avctx->priv_data; + MPVEncContext *const s = avctx->priv_data; AVFrame *pic; int i, ret; int chroma_h_shift, chroma_v_shift; diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c index 4d01a9215a..78c802d897 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -122,7 +122,8 @@ av_cold void ff_mpeg1_init_uni_ac_vlc(const RLTable *rl, uint8_t *uni_ac_vlc_len #if CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER static int find_frame_rate_index(MPEG12EncContext *mpeg12) { - MPVMainEncContext *const s = &mpeg12->mpeg; + MPVMainEncContext *const m = &mpeg12->mpeg; + MPVEncContext *const s = &m->common; int i; AVRational bestq = (AVRational) {0, 0}; AVRational ext; @@ -163,7 +164,8 @@ static int find_frame_rate_index(MPEG12EncContext *mpeg12) static av_cold int encode_init(AVCodecContext *avctx) { MPEG12EncContext *const mpeg12 = avctx->priv_data; - MPVMainEncContext *const s = &mpeg12->mpeg; + MPVMainEncContext *const m = &mpeg12->mpeg; + MPVEncContext *const s = &m->common; int ret; int max_size = avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO ? 16383 : 4095; @@ -263,9 +265,10 @@ static void put_header(MPVEncContext *s, int header) } /* put sequence header if needed */ -static void mpeg1_encode_sequence_header(MPVMainEncContext *s) +static void mpeg1_encode_sequence_header(MPVMainEncContext *m) { - MPEG12EncContext *const mpeg12 = (MPEG12EncContext*)s; + MPEG12EncContext *const mpeg12 = (MPEG12EncContext*)m; + MPVEncContext *const s = &m->common; unsigned int vbv_buffer_size, fps, v; int constraint_parameter_flag; AVRational framerate = ff_mpeg12_frame_rate_tab[mpeg12->frame_rate_index]; @@ -451,11 +454,12 @@ void ff_mpeg1_encode_slice_header(MPVEncContext *s) put_bits(&s->pb, 1, 0); } -void ff_mpeg1_encode_picture_header(MPVMainEncContext *s, int picture_number) +void ff_mpeg1_encode_picture_header(MPVMainEncContext *m, int picture_number) { - MPEG12EncContext *const mpeg12 = (MPEG12EncContext*)s; + MPEG12EncContext *const mpeg12 = (MPEG12EncContext*)m; + MPVEncContext *const s = &m->common; AVFrameSideData *side_data; - mpeg1_encode_sequence_header(s); + mpeg1_encode_sequence_header(m); /* MPEG-1 picture header */ put_header(s, PICTURE_START_CODE); @@ -1131,11 +1135,12 @@ static av_cold void mpeg12_encode_init_static(void) fcode_tab[mv + MAX_MV] = f_code; } -av_cold void ff_mpeg1_encode_init(MPVMainEncContext *s) +av_cold void ff_mpeg1_encode_init(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; static AVOnce init_static_once = AV_ONCE_INIT; - ff_mpeg12_common_init(s); + ff_mpeg12_common_init(&m->common); s->me.mv_penalty = mv_penalty; s->fcode_tab = fcode_tab; diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c index cd7ce1f382..fcd436082f 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -215,12 +215,13 @@ static inline int decide_ac_pred(MPVEncContext *s, int16_t block[6][64], /** * modify mb_type & qscale so that encoding is actually possible in MPEG-4 */ -void ff_clean_mpeg4_qscales(MPVMainEncContext *s) +void ff_clean_mpeg4_qscales(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; int i; int8_t *const qscale_table = s->current_picture.qscale_table; - ff_clean_h263_qscales(s); + ff_clean_h263_qscales(m); if (s->pict_type == AV_PICTURE_TYPE_B) { int odd = 0; @@ -875,8 +876,9 @@ void ff_mpeg4_stuffing(PutBitContext *pbc) } /* must be called before writing the header */ -void ff_set_mpeg4_time(MPVMainEncContext *s) +void ff_set_mpeg4_time(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; if (s->pict_type == AV_PICTURE_TYPE_B) { ff_mpeg4_init_direct_mv(s); } else { @@ -885,8 +887,9 @@ void ff_set_mpeg4_time(MPVMainEncContext *s) } } -static void mpeg4_encode_gop_header(MPVMainEncContext *s) +static void mpeg4_encode_gop_header(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; int64_t hours, minutes, seconds; int64_t time; @@ -915,8 +918,9 @@ static void mpeg4_encode_gop_header(MPVMainEncContext *s) ff_mpeg4_stuffing(&s->pb); } -static void mpeg4_encode_visual_object_header(MPVMainEncContext *s) +static void mpeg4_encode_visual_object_header(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; int profile_and_level_indication; int vo_ver_id; @@ -959,10 +963,11 @@ static void mpeg4_encode_visual_object_header(MPVMainEncContext *s) ff_mpeg4_stuffing(&s->pb); } -static void mpeg4_encode_vol_header(MPVMainEncContext *s, +static void mpeg4_encode_vol_header(MPVMainEncContext *m, int vo_number, int vol_number) { + MPVEncContext *const s = &m->common; int vo_ver_id, vo_type, aspect_ratio_info; if (s->max_b_frames || s->quarter_sample) { @@ -1060,20 +1065,21 @@ static void mpeg4_encode_vol_header(MPVMainEncContext *s, } /* write MPEG-4 VOP header */ -int ff_mpeg4_encode_picture_header(MPVMainEncContext *s, int picture_number) +int ff_mpeg4_encode_picture_header(MPVMainEncContext *m, int picture_number) { + MPVEncContext *const s = &m->common; uint64_t time_incr; int64_t time_div, time_mod; if (s->pict_type == AV_PICTURE_TYPE_I) { if (!(s->avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)) { if (s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT) // HACK, the reference sw is buggy - mpeg4_encode_visual_object_header(s); + mpeg4_encode_visual_object_header(m); if (s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT || picture_number == 0) // HACK, the reference sw is buggy - mpeg4_encode_vol_header(s, 0, 0); + mpeg4_encode_vol_header(m, 0, 0); } if (!(s->workaround_bugs & FF_BUG_MS)) - mpeg4_encode_gop_header(s); + mpeg4_encode_gop_header(m); } s->partitioned_frame = s->data_partitioning && s->pict_type != AV_PICTURE_TYPE_B; @@ -1283,7 +1289,8 @@ static av_cold void mpeg4_encode_init_static(void) static av_cold int encode_init(AVCodecContext *avctx) { static AVOnce init_static_once = AV_ONCE_INIT; - MPVMainEncContext *const s = avctx->priv_data; + MPVMainEncContext *const m = avctx->priv_data; + MPVEncContext *const s = &m->common; int ret; if (avctx->width >= (1<<13) || avctx->height >= (1<<13)) { @@ -1314,8 +1321,8 @@ static av_cold int encode_init(AVCodecContext *avctx) init_put_bits(&s->pb, s->avctx->extradata, 1024); if (!(s->workaround_bugs & FF_BUG_MS)) - mpeg4_encode_visual_object_header(s); - mpeg4_encode_vol_header(s, 0, 0); + mpeg4_encode_visual_object_header(m); + mpeg4_encode_vol_header(m, 0, 0); // ff_mpeg4_stuffing(&s->pb); ? flush_put_bits(&s->pb); @@ -1375,7 +1382,7 @@ void ff_mpeg4_encode_video_packet_header(MPVEncContext *s) put_bits(&s->pb, 1, 0); /* no HEC */ } -#define OFFSET(x) offsetof(MPVMainEncContext, x) +#define OFFSET(x) offsetof(MPVMainEncContext, common.x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { { "data_partitioning", "Use data partitioning.", OFFSET(data_partitioning), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index f21febd4db..a42cc0fa51 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -235,8 +235,9 @@ void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix) /** * init s->current_picture.qscale_table from s->lambda_table */ -void ff_init_qscale_tab(MPVMainEncContext *s) +void ff_init_qscale_tab(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; int8_t * const qscale_table = s->current_picture.qscale_table; int i; @@ -276,11 +277,13 @@ static void mpv_encode_init_static(void) * Set the given MPVMainEncContext to defaults for encoding. * the changed fields will not depend upon the prior state of the MPVMainEncContext. */ -static void mpv_encode_defaults(MPVMainEncContext *s) +static void mpv_encode_defaults(MPVMainEncContext *m) { + MPVMainContext *const com = &m->common; + MPVEncContext *const s = com; static AVOnce init_static_once = AV_ONCE_INIT; - ff_mpv_common_defaults(s); + ff_mpv_common_defaults(com); ff_thread_once(&init_static_once, mpv_encode_init_static); @@ -312,11 +315,12 @@ av_cold int ff_dct_encode_init(MPVEncContext *s) /* init video encoder */ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) { - MPVMainEncContext *const s = avctx->priv_data; + MPVMainEncContext *const m = avctx->priv_data; + MPVMainContext *const s = &m->common; AVCPBProperties *cpb_props; int i, ret; - mpv_encode_defaults(s); + mpv_encode_defaults(m); switch (avctx->pix_fmt) { case AV_PIX_FMT_YUVJ444P: @@ -665,7 +669,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) case AV_CODEC_ID_AMV: s->out_format = FMT_MJPEG; s->intra_only = 1; /* force intra only for jpeg */ - if ((ret = ff_mjpeg_encode_init(s)) < 0) + if ((ret = ff_mjpeg_encode_init(m)) < 0) return ret; avctx->delay = 0; s->low_delay = 1; @@ -676,7 +680,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) s->intra_only = 1; /* force intra only for SHQ */ if (!CONFIG_SPEEDHQ_ENCODER) return AVERROR_ENCODER_NOT_FOUND; - if ((ret = ff_speedhq_encode_init(s)) < 0) + if ((ret = ff_speedhq_encode_init(m)) < 0) return ret; avctx->delay = 0; s->low_delay = 1; @@ -849,14 +853,14 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) ff_set_cmp(&s->mecc, s->mecc.frame_skip_cmp, s->frame_skip_cmp); if (CONFIG_H261_ENCODER && s->out_format == FMT_H261) { - ff_h261_encode_init(s); + ff_h261_encode_init(m); } else if ((CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER) && s->out_format == FMT_MPEG1) { - ff_mpeg1_encode_init(s); + ff_mpeg1_encode_init(m); } else if (CONFIG_H263_ENCODER && s->out_format == FMT_H263) { - ff_h263_encode_init(s); + ff_h263_encode_init(m); if (CONFIG_MSMPEG4_ENCODER && s->msmpeg4_version) - ff_msmpeg4_encode_init(s); + ff_msmpeg4_encode_init(m); } /* init q matrix */ @@ -895,7 +899,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) 31, 0); } - if ((ret = ff_rate_control_init(s)) < 0) + if ((ret = ff_rate_control_init(m)) < 0) return ret; if (s->b_frame_strategy == 2) { @@ -927,12 +931,13 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) av_cold int ff_mpv_encode_end(AVCodecContext *avctx) { - MPVMainEncContext *const s = avctx->priv_data; + MPVMainEncContext *const m = avctx->priv_data; + MPVMainContext *const s = &m->common; int i; - ff_rate_control_uninit(s); + ff_rate_control_uninit(m); - ff_mpv_common_end(s); + ff_mpv_common_end(&m->common); for (i = 0; i < FF_ARRAY_ELEMS(s->tmp_frames); i++) av_frame_free(&s->tmp_frames[i]); @@ -970,7 +975,7 @@ static int get_sae(uint8_t *src, int ref, int stride) return acc; } -static int get_intra_count(MPVMainEncContext *s, uint8_t *src, +static int get_intra_count(MPVEncContext *s, uint8_t *src, uint8_t *ref, int stride) { int x, y, w, h; @@ -993,7 +998,7 @@ static int get_intra_count(MPVMainEncContext *s, uint8_t *src, return acc; } -static int alloc_picture(MPVMainEncContext *s, Picture *pic, int shared) +static int alloc_picture(MPVEncContext *s, Picture *pic, int shared) { return ff_alloc_picture(s->avctx, pic, &s->me, &s->sc, shared, 1, s->chroma_x_shift, s->chroma_y_shift, s->out_format, @@ -1001,8 +1006,10 @@ static int alloc_picture(MPVMainEncContext *s, Picture *pic, int shared) &s->linesize, &s->uvlinesize); } -static int load_input_picture(MPVMainEncContext *s, const AVFrame *pic_arg) +static int load_input_picture(MPVMainEncContext *m, const AVFrame *pic_arg) { + MPVMainContext *const com = &m->common; + MPVEncContext *const s = com; Picture *pic = NULL; int64_t pts; int i, display_picture_number = 0, ret; @@ -1152,8 +1159,9 @@ static int load_input_picture(MPVMainEncContext *s, const AVFrame *pic_arg) return 0; } -static int skip_check(MPVMainEncContext *s, Picture *p, Picture *ref) +static int skip_check(MPVMainEncContext *m, Picture *p, Picture *ref) { + MPVEncContext *const s = &m->common; int x, y, plane; int score = 0; int64_t score64 = 0; @@ -1214,8 +1222,9 @@ static int encode_frame(AVCodecContext *c, AVFrame *frame, AVPacket *pkt) return size; } -static int estimate_best_b_count(MPVMainEncContext *s) +static int estimate_best_b_count(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; AVPacket *pkt; const int scale = s->brd_scale; int width = s->width >> scale; @@ -1360,8 +1369,9 @@ fail: return best_b_count; } -static int select_input_picture(MPVMainEncContext *s) +static int select_input_picture(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; int i, ret; for (i = 1; i < MAX_PICTURE_COUNT; i++) @@ -1373,11 +1383,11 @@ static int select_input_picture(MPVMainEncContext *s) if (s->frame_skip_threshold || s->frame_skip_factor) { if (s->picture_in_gop_number < s->gop_size && s->next_picture_ptr && - skip_check(s, s->input_picture[0], s->next_picture_ptr)) { + skip_check(m, s->input_picture[0], s->next_picture_ptr)) { // FIXME check that the gop check above is +-1 correct av_frame_unref(s->input_picture[0]->f); - ff_vbv_update(s, 0); + ff_vbv_update(m, 0); goto no_output_pic; } @@ -1437,7 +1447,7 @@ static int select_input_picture(MPVMainEncContext *s) s->input_picture[i]->b_frame_score = 0; } } else if (s->b_frame_strategy == 2) { - b_frames = estimate_best_b_count(s); + b_frames = estimate_best_b_count(m); if (b_frames < 0) return b_frames; } @@ -1537,8 +1547,9 @@ no_output_pic: return 0; } -static void frame_end(MPVMainEncContext *s) +static void frame_end(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; if (s->unrestricted_mv && s->current_picture.reference && !s->intra_only) { @@ -1574,8 +1585,9 @@ static void frame_end(MPVMainEncContext *s) s->last_non_b_pict_type = s->pict_type; } -static void update_noise_reduction(MPVMainEncContext *s) +static void update_noise_reduction(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; int intra, i; for (intra = 0; intra < 2; intra++) { @@ -1595,8 +1607,9 @@ static void update_noise_reduction(MPVMainEncContext *s) } } -static int frame_start(MPVMainEncContext *s) +static int frame_start(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; int ret; /* mark & release old frames */ @@ -1660,7 +1673,7 @@ static int frame_start(MPVMainEncContext *s) if (s->dct_error_sum) { av_assert2(s->noise_reduction && s->encoding); - update_noise_reduction(s); + update_noise_reduction(m); } return 0; @@ -1669,7 +1682,8 @@ static int frame_start(MPVMainEncContext *s) int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet) { - MPVMainEncContext *const s = avctx->priv_data; + MPVMainEncContext *const m = avctx->priv_data; + MPVEncContext *const s = &m->common; int i, stuffing_count, ret; int context_count = s->slice_context_count; @@ -1677,10 +1691,10 @@ int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, s->picture_in_gop_number++; - if (load_input_picture(s, pic_arg) < 0) + if (load_input_picture(m, pic_arg) < 0) return -1; - if (select_input_picture(s) < 0) { + if (select_input_picture(m) < 0) { return -1; } @@ -1711,11 +1725,11 @@ int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, s->pict_type = s->new_picture.f->pict_type; //emms_c(); - ret = frame_start(s); + ret = frame_start(m); if (ret < 0) return ret; vbv_retry: - ret = encode_picture(s, s->picture_number); + ret = encode_picture(m, s->picture_number); if (growing_buffer) { av_assert0(s->pb.buf == avctx->internal->byte_buffer); pkt->data = s->pb.buf; @@ -1724,7 +1738,7 @@ vbv_retry: if (ret < 0) return -1; - frame_end(s); + frame_end(m); if ((CONFIG_MJPEG_ENCODER || CONFIG_AMV_ENCODER) && s->out_format == FMT_MJPEG) ff_mjpeg_encode_picture_trailer(&s->pb, s->header_bits); @@ -1772,7 +1786,7 @@ vbv_retry: } if (avctx->flags & AV_CODEC_FLAG_PASS1) - ff_write_pass1_stats(s); + ff_write_pass1_stats(m); for (i = 0; i < 4; i++) { s->current_picture_ptr->encoding_error[i] = s->current_picture.encoding_error[i]; @@ -1790,7 +1804,7 @@ vbv_retry: flush_put_bits(&s->pb); s->frame_bits = put_bits_count(&s->pb); - stuffing_count = ff_vbv_update(s, s->frame_bits); + stuffing_count = ff_vbv_update(m, s->frame_bits); s->stuffing_bits = 8*stuffing_count; if (stuffing_count) { if (put_bytes_left(&s->pb, 0) < stuffing_count + 50) { @@ -3429,14 +3443,15 @@ static void merge_context_after_encode(MPVEncContext *dst, MPVEncContext *src) flush_put_bits(&dst->pb); } -static int estimate_qp(MPVMainEncContext *s, int dry_run) +static int estimate_qp(MPVMainEncContext *m, int dry_run) { + MPVEncContext *const s = &m->common; if (s->next_lambda){ s->current_picture_ptr->f->quality = s->current_picture.f->quality = s->next_lambda; if(!dry_run) s->next_lambda= 0; } else if (!s->fixed_qscale) { - int quality = ff_rate_estimate_qscale(s, dry_run); + int quality = ff_rate_estimate_qscale(m, dry_run); s->current_picture_ptr->f->quality = s->current_picture.f->quality = quality; if (s->current_picture.f->quality < 0) @@ -3447,16 +3462,16 @@ static int estimate_qp(MPVMainEncContext *s, int dry_run) switch(s->codec_id){ case AV_CODEC_ID_MPEG4: if (CONFIG_MPEG4_ENCODER) - ff_clean_mpeg4_qscales(s); + ff_clean_mpeg4_qscales(m); break; case AV_CODEC_ID_H263: case AV_CODEC_ID_H263P: case AV_CODEC_ID_FLV1: if (CONFIG_H263_ENCODER) - ff_clean_h263_qscales(s); + ff_clean_h263_qscales(m); break; default: - ff_init_qscale_tab(s); + ff_init_qscale_tab(m); } s->lambda= s->lambda_table[0]; @@ -3468,8 +3483,9 @@ static int estimate_qp(MPVMainEncContext *s, int dry_run) } /* must be called before writing the header */ -static void set_frame_distances(MPVMainEncContext *s) +static void set_frame_distances(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; av_assert1(s->current_picture_ptr->f->pts != AV_NOPTS_VALUE); s->time = s->current_picture_ptr->f->pts * s->avctx->time_base.num; @@ -3483,8 +3499,9 @@ static void set_frame_distances(MPVMainEncContext *s) } } -static int encode_picture(MPVMainEncContext *s, int picture_number) +static int encode_picture(MPVMainEncContext *m, int picture_number) { + MPVEncContext *const s = &m->common; int i, ret; int bits; int context_count = s->slice_context_count; @@ -3498,9 +3515,9 @@ static int encode_picture(MPVMainEncContext *s, int picture_number) /* we need to initialize some time vars before we can encode B-frames */ // RAL: Condition added for MPEG1VIDEO if (s->out_format == FMT_MPEG1 || (s->h263_pred && !s->msmpeg4_version)) - set_frame_distances(s); + set_frame_distances(m); if(CONFIG_MPEG4_ENCODER && s->codec_id == AV_CODEC_ID_MPEG4) - ff_set_mpeg4_time(s); + ff_set_mpeg4_time(m); s->me.scene_change_score=0; @@ -3515,9 +3532,9 @@ static int encode_picture(MPVMainEncContext *s, int picture_number) } if (s->avctx->flags & AV_CODEC_FLAG_PASS2) { - if (estimate_qp(s,1) < 0) + if (estimate_qp(m, 1) < 0) return -1; - ff_get_2pass_fcode(s); + ff_get_2pass_fcode(m); } else if (!(s->avctx->flags & AV_CODEC_FLAG_QSCALE)) { if(s->pict_type==AV_PICTURE_TYPE_B) s->lambda= s->last_lambda_for[s->pict_type]; @@ -3635,7 +3652,7 @@ static int encode_picture(MPVMainEncContext *s, int picture_number) } } - if (estimate_qp(s, 0) < 0) + if (estimate_qp(m, 0) < 0) return -1; if (s->qscale < 3 && s->max_qcoeff <= 128 && @@ -3709,41 +3726,41 @@ static int encode_picture(MPVMainEncContext *s, int picture_number) switch(s->out_format) { #if CONFIG_MJPEG_ENCODER || CONFIG_AMV_ENCODER case FMT_MJPEG: - ff_mjpeg_amv_encode_picture_header(s); + ff_mjpeg_amv_encode_picture_header(m); break; #endif case FMT_SPEEDHQ: if (CONFIG_SPEEDHQ_ENCODER) - ff_speedhq_encode_picture_header(s); + ff_speedhq_encode_picture_header(m); break; case FMT_H261: if (CONFIG_H261_ENCODER) - ff_h261_encode_picture_header(s, picture_number); + ff_h261_encode_picture_header(m, picture_number); break; case FMT_H263: if (CONFIG_WMV2_ENCODER && s->codec_id == AV_CODEC_ID_WMV2) - ff_wmv2_encode_picture_header(s, picture_number); + ff_wmv2_encode_picture_header(m, picture_number); else if (CONFIG_MSMPEG4_ENCODER && s->msmpeg4_version) - ff_msmpeg4_encode_picture_header(s, picture_number); + ff_msmpeg4_encode_picture_header(m, picture_number); else if (CONFIG_MPEG4_ENCODER && s->h263_pred) { - ret = ff_mpeg4_encode_picture_header(s, picture_number); + ret = ff_mpeg4_encode_picture_header(m, picture_number); if (ret < 0) return ret; } else if (CONFIG_RV10_ENCODER && s->codec_id == AV_CODEC_ID_RV10) { - ret = ff_rv10_encode_picture_header(s, picture_number); + ret = ff_rv10_encode_picture_header(m, picture_number); if (ret < 0) return ret; } else if (CONFIG_RV20_ENCODER && s->codec_id == AV_CODEC_ID_RV20) - ff_rv20_encode_picture_header(s, picture_number); + ff_rv20_encode_picture_header(m, picture_number); else if (CONFIG_FLV_ENCODER && s->codec_id == AV_CODEC_ID_FLV1) - ff_flv_encode_picture_header(s, picture_number); + ff_flv_encode_picture_header(m, picture_number); else if (CONFIG_H263_ENCODER) - ff_h263_encode_picture_header(s, picture_number); + ff_h263_encode_picture_header(m, picture_number); break; case FMT_MPEG1: if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER) - ff_mpeg1_encode_picture_header(s, picture_number); + ff_mpeg1_encode_picture_header(m, picture_number); break; default: av_assert0(0); diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 94ebe0237f..8369254bff 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -33,7 +33,9 @@ #include "mpegvideo.h" typedef MPVContext MPVEncContext; -typedef MPVContext MPVMainEncContext; +typedef struct MPVMainEncContext { + MPVMainContext common; +} MPVMainEncContext; /* mpegvideo_enc common options */ #define FF_MPV_FLAG_SKIP_RD 0x0001 @@ -61,7 +63,8 @@ typedef MPVContext MPVMainEncContext; { "msad", "Sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" } #ifndef FF_MPV_OFFSET -#define FF_MPV_OFFSET(x) offsetof(MPVMainEncContext, x) +#define FF_MPV_MAIN_OFFSET(x) offsetof(MPVMainEncContext, x) +#define FF_MPV_OFFSET(x) FF_MPV_MAIN_OFFSET(common.x) #endif #define FF_MPV_OPT_FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) #define FF_MPV_COMMON_OPTS \ diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c index 0c4d777cc2..9ab7f9e146 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -136,11 +136,12 @@ static av_cold void msmpeg4_encode_init_static(void) } } -av_cold void ff_msmpeg4_encode_init(MPVMainEncContext *s) +av_cold void ff_msmpeg4_encode_init(MPVMainEncContext *m) { static AVOnce init_static_once = AV_ONCE_INIT; + MPVEncContext *const s = &m->common; - ff_msmpeg4_common_init(s); + ff_msmpeg4_common_init(&m->common); if (s->msmpeg4_version >= 4) { s->min_qcoeff = -255; s->max_qcoeff = 255; @@ -152,7 +153,7 @@ av_cold void ff_msmpeg4_encode_init(MPVMainEncContext *s) static void find_best_tables(MSMPEG4EncContext *ms) { - MPVEncContext *const s = &ms->s; + MPVEncContext *const s = &ms->s.common; int i; int best = 0, best_size = INT_MAX; int chroma_best = 0, best_chroma_size = INT_MAX; @@ -216,9 +217,10 @@ static void find_best_tables(MSMPEG4EncContext *ms) } /* write MSMPEG4 compatible frame header */ -void ff_msmpeg4_encode_picture_header(MPVMainEncContext * s, int picture_number) +void ff_msmpeg4_encode_picture_header(MPVMainEncContext *m, int picture_number) { - MSMPEG4EncContext *const ms = (MSMPEG4EncContext*)s; + MSMPEG4EncContext *const ms = (MSMPEG4EncContext*)m; + MPVEncContext *const s = &m->common; find_best_tables(ms); diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index c5088d6790..4c326741df 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -35,8 +35,9 @@ #include "mpegvideoenc.h" #include "libavutil/eval.h" -void ff_write_pass1_stats(MPVMainEncContext *s) +void ff_write_pass1_stats(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; snprintf(s->avctx->stats_out, 256, "in:%d out:%d type:%d q:%d itex:%d ptex:%d mv:%d misc:%d " "fcode:%d bcode:%d mc-var:%"PRId64" var:%"PRId64" icount:%d skipcount:%d hbits:%d;\n", @@ -77,8 +78,9 @@ static inline double bits2qp(RateControlEntry *rce, double bits) return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits + 1) / bits; } -static double get_diff_limited_q(MPVMainEncContext *s, RateControlEntry *rce, double q) +static double get_diff_limited_q(MPVMainEncContext *m, RateControlEntry *rce, double q) { + MPVEncContext *const s = &m->common; RateControlContext *rcc = &s->rc_context; AVCodecContext *a = s->avctx; const int pict_type = rce->new_pict_type; @@ -116,7 +118,7 @@ static double get_diff_limited_q(MPVMainEncContext *s, RateControlEntry *rce, do /** * Get the qmin & qmax for pict_type. */ -static void get_qminmax(int *qmin_ret, int *qmax_ret, MPVMainEncContext *s, int pict_type) +static void get_qminmax(int *qmin_ret, int *qmax_ret, MPVEncContext *s, int pict_type) { int qmin = s->lmin; int qmax = s->lmax; @@ -144,9 +146,10 @@ static void get_qminmax(int *qmin_ret, int *qmax_ret, MPVMainEncContext *s, int *qmax_ret = qmax; } -static double modify_qscale(MPVMainEncContext *s, RateControlEntry *rce, +static double modify_qscale(MPVMainEncContext *m, RateControlEntry *rce, double q, int frame_num) { + MPVEncContext *const s = &m->common; RateControlContext *rcc = &s->rc_context; const double buffer_size = s->avctx->rc_buffer_size; const double fps = get_fps(s->avctx); @@ -235,9 +238,10 @@ static double modify_qscale(MPVMainEncContext *s, RateControlEntry *rce, /** * Modify the bitrate curve from pass1 for one frame. */ -static double get_qscale(MPVMainEncContext *s, RateControlEntry *rce, +static double get_qscale(MPVMainEncContext *m, RateControlEntry *rce, double rate_factor, int frame_num) { + MPVEncContext *const s = &m->common; RateControlContext *rcc = &s->rc_context; AVCodecContext *a = s->avctx; const int pict_type = rce->new_pict_type; @@ -308,8 +312,9 @@ static double get_qscale(MPVMainEncContext *s, RateControlEntry *rce, return q; } -static int init_pass2(MPVMainEncContext *s) +static int init_pass2(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; RateControlContext *rcc = &s->rc_context; AVCodecContext *a = s->avctx; int i, toobig; @@ -368,7 +373,7 @@ static int init_pass2(MPVMainEncContext *s) for (i = 0; i < rcc->num_entries; i++) { RateControlEntry *rce = &rcc->entry[i]; - qscale[i] = get_qscale(s, &rcc->entry[i], rate_factor, i); + qscale[i] = get_qscale(m, &rcc->entry[i], rate_factor, i); rcc->last_qscale_for[rce->pict_type] = qscale[i]; } av_assert0(filter_size % 2 == 1); @@ -377,13 +382,13 @@ static int init_pass2(MPVMainEncContext *s) for (i = FFMAX(0, rcc->num_entries - 300); i < rcc->num_entries; i++) { RateControlEntry *rce = &rcc->entry[i]; - qscale[i] = get_diff_limited_q(s, rce, qscale[i]); + qscale[i] = get_diff_limited_q(m, rce, qscale[i]); } for (i = rcc->num_entries - 1; i >= 0; i--) { RateControlEntry *rce = &rcc->entry[i]; - qscale[i] = get_diff_limited_q(s, rce, qscale[i]); + qscale[i] = get_diff_limited_q(m, rce, qscale[i]); } /* smooth curve */ @@ -413,10 +418,10 @@ static int init_pass2(MPVMainEncContext *s) RateControlEntry *rce = &rcc->entry[i]; double bits; - rce->new_qscale = modify_qscale(s, rce, blurred_qscale[i], i); + rce->new_qscale = modify_qscale(m, rce, blurred_qscale[i], i); bits = qp2bits(rce, rce->new_qscale) + rce->mv_bits + rce->misc_bits; - bits += 8 * ff_vbv_update(s, bits); + bits += 8 * ff_vbv_update(m, bits); rce->expected_bits = expected_bits; expected_bits += bits; @@ -469,8 +474,9 @@ static int init_pass2(MPVMainEncContext *s) return 0; } -av_cold int ff_rate_control_init(MPVMainEncContext *s) +av_cold int ff_rate_control_init(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; RateControlContext *rcc = &s->rc_context; int i, res; static const char * const const_names[] = { @@ -603,8 +609,8 @@ av_cold int ff_rate_control_init(MPVMainEncContext *s) p = next; } - if (init_pass2(s) < 0) { - ff_rate_control_uninit(s); + if (init_pass2(m) < 0) { + ff_rate_control_uninit(m); return -1; } } @@ -658,7 +664,7 @@ av_cold int ff_rate_control_init(MPVMainEncContext *s) rcc->mv_bits_sum[rce.pict_type] += rce.mv_bits; rcc->frame_count[rce.pict_type]++; - get_qscale(s, &rce, rcc->pass1_wanted_bits / rcc->pass1_rc_eq_output_sum, i); + get_qscale(m, &rce, rcc->pass1_wanted_bits / rcc->pass1_rc_eq_output_sum, i); // FIXME misbehaves a little for variable fps rcc->pass1_wanted_bits += s->bit_rate / get_fps(s->avctx); @@ -669,8 +675,9 @@ av_cold int ff_rate_control_init(MPVMainEncContext *s) return 0; } -av_cold void ff_rate_control_uninit(MPVMainEncContext *s) +av_cold void ff_rate_control_uninit(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; RateControlContext *rcc = &s->rc_context; emms_c(); @@ -678,8 +685,9 @@ av_cold void ff_rate_control_uninit(MPVMainEncContext *s) av_freep(&rcc->entry); } -int ff_vbv_update(MPVMainEncContext *s, int frame_size) +int ff_vbv_update(MPVMainEncContext *m, int frame_size) { + MPVEncContext *const s = &m->common; RateControlContext *rcc = &s->rc_context; const double fps = get_fps(s->avctx); const int buffer_size = s->avctx->rc_buffer_size; @@ -737,8 +745,9 @@ static void update_predictor(Predictor *p, double q, double var, double size) p->coeff += new_coeff; } -static void adaptive_quantization(MPVMainEncContext *s, double q) +static void adaptive_quantization(MPVMainEncContext *m, double q) { + MPVEncContext *const s = &m->common; int i; const float lumi_masking = s->avctx->lumi_masking / (128.0 * 128.0); const float dark_masking = s->avctx->dark_masking / (128.0 * 128.0); @@ -854,8 +863,9 @@ static void adaptive_quantization(MPVMainEncContext *s, double q) } } -void ff_get_2pass_fcode(MPVMainEncContext *s) +void ff_get_2pass_fcode(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; RateControlContext *rcc = &s->rc_context; RateControlEntry *rce = &rcc->entry[s->picture_number]; @@ -865,8 +875,9 @@ void ff_get_2pass_fcode(MPVMainEncContext *s) // FIXME rd or at least approx for dquant -float ff_rate_estimate_qscale(MPVMainEncContext *s, int dry_run) +float ff_rate_estimate_qscale(MPVMainEncContext *m, int dry_run) { + MPVEncContext *const s = &m->common; float q; int qmin, qmax; float br_compensation; @@ -971,12 +982,12 @@ float ff_rate_estimate_qscale(MPVMainEncContext *s, int dry_run) rate_factor = rcc->pass1_wanted_bits / rcc->pass1_rc_eq_output_sum * br_compensation; - q = get_qscale(s, rce, rate_factor, picture_number); + q = get_qscale(m, rce, rate_factor, picture_number); if (q < 0) return -1; av_assert0(q > 0.0); - q = get_diff_limited_q(s, rce, q); + q = get_diff_limited_q(m, rce, q); av_assert0(q > 0.0); // FIXME type dependent blur like in 2-pass @@ -990,7 +1001,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *s, int dry_run) } av_assert0(q > 0.0); - q = modify_qscale(s, rce, q, picture_number); + q = modify_qscale(m, rce, q, picture_number); rcc->pass1_wanted_bits += s->bit_rate / fps; @@ -1015,7 +1026,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *s, int dry_run) q = qmax; if (s->adaptive_quant) - adaptive_quantization(s, q); + adaptive_quantization(m, q); else q = (int)(q + 0.5); diff --git a/libavcodec/ratecontrol.h b/libavcodec/ratecontrol.h index 99715ebdfb..16956be04f 100644 --- a/libavcodec/ratecontrol.h +++ b/libavcodec/ratecontrol.h @@ -86,7 +86,6 @@ typedef struct RateControlContext{ AVExpr * rc_eq_eval; }RateControlContext; -#define MPVMainEncContext MPVContext struct MPVMainEncContext; /* rate control */ @@ -96,6 +95,5 @@ void ff_write_pass1_stats(struct MPVMainEncContext *s); void ff_rate_control_uninit(struct MPVMainEncContext *s); int ff_vbv_update(struct MPVMainEncContext *s, int frame_size); void ff_get_2pass_fcode(struct MPVMainEncContext *s); -#undef MPVMainEncContext #endif /* AVCODEC_RATECONTROL_H */ diff --git a/libavcodec/rv10enc.c b/libavcodec/rv10enc.c index 25f3179196..5be04353c1 100644 --- a/libavcodec/rv10enc.c +++ b/libavcodec/rv10enc.c @@ -30,8 +30,9 @@ #include "put_bits.h" #include "rv10.h" -int ff_rv10_encode_picture_header(MPVMainEncContext *s, int picture_number) +int ff_rv10_encode_picture_header(MPVMainEncContext *m, int picture_number) { + MPVEncContext *const s = &m->common; int full_frame= 0; align_put_bits(&s->pb); diff --git a/libavcodec/rv20enc.c b/libavcodec/rv20enc.c index 22bcad9837..1a41071ddd 100644 --- a/libavcodec/rv20enc.c +++ b/libavcodec/rv20enc.c @@ -33,8 +33,9 @@ #include "put_bits.h" #include "rv10.h" -void ff_rv20_encode_picture_header(MPVMainEncContext *s, int picture_number) +void ff_rv20_encode_picture_header(MPVMainEncContext *m, int picture_number) { + MPVEncContext *const s = &m->common; put_bits(&s->pb, 2, s->pict_type); //I 0 vs. 1 ? put_bits(&s->pb, 1, 0); /* unknown bit */ put_bits(&s->pb, 5, s->qscale); diff --git a/libavcodec/snow.c b/libavcodec/snow.c index 0a500695ce..de9741a888 100644 --- a/libavcodec/snow.c +++ b/libavcodec/snow.c @@ -689,6 +689,7 @@ int ff_snow_frame_start(SnowContext *s){ av_cold void ff_snow_common_end(SnowContext *s) { int plane_index, level, orientation, i; + MPVEncContext *const m = &s->m.common; av_freep(&s->spatial_dwt_buffer); av_freep(&s->temp_dwt_buffer); @@ -696,11 +697,11 @@ av_cold void ff_snow_common_end(SnowContext *s) av_freep(&s->temp_idwt_buffer); av_freep(&s->run_buffer); - s->m.me.temp= NULL; - av_freep(&s->m.me.scratchpad); - av_freep(&s->m.me.map); - av_freep(&s->m.me.score_map); - av_freep(&s->m.sc.obmc_scratchpad); + m->me.temp = NULL; + av_freep(&m->me.scratchpad); + av_freep(&m->me.map); + av_freep(&m->me.score_map); + av_freep(&m->sc.obmc_scratchpad); av_freep(&s->block); av_freep(&s->scratchbuf); diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index e169ae601d..028b6b91aa 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -39,6 +39,7 @@ static av_cold int encode_init(AVCodecContext *avctx) { SnowContext *s = avctx->priv_data; + MPVEncContext *const mpv = &s->m.common; int plane_index, ret; int i; @@ -72,18 +73,18 @@ static av_cold int encode_init(AVCodecContext *avctx) s->version=0; - s->m.avctx = avctx; - s->m.bit_rate= avctx->bit_rate; - s->m.lmin = avctx->mb_lmin; - s->m.lmax = avctx->mb_lmax; - s->m.mb_num = (avctx->width * avctx->height + 255) / 256; // For ratecontrol - - s->m.me.temp = - s->m.me.scratchpad = av_calloc(avctx->width + 64, 2*16*2*sizeof(uint8_t)); - s->m.me.map = av_mallocz(ME_MAP_SIZE*sizeof(uint32_t)); - s->m.me.score_map = av_mallocz(ME_MAP_SIZE*sizeof(uint32_t)); - s->m.sc.obmc_scratchpad= av_mallocz(MB_SIZE*MB_SIZE*12*sizeof(uint32_t)); - if (!s->m.me.scratchpad || !s->m.me.map || !s->m.me.score_map || !s->m.sc.obmc_scratchpad) + mpv->avctx = avctx; + mpv->bit_rate= avctx->bit_rate; + mpv->lmin = avctx->mb_lmin; + mpv->lmax = avctx->mb_lmax; + mpv->mb_num = (avctx->width * avctx->height + 255) / 256; // For ratecontrol + + mpv->me.temp = + mpv->me.scratchpad = av_calloc(avctx->width + 64, 2*16*2*sizeof(uint8_t)); + mpv->me.map = av_mallocz(ME_MAP_SIZE*sizeof(uint32_t)); + mpv->me.score_map = av_mallocz(ME_MAP_SIZE*sizeof(uint32_t)); + mpv->sc.obmc_scratchpad= av_mallocz(MB_SIZE*MB_SIZE*12*sizeof(uint32_t)); + if (!mpv->me.scratchpad || !mpv->me.map || !mpv->me.score_map || !mpv->sc.obmc_scratchpad) return AVERROR(ENOMEM); ff_h263_encode_init(&s->m); //mv_penalty @@ -216,6 +217,7 @@ static inline int get_penalty_factor(int lambda, int lambda2, int type){ #define FLAG_QPEL 1 //must be 1 static int encode_q_branch(SnowContext *s, int level, int x, int y){ + MPVEncContext *const mpv = &s->m.common; uint8_t p_buffer[1024]; uint8_t i_buffer[1024]; uint8_t p_state[sizeof(s->block_state)]; @@ -252,7 +254,7 @@ static int encode_q_branch(SnowContext *s, int level, int x, int y){ int16_t last_mv[3][2]; int qpel= !!(s->avctx->flags & AV_CODEC_FLAG_QPEL); //unused const int shift= 1+qpel; - MotionEstContext *c= &s->m.me; + MotionEstContext *c= &mpv->me; int ref_context= av_log2(2*left->ref) + av_log2(2*top->ref); int mx_context= av_log2(2*FFABS(left->mx - top->mx)); int my_context= av_log2(2*FFABS(left->my - top->my)); @@ -281,9 +283,9 @@ static int encode_q_branch(SnowContext *s, int level, int x, int y){ last_mv[2][0]= bottom->mx; last_mv[2][1]= bottom->my; - s->m.mb_stride=2; - s->m.mb_x= - s->m.mb_y= 0; + mpv->mb_stride=2; + mpv->mb_x= + mpv->mb_y= 0; c->skip= 0; av_assert1(c-> stride == stride); @@ -292,7 +294,7 @@ static int encode_q_branch(SnowContext *s, int level, int x, int y){ c->penalty_factor = get_penalty_factor(s->lambda, s->lambda2, c->avctx->me_cmp); c->sub_penalty_factor= get_penalty_factor(s->lambda, s->lambda2, c->avctx->me_sub_cmp); c->mb_penalty_factor = get_penalty_factor(s->lambda, s->lambda2, c->avctx->mb_cmp); - c->current_mv_penalty= c->mv_penalty[s->m.f_code=1] + MAX_DMV; + c->current_mv_penalty= c->mv_penalty[mpv->f_code=1] + MAX_DMV; c->xmin = - x*block_w - 16+3; c->ymin = - y*block_w - 16+3; @@ -323,16 +325,16 @@ static int encode_q_branch(SnowContext *s, int level, int x, int y){ for(ref=0; refref_frames; ref++){ init_ref(c, current_data, s->last_picture[ref]->data, NULL, block_w*x, block_w*y, 0); - ref_score= ff_epzs_motion_search(&s->m, &ref_mx, &ref_my, P, 0, /*ref_index*/ 0, last_mv, - (1<<16)>>shift, level-LOG2_MB_SIZE+4, block_w); + ref_score = ff_epzs_motion_search(mpv, &ref_mx, &ref_my, P, 0, /*ref_index*/ 0, last_mv, + (1<<16)>>shift, level-LOG2_MB_SIZE+4, block_w); av_assert2(ref_mx >= c->xmin); av_assert2(ref_mx <= c->xmax); av_assert2(ref_my >= c->ymin); av_assert2(ref_my <= c->ymax); - ref_score= c->sub_motion_search(&s->m, &ref_mx, &ref_my, ref_score, 0, 0, level-LOG2_MB_SIZE+4, block_w); - ref_score= ff_get_mb_score(&s->m, ref_mx, ref_my, 0, 0, level-LOG2_MB_SIZE+4, block_w, 0); + ref_score = c->sub_motion_search(mpv, &ref_mx, &ref_my, ref_score, 0, 0, level-LOG2_MB_SIZE+4, block_w); + ref_score = ff_get_mb_score(mpv, ref_mx, ref_my, 0, 0, level-LOG2_MB_SIZE+4, block_w, 0); ref_score+= 2*av_log2(2*ref)*c->penalty_factor; if(s->ref_mvs[ref]){ s->ref_mvs[ref][index][0]= ref_mx; @@ -408,7 +410,7 @@ static int encode_q_branch(SnowContext *s, int level, int x, int y){ if (vard <= 64 || vard < varc) c->scene_change_score+= ff_sqrt(vard) - ff_sqrt(varc); else - c->scene_change_score+= s->m.qscale; + c->scene_change_score+= mpv->qscale; } if(level!=s->block_max_depth){ @@ -509,7 +511,7 @@ static int get_dc(SnowContext *s, int mb_x, int mb_y, int plane_index){ const int obmc_stride= plane_index ? (2*block_size)>>s->chroma_h_shift : 2*block_size; const int ref_stride= s->current_picture->linesize[plane_index]; uint8_t *src= s-> input_picture->data[plane_index]; - IDWTELEM *dst= (IDWTELEM*)s->m.sc.obmc_scratchpad + plane_index*block_size*block_size*4; //FIXME change to unsigned + IDWTELEM *dst= (IDWTELEM*)s->m.common.sc.obmc_scratchpad + plane_index*block_size*block_size*4; //FIXME change to unsigned const int b_stride = s->b_width << s->block_max_depth; const int w= p->width; const int h= p->height; @@ -596,6 +598,7 @@ static inline int get_block_bits(SnowContext *s, int x, int y, int w){ } static int get_block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index, uint8_t (*obmc_edged)[MB_SIZE * 2]){ + MPVEncContext *const mpv = &s->m.common; Plane *p= &s->plane[plane_index]; const int block_size = MB_SIZE >> s->block_max_depth; const int block_w = plane_index ? block_size>>s->chroma_h_shift : block_size; @@ -604,7 +607,7 @@ static int get_block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index, uin const int ref_stride= s->current_picture->linesize[plane_index]; uint8_t *dst= s->current_picture->data[plane_index]; uint8_t *src= s-> input_picture->data[plane_index]; - IDWTELEM *pred= (IDWTELEM*)s->m.sc.obmc_scratchpad + plane_index*block_size*block_size*4; + IDWTELEM *pred= (IDWTELEM*)mpv->sc.obmc_scratchpad + plane_index*block_size*block_size*4; uint8_t *cur = s->scratchbuf; uint8_t *tmp = s->emu_edge_buffer; const int b_stride = s->b_width << s->block_max_depth; @@ -667,19 +670,19 @@ static int get_block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index, uin * to improve the score of the whole frame, thus iterative motion * estimation does not always converge. */ if(s->avctx->me_cmp == FF_CMP_W97) - distortion = ff_w97_32_c(&s->m, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, 32); + distortion = ff_w97_32_c(mpv, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, 32); else if(s->avctx->me_cmp == FF_CMP_W53) - distortion = ff_w53_32_c(&s->m, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, 32); + distortion = ff_w53_32_c(mpv, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, 32); else{ distortion = 0; for(i=0; i<4; i++){ int off = sx+16*(i&1) + (sy+16*(i>>1))*ref_stride; - distortion += s->mecc.me_cmp[0](&s->m, src + off, dst + off, ref_stride, 16); + distortion += s->mecc.me_cmp[0](mpv, src + off, dst + off, ref_stride, 16); } } }else{ av_assert2(block_w==8); - distortion = s->mecc.me_cmp[0](&s->m, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, block_w*2); + distortion = s->mecc.me_cmp[0](mpv, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, block_w*2); } if(plane_index==0){ @@ -697,6 +700,7 @@ static int get_block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index, uin } static int get_4block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index){ + MPVEncContext *const mpv = &s->m.common; int i, y2; Plane *p= &s->plane[plane_index]; const int block_size = MB_SIZE >> s->block_max_depth; @@ -743,7 +747,7 @@ static int get_4block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index){ } av_assert1(block_w== 8 || block_w==16); - distortion += s->mecc.me_cmp[block_w==8](&s->m, src + x + y*ref_stride, dst + x + y*ref_stride, ref_stride, block_h); + distortion += s->mecc.me_cmp[block_w==8](mpv, src + x + y*ref_stride, dst + x + y*ref_stride, ref_stride, block_h); } if(plane_index==0){ @@ -1477,6 +1481,7 @@ static int qscale2qlog(int qscale){ static int ratecontrol_1pass(SnowContext *s, AVFrame *pict) { + MPVEncContext *const mpv = &s->m.common; /* Estimate the frame's complexity as a sum of weighted dwt coefficients. * FIXME we know exact mv bits at this point, * but ratecontrol isn't set up to include them. */ @@ -1511,11 +1516,11 @@ static int ratecontrol_1pass(SnowContext *s, AVFrame *pict) coef_sum = (uint64_t)coef_sum * coef_sum >> 16; if(pict->pict_type == AV_PICTURE_TYPE_I){ - s->m.current_picture.mb_var_sum= coef_sum; - s->m.current_picture.mc_mb_var_sum= 0; + mpv->current_picture.mb_var_sum= coef_sum; + mpv->current_picture.mc_mb_var_sum= 0; }else{ - s->m.current_picture.mc_mb_var_sum= coef_sum; - s->m.current_picture.mb_var_sum= 0; + mpv->current_picture.mc_mb_var_sum= coef_sum; + mpv->current_picture.mb_var_sum= 0; } pict->quality= ff_rate_estimate_qscale(&s->m, 1); @@ -1557,6 +1562,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet) { SnowContext *s = avctx->priv_data; + MPVEncContext *const mpv = &s->m.common; RangeCoder * const c= &s->c; AVFrame *pic; const int width= s->avctx->width; @@ -1589,9 +1595,9 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, pic->pict_type = pict->pict_type; pic->quality = pict->quality; - s->m.picture_number= avctx->frame_number; + mpv->picture_number= avctx->frame_number; if(avctx->flags&AV_CODEC_FLAG_PASS2){ - s->m.pict_type = pic->pict_type = s->m.rc_context.entry[avctx->frame_number].new_pict_type; + mpv->pict_type = pic->pict_type = mpv->rc_context.entry[avctx->frame_number].new_pict_type; s->keyframe = pic->pict_type == AV_PICTURE_TYPE_I; if(!(avctx->flags&AV_CODEC_FLAG_QSCALE)) { pic->quality = ff_rate_estimate_qscale(&s->m, 0); @@ -1600,7 +1606,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, } }else{ s->keyframe= avctx->gop_size==0 || avctx->frame_number % avctx->gop_size == 0; - s->m.pict_type = pic->pict_type = s->keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; + mpv->pict_type = pic->pict_type = s->keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; } if(s->pass1_rc && avctx->frame_number == 0) @@ -1634,9 +1640,9 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, ff_snow_frame_start(s); - s->m.current_picture_ptr= &s->m.current_picture; - s->m.current_picture.f = s->current_picture; - s->m.current_picture.f->pts = pict->pts; + mpv->current_picture_ptr= &mpv->current_picture; + mpv->current_picture.f = s->current_picture; + mpv->current_picture.f->pts = pict->pts; if(pic->pict_type == AV_PICTURE_TYPE_P){ int block_width = (width +15)>>4; int block_height= (height+15)>>4; @@ -1645,37 +1651,37 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, av_assert0(s->current_picture->data[0]); av_assert0(s->last_picture[0]->data[0]); - s->m.avctx= s->avctx; - s->m. last_picture.f = s->last_picture[0]; - s->m. new_picture.f = s->input_picture; - s->m. last_picture_ptr= &s->m. last_picture; - s->m.linesize = stride; - s->m.uvlinesize= s->current_picture->linesize[1]; - s->m.width = width; - s->m.height= height; - s->m.mb_width = block_width; - s->m.mb_height= block_height; - s->m.mb_stride= s->m.mb_width+1; - s->m.b8_stride= 2*s->m.mb_width+1; - s->m.f_code=1; - s->m.pict_type = pic->pict_type; - s->m.motion_est= s->motion_est; - s->m.me.scene_change_score=0; - s->m.me.dia_size = avctx->dia_size; - s->m.quarter_sample= (s->avctx->flags & AV_CODEC_FLAG_QPEL)!=0; - s->m.out_format= FMT_H263; - s->m.unrestricted_mv= 1; - - s->m.lambda = s->lambda; - s->m.qscale= (s->m.lambda*139 + FF_LAMBDA_SCALE*64) >> (FF_LAMBDA_SHIFT + 7); - s->lambda2= s->m.lambda2= (s->m.lambda*s->m.lambda + FF_LAMBDA_SCALE/2) >> FF_LAMBDA_SHIFT; - - s->m.mecc= s->mecc; //move - s->m.qdsp= s->qdsp; //move - s->m.hdsp = s->hdsp; - ff_init_me(&s->m); - s->hdsp = s->m.hdsp; - s->mecc= s->m.mecc; + mpv->avctx= s->avctx; + mpv-> last_picture.f = s->last_picture[0]; + mpv-> new_picture.f = s->input_picture; + mpv-> last_picture_ptr= &mpv-> last_picture; + mpv->linesize = stride; + mpv->uvlinesize= s->current_picture->linesize[1]; + mpv->width = width; + mpv->height= height; + mpv->mb_width = block_width; + mpv->mb_height= block_height; + mpv->mb_stride= mpv->mb_width+1; + mpv->b8_stride= 2*mpv->mb_width+1; + mpv->f_code=1; + mpv->pict_type = pic->pict_type; + mpv->motion_est= s->motion_est; + mpv->me.scene_change_score=0; + mpv->me.dia_size = avctx->dia_size; + mpv->quarter_sample= (s->avctx->flags & AV_CODEC_FLAG_QPEL)!=0; + mpv->out_format= FMT_H263; + mpv->unrestricted_mv= 1; + + mpv->lambda = s->lambda; + mpv->qscale= (mpv->lambda*139 + FF_LAMBDA_SCALE*64) >> (FF_LAMBDA_SHIFT + 7); + s->lambda2= mpv->lambda2= (mpv->lambda*mpv->lambda + FF_LAMBDA_SCALE/2) >> FF_LAMBDA_SHIFT; + + mpv->mecc= s->mecc; //move + mpv->qdsp= s->qdsp; //move + mpv->hdsp = s->hdsp; + ff_init_me(mpv); + s->hdsp = mpv->hdsp; + s->mecc= mpv->mecc; } if(s->pass1_rc){ @@ -1696,7 +1702,7 @@ redo_frame: return AVERROR(EINVAL); } - s->m.pict_type = pic->pict_type; + mpv->pict_type = pic->pict_type; s->qbias = pic->pict_type == AV_PICTURE_TYPE_P ? 2 : 0; ff_snow_common_init_after_header(avctx); @@ -1708,9 +1714,9 @@ redo_frame: } encode_header(s); - s->m.misc_bits = 8*(s->c.bytestream - s->c.bytestream_start); + mpv->misc_bits = 8*(s->c.bytestream - s->c.bytestream_start); encode_blocks(s, 1); - s->m.mv_bits = 8*(s->c.bytestream - s->c.bytestream_start) - s->m.misc_bits; + mpv->mv_bits = 8*(s->c.bytestream - s->c.bytestream_start) - mpv->misc_bits; for(plane_index=0; plane_index < s->nb_planes; plane_index++){ Plane *p= &s->plane[plane_index]; @@ -1732,7 +1738,7 @@ redo_frame: if( plane_index==0 && pic->pict_type == AV_PICTURE_TYPE_P && !(avctx->flags&AV_CODEC_FLAG_PASS2) - && s->m.me.scene_change_score > s->scenechange_threshold){ + && mpv->me.scene_change_score > s->scenechange_threshold){ ff_init_range_encoder(c, pkt->data, pkt->size); ff_build_rac_states(c, (1LL<<32)/20, 256-8); pic->pict_type= AV_PICTURE_TYPE_I; @@ -1841,18 +1847,18 @@ redo_frame: s->current_picture->coded_picture_number = avctx->frame_number; s->current_picture->pict_type = pic->pict_type; s->current_picture->quality = pic->quality; - s->m.frame_bits = 8*(s->c.bytestream - s->c.bytestream_start); - s->m.p_tex_bits = s->m.frame_bits - s->m.misc_bits - s->m.mv_bits; - s->m.current_picture.f->display_picture_number = - s->m.current_picture.f->coded_picture_number = avctx->frame_number; - s->m.current_picture.f->quality = pic->quality; - s->m.total_bits += 8*(s->c.bytestream - s->c.bytestream_start); + mpv->frame_bits = 8*(s->c.bytestream - s->c.bytestream_start); + mpv->p_tex_bits = mpv->frame_bits - mpv->misc_bits - mpv->mv_bits; + mpv->current_picture.f->display_picture_number = + mpv->current_picture.f->coded_picture_number = avctx->frame_number; + mpv->current_picture.f->quality = pic->quality; + mpv->total_bits += 8*(s->c.bytestream - s->c.bytestream_start); if(s->pass1_rc) if (ff_rate_estimate_qscale(&s->m, 0) < 0) return -1; if(avctx->flags&AV_CODEC_FLAG_PASS1) ff_write_pass1_stats(&s->m); - s->m.last_pict_type = s->m.pict_type; + mpv->last_pict_type = mpv->pict_type; emms_c(); @@ -1901,7 +1907,7 @@ static const AVOption options[] = { "defined in the section 'Expression Evaluation', the following functions are available: " "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", - OFFSET(m.rc_eq), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE }, + OFFSET(m.common.rc_eq), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE }, { NULL }, }; diff --git a/libavcodec/speedhqenc.c b/libavcodec/speedhqenc.c index fb4d426b46..e511e8bc47 100644 --- a/libavcodec/speedhqenc.c +++ b/libavcodec/speedhqenc.c @@ -90,8 +90,9 @@ static av_cold void speedhq_init_static_data(void) ff_mpeg1_init_uni_ac_vlc(&ff_rl_speedhq, uni_speedhq_ac_vlc_len); } -av_cold int ff_speedhq_encode_init(MPVMainEncContext *s) +av_cold int ff_speedhq_encode_init(MPVMainEncContext *m) { + MPVEncContext *const s = &m->common; static AVOnce init_static_once = AV_ONCE_INIT; av_assert0(s->slice_context_count == 1); @@ -128,9 +129,10 @@ av_cold int ff_speedhq_encode_init(MPVMainEncContext *s) return 0; } -void ff_speedhq_encode_picture_header(MPVMainEncContext *s) +void ff_speedhq_encode_picture_header(MPVMainEncContext *m) { - SpeedHQEncContext *ctx = (SpeedHQEncContext*)s; + SpeedHQEncContext *ctx = (SpeedHQEncContext*)m; + MPVEncContext *const s = &m->common; put_bits_le(&s->pb, 8, 100 - s->qscale * 2); /* FIXME why doubled */ put_bits_le(&s->pb, 24, 4); /* no second field */ diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c index 7af82bb3ac..5e26c1073a 100644 --- a/libavcodec/svq1enc.c +++ b/libavcodec/svq1enc.c @@ -253,6 +253,7 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, unsigned char *decoded_plane, int width, int height, int src_stride, int stride) { + MPVEncContext *const mpv = &s->m.common; int x, y; int i; int block_width, block_height; @@ -271,64 +272,64 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, block_height = (height + 15) / 16; if (s->pict_type == AV_PICTURE_TYPE_P) { - s->m.avctx = s->avctx; - s->m.current_picture_ptr = &s->m.current_picture; - s->m.last_picture_ptr = &s->m.last_picture; - s->m.last_picture.f->data[0] = ref_plane; - s->m.linesize = - s->m.last_picture.f->linesize[0] = - s->m.new_picture.f->linesize[0] = - s->m.current_picture.f->linesize[0] = stride; - s->m.width = width; - s->m.height = height; - s->m.mb_width = block_width; - s->m.mb_height = block_height; - s->m.mb_stride = s->m.mb_width + 1; - s->m.b8_stride = 2 * s->m.mb_width + 1; - s->m.f_code = 1; - s->m.pict_type = s->pict_type; - s->m.motion_est = s->motion_est; - s->m.me.scene_change_score = 0; - // s->m.out_format = FMT_H263; - // s->m.unrestricted_mv = 1; - s->m.lambda = s->quality; - s->m.qscale = s->m.lambda * 139 + + mpv->avctx = s->avctx; + mpv->current_picture_ptr = &mpv->current_picture; + mpv->last_picture_ptr = &mpv->last_picture; + mpv->last_picture.f->data[0] = ref_plane; + mpv->linesize = + mpv->last_picture.f->linesize[0] = + mpv->new_picture.f->linesize[0] = + mpv->current_picture.f->linesize[0] = stride; + mpv->width = width; + mpv->height = height; + mpv->mb_width = block_width; + mpv->mb_height = block_height; + mpv->mb_stride = mpv->mb_width + 1; + mpv->b8_stride = 2 * mpv->mb_width + 1; + mpv->f_code = 1; + mpv->pict_type = s->pict_type; + mpv->motion_est = s->motion_est; + mpv->me.scene_change_score = 0; + // mpv->out_format = FMT_H263; + // mpv->unrestricted_mv = 1; + mpv->lambda = s->quality; + mpv->qscale = mpv->lambda * 139 + FF_LAMBDA_SCALE * 64 >> FF_LAMBDA_SHIFT + 7; - s->m.lambda2 = s->m.lambda * s->m.lambda + + mpv->lambda2 = mpv->lambda * mpv->lambda + FF_LAMBDA_SCALE / 2 >> FF_LAMBDA_SHIFT; if (!s->motion_val8[plane]) { - s->motion_val8[plane] = av_mallocz((s->m.b8_stride * + s->motion_val8[plane] = av_mallocz((mpv->b8_stride * block_height * 2 + 2) * 2 * sizeof(int16_t)); - s->motion_val16[plane] = av_mallocz((s->m.mb_stride * + s->motion_val16[plane] = av_mallocz((mpv->mb_stride * (block_height + 2) + 1) * 2 * sizeof(int16_t)); if (!s->motion_val8[plane] || !s->motion_val16[plane]) return AVERROR(ENOMEM); } - s->m.mb_type = s->mb_type; + mpv->mb_type = s->mb_type; // dummies, to avoid segfaults - s->m.current_picture.mb_mean = (uint8_t *)s->dummy; - s->m.current_picture.mb_var = (uint16_t *)s->dummy; - s->m.current_picture.mc_mb_var = (uint16_t *)s->dummy; - s->m.current_picture.mb_type = s->dummy; - - s->m.current_picture.motion_val[0] = s->motion_val8[plane] + 2; - s->m.p_mv_table = s->motion_val16[plane] + - s->m.mb_stride + 1; - s->m.mecc = s->mecc; // move - ff_init_me(&s->m); - - s->m.me.dia_size = s->avctx->dia_size; - s->m.first_slice_line = 1; + mpv->current_picture.mb_mean = (uint8_t *)s->dummy; + mpv->current_picture.mb_var = (uint16_t *)s->dummy; + mpv->current_picture.mc_mb_var = (uint16_t *)s->dummy; + mpv->current_picture.mb_type = s->dummy; + + mpv->current_picture.motion_val[0] = s->motion_val8[plane] + 2; + mpv->p_mv_table = s->motion_val16[plane] + + mpv->mb_stride + 1; + mpv->mecc = s->mecc; // move + ff_init_me(mpv); + + mpv->me.dia_size = s->avctx->dia_size; + mpv->first_slice_line = 1; for (y = 0; y < block_height; y++) { - s->m.new_picture.f->data[0] = src - y * 16 * stride; // ugly - s->m.mb_y = y; + mpv->new_picture.f->data[0] = src - y * 16 * stride; // ugly + mpv->mb_y = y; for (i = 0; i < 16 && i + 16 * y < height; i++) { memcpy(&src[i * stride], &src_plane[(i + 16 * y) * src_stride], @@ -341,20 +342,20 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, 16 * block_width); for (x = 0; x < block_width; x++) { - s->m.mb_x = x; - init_block_index(&s->m); + mpv->mb_x = x; + init_block_index(mpv); - ff_estimate_p_frame_motion(&s->m, x, y); + ff_estimate_p_frame_motion(mpv, x, y); } - s->m.first_slice_line = 0; + mpv->first_slice_line = 0; } - ff_fix_long_p_mvs(&s->m, CANDIDATE_MB_TYPE_INTRA); - ff_fix_long_mvs(&s->m, NULL, 0, s->m.p_mv_table, s->m.f_code, + ff_fix_long_p_mvs(mpv, CANDIDATE_MB_TYPE_INTRA); + ff_fix_long_mvs(mpv, NULL, 0, mpv->p_mv_table, mpv->f_code, CANDIDATE_MB_TYPE_INTER, 0); } - s->m.first_slice_line = 1; + mpv->first_slice_line = 1; for (y = 0; y < block_height; y++) { for (i = 0; i < 16 && i + 16 * y < height; i++) { memcpy(&src[i * stride], &src_plane[(i + 16 * y) * src_stride], @@ -365,7 +366,7 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, for (; i < 16 && i + 16 * y < 16 * block_height; i++) memcpy(&src[i * stride], &src[(i - 1) * stride], 16 * block_width); - s->m.mb_y = y; + mpv->mb_y = y; for (x = 0; x < block_width; x++) { uint8_t reorder_buffer[2][6][7 * 32]; int count[2][6]; @@ -380,11 +381,11 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, return -1; } - s->m.mb_x = x; - init_block_index(&s->m); + mpv->mb_x = x; + init_block_index(mpv); if (s->pict_type == AV_PICTURE_TYPE_I || - (s->m.mb_type[x + y * s->m.mb_stride] & + (mpv->mb_type[x + y * mpv->mb_stride] & CANDIDATE_MB_TYPE_INTRA)) { for (i = 0; i < 6; i++) init_put_bits(&s->reorder_pb[i], reorder_buffer[0][i], @@ -410,8 +411,8 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, int mx, my, pred_x, pred_y, dxy; int16_t *motion_ptr; - motion_ptr = ff_h263_pred_motion(&s->m, 0, 0, &pred_x, &pred_y); - if (s->m.mb_type[x + y * s->m.mb_stride] & + motion_ptr = ff_h263_pred_motion(mpv, 0, 0, &pred_x, &pred_y); + if (mpv->mb_type[x + y * mpv->mb_stride] & CANDIDATE_MB_TYPE_INTER) { for (i = 0; i < 6; i++) init_put_bits(&s->reorder_pb[i], reorder_buffer[1][i], @@ -419,16 +420,16 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, put_bits(&s->reorder_pb[5], vlc[1], vlc[0]); - s->m.pb = s->reorder_pb[5]; + mpv->pb = s->reorder_pb[5]; mx = motion_ptr[0]; my = motion_ptr[1]; av_assert1(mx >= -32 && mx <= 31); av_assert1(my >= -32 && my <= 31); av_assert1(pred_x >= -32 && pred_x <= 31); av_assert1(pred_y >= -32 && pred_y <= 31); - ff_h263_encode_motion(&s->m.pb, mx - pred_x, 1); - ff_h263_encode_motion(&s->m.pb, my - pred_y, 1); - s->reorder_pb[5] = s->m.pb; + ff_h263_encode_motion(&mpv->pb, mx - pred_x, 1); + ff_h263_encode_motion(&mpv->pb, my - pred_y, 1); + s->reorder_pb[5] = mpv->pb; score[1] += lambda * put_bits_count(&s->reorder_pb[5]); dxy = (mx & 1) + 2 * (my & 1); @@ -463,10 +464,10 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, motion_ptr[1] = motion_ptr[2] = motion_ptr[3] = - motion_ptr[0 + 2 * s->m.b8_stride] = - motion_ptr[1 + 2 * s->m.b8_stride] = - motion_ptr[2 + 2 * s->m.b8_stride] = - motion_ptr[3 + 2 * s->m.b8_stride] = 0; + motion_ptr[0 + 2 * mpv->b8_stride] = + motion_ptr[1 + 2 * mpv->b8_stride] = + motion_ptr[2 + 2 * mpv->b8_stride] = + motion_ptr[3 + 2 * mpv->b8_stride] = 0; } } @@ -479,7 +480,7 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, if (best == 0) s->hdsp.put_pixels_tab[0][0](decoded, temp, stride, 16); } - s->m.first_slice_line = 0; + mpv->first_slice_line = 0; } return 0; } @@ -487,6 +488,7 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, static av_cold int svq1_encode_end(AVCodecContext *avctx) { SVQ1EncContext *const s = avctx->priv_data; + MPVEncContext *const mpv = &s->m.common; int i; if (avctx->frame_number) @@ -494,12 +496,12 @@ static av_cold int svq1_encode_end(AVCodecContext *avctx) s->rd_total / (double)(avctx->width * avctx->height * avctx->frame_number)); - s->m.mb_type = NULL; - ff_mpv_common_end(&s->m); + mpv->mb_type = NULL; + ff_mpv_common_end(&s->m.common); - av_freep(&s->m.me.scratchpad); - av_freep(&s->m.me.map); - av_freep(&s->m.me.score_map); + av_freep(&mpv->me.scratchpad); + av_freep(&mpv->me.map); + av_freep(&mpv->me.score_map); av_freep(&s->mb_type); av_freep(&s->dummy); av_freep(&s->scratchbuf); @@ -518,6 +520,7 @@ static av_cold int svq1_encode_end(AVCodecContext *avctx) static av_cold int svq1_encode_init(AVCodecContext *avctx) { SVQ1EncContext *const s = avctx->priv_data; + MPVEncContext *const mpv = &s->m.common; int ret; if (avctx->width >= 4096 || avctx->height >= 4096) { @@ -527,7 +530,7 @@ static av_cold int svq1_encode_init(AVCodecContext *avctx) ff_hpeldsp_init(&s->hdsp, avctx->flags); ff_me_cmp_init(&s->mecc, avctx); - ff_mpegvideoencdsp_init(&s->m.mpvencdsp, avctx); + ff_mpegvideoencdsp_init(&mpv->mpvencdsp, avctx); s->current_picture = av_frame_alloc(); s->last_picture = av_frame_alloc(); @@ -545,26 +548,26 @@ static av_cold int svq1_encode_init(AVCodecContext *avctx) s->c_block_height = (s->frame_height / 4 + 15) / 16; s->avctx = avctx; - s->m.avctx = avctx; + mpv->avctx = avctx; - if ((ret = ff_mpv_common_init(&s->m)) < 0) { + if ((ret = ff_mpv_common_init(&s->m.common)) < 0) { return ret; } - s->m.picture_structure = PICT_FRAME; - s->m.me.temp = - s->m.me.scratchpad = av_mallocz((avctx->width + 64) * + mpv->picture_structure = PICT_FRAME; + mpv->me.temp = + mpv->me.scratchpad = av_mallocz((avctx->width + 64) * 2 * 16 * 2 * sizeof(uint8_t)); - s->m.me.map = av_mallocz(ME_MAP_SIZE * sizeof(uint32_t)); - s->m.me.score_map = av_mallocz(ME_MAP_SIZE * sizeof(uint32_t)); + mpv->me.map = av_mallocz(ME_MAP_SIZE * sizeof(uint32_t)); + mpv->me.score_map = av_mallocz(ME_MAP_SIZE * sizeof(uint32_t)); s->mb_type = av_mallocz((s->y_block_width + 1) * s->y_block_height * sizeof(int16_t)); s->dummy = av_mallocz((s->y_block_width + 1) * s->y_block_height * sizeof(int32_t)); s->ssd_int8_vs_int16 = ssd_int8_vs_int16_c; - if (!s->m.me.temp || !s->m.me.scratchpad || !s->m.me.map || - !s->m.me.score_map || !s->mb_type || !s->dummy) { + if (!mpv->me.temp || !mpv->me.scratchpad || !mpv->me.map || + !mpv->me.score_map || !s->mb_type || !s->dummy) { return AVERROR(ENOMEM); } diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c index 14f817f2d6..ab55af33c3 100644 --- a/libavcodec/wmv2enc.c +++ b/libavcodec/wmv2enc.c @@ -43,7 +43,7 @@ typedef struct WMV2EncContext { static int encode_ext_header(WMV2EncContext *w) { - MPVMainEncContext *const s = &w->msmpeg4.s; + MPVEncContext *const s = &w->msmpeg4.s.common; PutBitContext pb; int code; @@ -70,13 +70,14 @@ static int encode_ext_header(WMV2EncContext *w) static av_cold int wmv2_encode_init(AVCodecContext *avctx) { WMV2EncContext *const w = avctx->priv_data; - MPVMainEncContext *const s = &w->msmpeg4.s; + MPVMainEncContext *const m = &w->msmpeg4.s; + MPVEncContext *const s = &m->common; s->private_ctx = &w->common; if (ff_mpv_encode_init(avctx) < 0) return -1; - ff_wmv2_common_init(s); + ff_wmv2_common_init(&m->common); avctx->extradata_size = 4; avctx->extradata = av_mallocz(avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); @@ -88,9 +89,10 @@ static av_cold int wmv2_encode_init(AVCodecContext *avctx) return 0; } -int ff_wmv2_encode_picture_header(MPVMainEncContext *s, int picture_number) +int ff_wmv2_encode_picture_header(MPVMainEncContext *m, int picture_number) { - WMV2EncContext *const w = (WMV2EncContext *) s; + WMV2EncContext *const w = (WMV2EncContext *) m; + MPVEncContext *const s = &m->common; put_bits(&s->pb, 1, s->pict_type - 1); if (s->pict_type == AV_PICTURE_TYPE_I) From patchwork Sun Jan 30 06:27:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33918 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770728iov; Sat, 29 Jan 2022 22:30:50 -0800 (PST) X-Google-Smtp-Source: ABdhPJwiu5MAxp6+toTCwOlx4efIBNNjmCn6F2jRTUXQaDxyNMx3s81BWkjhXJSDdEJ8WSxwnMg5 X-Received: by 2002:a17:906:c5b:: with SMTP id t27mr12792090ejf.317.1643524250446; Sat, 29 Jan 2022 22:30:50 -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 w6si7402312edu.367.2022.01.29.22.30.50; Sat, 29 Jan 2022 22:30:50 -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="T/khhghW"; 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 488E568B204; Sun, 30 Jan 2022 08:28:44 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2051.outbound.protection.outlook.com [40.92.90.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7823B68B1F6 for ; Sun, 30 Jan 2022 08:28:42 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fuNLqXds10MFt+oyo2B87XsDGsfBX+qdBrVAVb3Rw6B44soNlSIu0og3xZnfM3Wm6dIOiN1cvoB7QXv6IQUXPq59o0Kp9cRBIzYfwGuMN1enQgO9Fz7P3IRSrZVaTWP+OH8HzGqPKzg2KcBUwlfFnRtBTlbjafc3XlMzsropDyCEkbLLIJGRYDD7Tro9cJY+iDYCKqNkU4+ZysRVTzLwRe9L/e0HDD9LbUPJDoCQrLGY1tjdCGyVZxML6sWrNpwvraLi8cATlYOwcrwzi8KE6+GwEe45uDm6FEAXKMqJbxsIDq7BmnjyQeuulk5k0hPE8ygtwd0FRYHqj3P+si6PUQ== 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=ib/G6v+Ho++EsJ3OR21EJ0DOqkx3uAqTp5I8wtBJ9T0=; b=gezq4oii+/ual1F9U4sHsEscHtIgcGUVlCLwTZyT8qXQrpE6mLvSW6ffy5XT3Jw3DEQU4NtwO79SuD6mU9TFdpqZsiW6gr3feVwuwOyHKUMZ2SC7+3iRMHSXM+zWYi4SW1J55/1Fk0SRHWHJakrHYqaZGsBfao6MoBPVADHcXCCgm1FyebkcNFSUOXBTWydobG9bP3MIfZYmwvint9GZwaZanyTbJykt+k1hfZRdG98ILM/8MnXBlem8Gpp146UhYbDOLVdnT8NJJqchbVx8RxDzNJI3mwQTTpRA17QKUQKti7bP8d442cqZ9UBZ96wBLUMGQLl/O1hKMDYhgiJVcw== 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=ib/G6v+Ho++EsJ3OR21EJ0DOqkx3uAqTp5I8wtBJ9T0=; b=T/khhghWrYQgO1mkykKBdnuhj1YaLLmXdPZHRaAADrmudWdC0Ri5d6tNHT1UgL7tW+3SQ91wojdV+/KYHZ7gG0g8hkG2WwJOrRDZJ3MdnBq4t32lREi18pzTr1hp3EN0SrKMMMnaObEnkh0ph7SCrKqLrGoZGF4/er1AD+HJ4iW45tDZFP5180PQDUfaNVOffP1qaU/PZor1l8wieJ+XNuY/EJMiPMluo21PQ0lj3Nv+hu+X1cV10mcRexQLyFRQ/b8whrIioAtNZ7m1jUHhScqRoIS7oNASwsr6WlmP/0+rWkSxlp/H/l5Z0f7+V6E8DXRCq3cZQyfV4x70X5RFGQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:41 +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:28:41 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:27 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [LsDCflzV2hTGc+oEcRXOfoKt8JLP8z4G] 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-18-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4e2244da-df12-4936-996a-08d9e3b9c1e8 X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QhqZe7uwQz/nyn+pM9Kr1dZaOyujpn4Mhp3Jf+nC+RUutpLakwo552C5zNp/fovpQg0KTSk+h4Ojwio38w3DE9kQytbvIT/+6f0Ri67YwQL0MuAlKEAB0aLWpKpEXFCkL8v7RIj84gCY/PQZdOPB75I90Ak48ftFOCRsGt6u/sTRsaK+fGkkpUReobgAK6NRctDB3CqF1k2EfGUDAQ9s+Al2+aog4w+uNHs8PQBeEpA/pwOFT0DHM8jzIHvbUgagguAEX+cJfPOsKjJXu1Kvqf0v0VAxZA1VZ1iQv2TY+YRq9yMH40FvIvlFXhO/oGbrP6LfLXaeCd8GUXs3E3WBLrElyKH1h9ujMVjVKRRWGf6/eFYtnYY93WOW9GJzg9yoZMfczGRMRTILIYXDQYzNblE8JXOolzk5tRUX4xAXnK42AyxsxTy5o1aN7XhbYYAsrh0g240i63btX0cyHDaT3Grst0QdrUYquC30WGg5WkBTf2meXf25Y3vuOjWX7Q0Ec17d24CaVWTXQX3H+xTRs56cPVasgM551+/3XDIn+dPROfkRacT6smZbsr0gkYhm X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: GtMrREKIeGrK824toV3SLoMfWOK0d9hvXqcwAh00zLXg+oV1AxNes4p8Ip6YleqTTzjItXh65rVJNTegMfxaq8CfT8JZesjrAqwLWwrk1DHn2H4b5riUNNbX5lEtuix54KstzEJ3xPeJhDIEePZuy6wWTBrTrI1sjxh/UciAq4ouogSoPf50IHjcBTdF7UtJbzZZ+N3R7wpdWP+kSQrmnlSA5LNBt1r+hS4HGC4e0exwDNcHl1uSxR1kedy7WtCYr2fTsBnVj60ivSCAu9+N9T8hLDukDeSKqaw6Q3I+QsLKceDrOIFq7G1Zr0OL3sZZqGUjawZb0lW2hYOCfQ6yZTdiQWfAr2uUgE8W6dFegJyWRXO6TtImtOnATC7CtUqhZuWUMrAevV4oqrO/5KHV6s0YWjor47MGqB+kSI9XL3xWKV2AfZKq8rUqAPZIhelKH6xYP5UO+thAKC3BcDGKmcpYwyOOaOtVtzgC2UFcLQR6u5N+uMKZg+2KIbwjf4t+iC5OvPheiQpotT6zqQtVbz0JjUHPbp40/TOElK5+jTNvtGwg6FHRPyI3NS4mgrk3+HSYBERTo6A4196LNGEt1jonOkoCHU3F1u1chVcYu9UuS48G0r2U37soDy5YD5QMrJHOhhlc/joO9+MW1zxC9jDD8uM9pVpmVAlodQ9W+uzn0+ehkYmGDmdYPMZqVP6LcIHAa6NEQIthazBDX7drCzL62ndoJM1nnp/hopAosRm/lZ+mKMBSomDbi1D+pbl5DcPZzZsNJc0kt8GNcIU9nzs8/ToS57BZ6lor8BUmflAg/68Ns468o8mS1jngvsLuTyZA7FgoPWETVRlksXVIetA+sRoE7vKUmeBP49ROBEnpTXFkWTpSgAa6vasiF+afYPC3c9Bet+y6ILbqcaKPmNn0e51q5GG5C4KgjsRep/FE8/za8GOzgIhaP92wFMCgOE/EZLqVVTtNO0Jb+7NxQg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e2244da-df12-4936-996a-08d9e3b9c1e8 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:28:41.2274 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 19/41] avcodec/mpegvideoenc: Move tmp bframes 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: RLqCxPW2gjK8 Also move b_frame_strategy and b_sensitivity; they are all only used by an encoder's main thread. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 5 ---- libavcodec/mpegvideo_enc.c | 55 +++++++++++++++++++------------------- libavcodec/mpegvideoenc.h | 13 ++++++--- 3 files changed, 36 insertions(+), 37 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 1bad288ea5..e83061fa92 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -530,11 +530,6 @@ typedef struct MPVContext { int error_rate; - /* temporary frames used by b_frame_strategy = 2 */ - AVFrame *tmp_frames[MAX_B_FRAMES + 2]; - int b_frame_strategy; - int b_sensitivity; - /* frame skip options for encoding */ int frame_skip_threshold; int frame_skip_factor; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index a42cc0fa51..bbff65ef41 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -610,10 +610,10 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) return AVERROR(EINVAL); } - if (s->b_frame_strategy && (avctx->flags & AV_CODEC_FLAG_PASS2)) { + if (m->b_frame_strategy && (avctx->flags & AV_CODEC_FLAG_PASS2)) { av_log(avctx, AV_LOG_INFO, "notice: b_frame_strategy only affects the first pass\n"); - s->b_frame_strategy = 0; + m->b_frame_strategy = 0; } i = av_gcd(avctx->time_base.den, avctx->time_base.num); @@ -902,17 +902,17 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) if ((ret = ff_rate_control_init(m)) < 0) return ret; - if (s->b_frame_strategy == 2) { + if (m->b_frame_strategy == 2) { for (i = 0; i < s->max_b_frames + 2; i++) { - s->tmp_frames[i] = av_frame_alloc(); - if (!s->tmp_frames[i]) + m->tmp_frames[i] = av_frame_alloc(); + if (!m->tmp_frames[i]) return AVERROR(ENOMEM); - s->tmp_frames[i]->format = AV_PIX_FMT_YUV420P; - s->tmp_frames[i]->width = s->width >> s->brd_scale; - s->tmp_frames[i]->height = s->height >> s->brd_scale; + m->tmp_frames[i]->format = AV_PIX_FMT_YUV420P; + m->tmp_frames[i]->width = s->width >> s->brd_scale; + m->tmp_frames[i]->height = s->height >> s->brd_scale; - ret = av_frame_get_buffer(s->tmp_frames[i], 0); + ret = av_frame_get_buffer(m->tmp_frames[i], 0); if (ret < 0) return ret; } @@ -933,14 +933,13 @@ av_cold int ff_mpv_encode_end(AVCodecContext *avctx) { MPVMainEncContext *const m = avctx->priv_data; MPVMainContext *const s = &m->common; - int i; ff_rate_control_uninit(m); ff_mpv_common_end(&m->common); - for (i = 0; i < FF_ARRAY_ELEMS(s->tmp_frames); i++) - av_frame_free(&s->tmp_frames[i]); + for (int i = 0; i < FF_ARRAY_ELEMS(m->tmp_frames); i++) + av_frame_free(&m->tmp_frames[i]); ff_mpv_picture_free(avctx, &s->new_picture); @@ -1265,18 +1264,18 @@ static int estimate_best_b_count(MPVMainEncContext *m) data[2] += INPLACE_OFFSET; } - s->mpvencdsp.shrink[scale](s->tmp_frames[i]->data[0], - s->tmp_frames[i]->linesize[0], + s->mpvencdsp.shrink[scale](m->tmp_frames[i]->data[0], + m->tmp_frames[i]->linesize[0], data[0], pre_input.f->linesize[0], width, height); - s->mpvencdsp.shrink[scale](s->tmp_frames[i]->data[1], - s->tmp_frames[i]->linesize[1], + s->mpvencdsp.shrink[scale](m->tmp_frames[i]->data[1], + m->tmp_frames[i]->linesize[1], data[1], pre_input.f->linesize[1], width >> 1, height >> 1); - s->mpvencdsp.shrink[scale](s->tmp_frames[i]->data[2], - s->tmp_frames[i]->linesize[2], + s->mpvencdsp.shrink[scale](m->tmp_frames[i]->data[2], + m->tmp_frames[i]->linesize[2], data[2], pre_input.f->linesize[2], width >> 1, height >> 1); @@ -1313,10 +1312,10 @@ static int estimate_best_b_count(MPVMainEncContext *m) goto fail; - s->tmp_frames[0]->pict_type = AV_PICTURE_TYPE_I; - s->tmp_frames[0]->quality = 1 * FF_QP2LAMBDA; + m->tmp_frames[0]->pict_type = AV_PICTURE_TYPE_I; + m->tmp_frames[0]->quality = 1 * FF_QP2LAMBDA; - out_size = encode_frame(c, s->tmp_frames[0], pkt); + out_size = encode_frame(c, m->tmp_frames[0], pkt); if (out_size < 0) { ret = out_size; goto fail; @@ -1327,11 +1326,11 @@ static int estimate_best_b_count(MPVMainEncContext *m) for (i = 0; i < s->max_b_frames + 1; i++) { int is_p = i % (j + 1) == j || i == s->max_b_frames; - s->tmp_frames[i + 1]->pict_type = is_p ? + m->tmp_frames[i + 1]->pict_type = is_p ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_B; - s->tmp_frames[i + 1]->quality = is_p ? p_lambda : b_lambda; + m->tmp_frames[i + 1]->quality = is_p ? p_lambda : b_lambda; - out_size = encode_frame(c, s->tmp_frames[i + 1], pkt); + out_size = encode_frame(c, m->tmp_frames[i + 1], pkt); if (out_size < 0) { ret = out_size; goto fail; @@ -1418,11 +1417,11 @@ static int select_input_picture(MPVMainEncContext *m) } } - if (s->b_frame_strategy == 0) { + if (m->b_frame_strategy == 0) { b_frames = s->max_b_frames; while (b_frames && !s->input_picture[b_frames]) b_frames--; - } else if (s->b_frame_strategy == 1) { + } else if (m->b_frame_strategy == 1) { for (i = 1; i < s->max_b_frames + 1; i++) { if (s->input_picture[i] && s->input_picture[i]->b_frame_score == 0) { @@ -1436,7 +1435,7 @@ static int select_input_picture(MPVMainEncContext *m) for (i = 0; i < s->max_b_frames + 1; i++) { if (!s->input_picture[i] || s->input_picture[i]->b_frame_score - 1 > - s->mb_num / s->b_sensitivity) + s->mb_num / m->b_sensitivity) break; } @@ -1446,7 +1445,7 @@ static int select_input_picture(MPVMainEncContext *m) for (i = 0; i < b_frames + 1; i++) { s->input_picture[i]->b_frame_score = 0; } - } else if (s->b_frame_strategy == 2) { + } else if (m->b_frame_strategy == 2) { b_frames = estimate_best_b_count(m); if (b_frames < 0) return b_frames; diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 8369254bff..c1013316aa 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -35,6 +35,11 @@ typedef MPVContext MPVEncContext; typedef struct MPVMainEncContext { MPVMainContext common; + + /* temporary frames used by b_frame_strategy == 2 */ + AVFrame *tmp_frames[MAX_B_FRAMES + 2]; + int b_frame_strategy; + int b_sensitivity; } MPVMainEncContext; /* mpegvideo_enc common options */ @@ -115,8 +120,8 @@ FF_MPV_OPT_CMP_FUNC, \ {"intra_penalty", "Penalty for intra blocks in block decision", FF_MPV_OFFSET(intra_penalty), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX/2, FF_MPV_OPT_FLAGS }, \ #define FF_MPV_COMMON_BFRAME_OPTS \ -{"b_strategy", "Strategy to choose between I/P/B-frames", FF_MPV_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS }, \ -{"b_sensitivity", "Adjust sensitivity of b_frame_strategy 1", FF_MPV_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"b_strategy", "Strategy to choose between I/P/B-frames", FF_MPV_MAIN_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS }, \ +{"b_sensitivity", "Adjust sensitivity of b_frame_strategy 1", FF_MPV_MAIN_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"brd_scale", "Downscale frames for dynamic B-frame decision", FF_MPV_OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS }, #if FF_API_MPEGVIDEO_OPTS @@ -127,8 +132,8 @@ FF_MPV_OPT_CMP_FUNC, \ #define FF_MPV_DEPRECATED_MATRIX_OPT \ { "force_duplicated_matrix", "Deprecated, does nothing", FF_MPV_OFFSET(dummy), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, #define FF_MPV_DEPRECATED_BFRAME_OPTS \ - { "b_strategy", "Deprecated, does nothing", FF_MPV_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ - { "b_sensitivity", "Deprecated, does nothing", FF_MPV_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, { .i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ + { "b_strategy", "Deprecated, does nothing", FF_MPV_MAIN_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ + { "b_sensitivity", "Deprecated, does nothing", FF_MPV_MAIN_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, { .i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ { "brd_scale", "Deprecated, does nothing", FF_MPV_OFFSET(brd_scale), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, #endif From patchwork Sun Jan 30 06:27:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33920 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1770944iov; Sat, 29 Jan 2022 22:31:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJwNUXjytwPrzt/OdMz4Gbe7ll6tCYlEkpgTaObjnicyMVYOyyH3RaT47E6gIO6v4k2NUXjL X-Received: by 2002:a17:907:7289:: with SMTP id dt9mr13449313ejc.62.1643524273608; Sat, 29 Jan 2022 22:31:13 -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 d30si5621342ejo.183.2022.01.29.22.31.13; Sat, 29 Jan 2022 22:31:13 -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=i7TsNYkO; 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 5949168B233; Sun, 30 Jan 2022 08:28:50 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2108.outbound.protection.outlook.com [40.92.90.108]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9CCAE68B18C for ; Sun, 30 Jan 2022 08:28:43 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ieuXjUsyx/Yjvpx6FBKd/sQfbVlx3315t396t39MV7MCJhvgZm1NEg48AXuOiShgeXkgAEBrFhShH98irndVHvNCM7tUgcZoXSDsavEiIIknv+RyVDadM0lf7g1y57OOZ0bt7CfmRaFVUQo0CgT/YnQWoqJtUO7XQ+9t4GG0J2DcecMhOQYphQyjlT1eqptCej3483V2KAyLxT190DLgUfkXkkuwuE5Lt/s6kv2L/WY4yksXec5AGEMgEA1IqnU2h/HK+a+Lq2k8dh24+UVi+9DMUgHdie1NALJd99Wq1cD5Qv85RKTGQRcIdWRY6ma17VFg5UajKNt2AFTxDtEQQA== 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=C6lhRcPDD/ieE+rAiVGIfEO4j1rc2OxGZ3H4kXpEy+o=; b=DjodPPjIsMPy1oqU+sQsoRytrCftRgvXy5qGb/lVXZIvZ35iWAzLtYH6gkFza7RpvYoJZE02y8bt8r9sasg3ckBqW3QCHehC01io44Y6mBCiKTDE3fLAP3y+DT5FPMnF8au7M7qTQ9nP/T7zQnTKF2ZD/sX/kIBD6p+6RTpnZZssj6heDjuPaeQuRDisHF3+kEbqDABflUu1s1qo1UThF1AsDWdS2USZ/uB1V7pKpY1Co6fEHTBdoKHQPKzn/Ff2Ky6ro/t73/PNw0hwRttZ4UQlGcMLHljjM9rTp+VTDpH3iXDYT7Tm9G0rOKspSlBDVqM4Y7qXZsl8+YQj7P9fwQ== 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=C6lhRcPDD/ieE+rAiVGIfEO4j1rc2OxGZ3H4kXpEy+o=; b=i7TsNYkOV3Jq71CcquiDx1QiWsVeQ84ZTJsKUz9JwmvRHXTm8/ok8hc3yweaX7NqKbIVi7P1sRlcZQpPs/f4BOqKQkb70gvaEfjOc4bTDZCvXn4VWJ1ezYlXl4a3teg8otusOIXuk+lMoZ+xvnAPZ2WbNvpEDswC46R+A4UjOMIUfWH47RpUuFBueI85OyUriVSwv9U7WQ6kYm9hRVHfShtPUPq19m/dEVYmaNLyuFBSXq4r+7F/yVTFLTCTts6S/R467yLgQSvkiimGOEKvD+3UDTwvbfp2v12R4PYTTd8n18CJoHSk5yNtBFcduDRC9aOkajxtuO5uaehILNEFTA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:42 +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:28:42 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:28 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [OTda7jHtoPmC1mwQcGpyfdmLwmOIXpmo] 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-19-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f30cce8a-6611-42f2-defb-08d9e3b9c2b2 X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jxyJkh5xp4Q6i2/W25m9xD3tU1cPMd3zvGgx7iwSteITmoIfKbQ5yRfiTF1gWBfrUh190z8Ogx3RdtqXAlPRZGdQxX8LCZI1VIVQX7fxuJ0bbDyrQ7F+nHBv3vxXpjX+l4RnAzd8OtE+NF4n54n3Rs+wKyhycAFXEHkTJA8r8LjyZH9NIyLVBvlAmMf40aCLxc710upet3dOb8BJk1f0unIaWykEalRvO6KO0BGr3ZRujTDUxO1rY2Si6lVfAUjvWoquOXVvo4MPMmYDU9WEmLJ6rGxyp9eLDKqlVi6H1k3YUxc7G2cbkgl0+znKnoM8AHNEymBQ4XBQk6rFU5bPepTRg2UvuCFFo/s6HhXPH1CfnN8NIBnV4Ttjl1Ybk100/i+Ua3UktcPyvzVBHS8RhlS+E6cIt6Cxz1XPRLgS7LMWDYQRAJAQZG7GrWQy9i7rKXjIgfYJH2iNXRNN2q5gJfaVaeLY++ZTjWtRpVVmHpjVIAHvYFRPDYhTL0qaYrrKZdF9Bf6ayZ3jo1um9fpiDrG2w/69vjvtGEKyplyXK8OKoBVBV9WC7Lec3O1gy8qN X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: H1kE+6MjTaCBpHpiDaANnJH1LHuzseDr9sz45fx//JxVQnnVN3QSZKAdv+rYotATt34BAqrXh8Wiz8Tc/Jory4qVQSS1IRc2uHoQ7Mf9KRDfMfCbifQYCJ1X9foGXDkk8RQxWgkh7C2tQmbIbeaCW+k4sQiCmNBsBGcxmTiG5Ho3uAbm1gzjxiIpYsbBC/Bs6qfRX2nIQnYLyI/AzRPnyYCnIojX1MllqOnyzU+gWtlyXTT8abxVUyt18Jpy664OM0GlsuThoP2jSLUDQnNMiuLAaE0y1M8FnbRdqI+fdLRt/mrJhIDBpFG28IYkcrL8kJapsv6O40Ag8nF6xzC30l3irWgEVOrYwAV5Lv78pXBv0wVLzomNlLV49kZsQj1S6vCmWUsUpeiJCMQbUKUqqJxuD3JGMKWqyB54/KQtUjVJXkw+Yge2WLfZZPSxNQ0rtTNxXLsKowmYVacLh+Fy0YWX8JX2FGLJgjpgl2TRMjq4mGcrAz3iqJkafpjcjwldeAnGBS3YMPzcameOvqdazV+1dn+8CmI1DIt7xfre5boEeQfmHnRn0oe7caand+5stmcOivVKRxxQQs0vjeiYsBFnbLsvZdTvQr7OMhp2SdQPIaG03+qwZxwNSraWULGBWLDP/8Mmk2fRGE7KnuvpGXuwK1juUsl/IY1j1rR0MFNZUkhjfXv5u9SfVcrULl/Kt4TYZQd1xdbdzR6f7xjNzjZNZ6DC+16uJa4iy861IjwiHqv56DcwkKgegWNY1KRRAkqbQsd1DIGhzWYSIc4AK9FAtjBds2r5LH7l48BE0x42Egs69mRzkXVb0hcqdAc8kTz6TDXJZpMJXPqsPew3UQDLh+WcMkhIUDcviSFT8q+3na1RyeH/Od0PZ340OoFAqFI/vRIF3ZfsTj/iMSnejPxv0cz2/QIOMsbgFNnF0jLLQXNIcVPJyrVcXYAWbySs2Pyr1CNC4Cr0ZKpfKFqCaQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f30cce8a-6611-42f2-defb-08d9e3b9c2b2 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:28:42.5530 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 20/41] avcodec/mpegvideoenc: Move ratecontrol 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: fURkgvOodUrY Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 8 -------- libavcodec/mpegvideo_enc.c | 38 +++++++++++++++++++------------------- libavcodec/mpegvideoenc.h | 8 ++++++++ libavcodec/ratecontrol.c | 31 +++++++++++++++---------------- libavcodec/snowenc.c | 8 ++++---- 5 files changed, 46 insertions(+), 47 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index e83061fa92..c9467f0752 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -47,7 +47,6 @@ #include "mpegvideodata.h" #include "pixblockdsp.h" #include "put_bits.h" -#include "ratecontrol.h" #if FF_API_FLAG_TRUNCATED #include "parser.h" #endif @@ -316,13 +315,6 @@ typedef struct MPVContext { int dct_count[2]; uint16_t (*dct_offset)[64]; - /* bit rate control */ - int64_t total_bits; - int frame_bits; ///< bits used for the current frame - int stuffing_bits; ///< bits used for stuffing - int next_lambda; ///< next lambda used for retrying to encode a frame - RateControlContext rc_context; ///< contains stuff only accessed in ratecontrol.c - /* statistics, used for 2-pass encoding */ int mv_bits; int header_bits; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index bbff65ef41..3eb8260b06 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -1405,15 +1405,15 @@ static int select_input_picture(MPVMainEncContext *m) for (i = 0; i < s->max_b_frames + 1; i++) { int pict_num = s->input_picture[0]->f->display_picture_number + i; - if (pict_num >= s->rc_context.num_entries) + if (pict_num >= m->rc_context.num_entries) break; if (!s->input_picture[i]) { - s->rc_context.entry[pict_num - 1].new_pict_type = AV_PICTURE_TYPE_P; + m->rc_context.entry[pict_num - 1].new_pict_type = AV_PICTURE_TYPE_P; break; } s->input_picture[i]->f->pict_type = - s->rc_context.entry[pict_num].new_pict_type; + m->rc_context.entry[pict_num].new_pict_type; } } @@ -1743,14 +1743,14 @@ vbv_retry: ff_mjpeg_encode_picture_trailer(&s->pb, s->header_bits); if (avctx->rc_buffer_size) { - RateControlContext *rcc = &s->rc_context; + RateControlContext *rcc = &m->rc_context; int max_size = FFMAX(rcc->buffer_index * avctx->rc_max_available_vbv_use, rcc->buffer_index - 500); int hq = (avctx->mb_decision == FF_MB_DECISION_RD || avctx->trellis); int min_step = hq ? 1 : (1<<(FF_LAMBDA_SHIFT + 7))/139; if (put_bits_count(&s->pb) > max_size && s->lambda < s->lmax) { - s->next_lambda = FFMAX(s->lambda + min_step, s->lambda * + m->next_lambda = FFMAX(s->lambda + min_step, s->lambda * (s->qscale + 1) / s->qscale); if (s->adaptive_quant) { int i; @@ -1801,10 +1801,10 @@ vbv_retry: s->misc_bits + s->i_tex_bits + s->p_tex_bits); flush_put_bits(&s->pb); - s->frame_bits = put_bits_count(&s->pb); + m->frame_bits = put_bits_count(&s->pb); - stuffing_count = ff_vbv_update(m, s->frame_bits); - s->stuffing_bits = 8*stuffing_count; + stuffing_count = ff_vbv_update(m, m->frame_bits); + m->stuffing_bits = 8 * stuffing_count; if (stuffing_count) { if (put_bytes_left(&s->pb, 0) < stuffing_count + 50) { av_log(avctx, AV_LOG_ERROR, "stuffing too large\n"); @@ -1828,10 +1828,10 @@ vbv_retry: break; default: av_log(avctx, AV_LOG_ERROR, "vbv buffer overflow\n"); - s->stuffing_bits = 0; + m->stuffing_bits = 0; } flush_put_bits(&s->pb); - s->frame_bits = put_bits_count(&s->pb); + m->frame_bits = put_bits_count(&s->pb); } /* update MPEG-1/2 vbv_delay for CBR */ @@ -1846,9 +1846,9 @@ vbv_retry: int vbv_delay, min_delay; double inbits = avctx->rc_max_rate * av_q2d(avctx->time_base); - int minbits = s->frame_bits - 8 * + int minbits = m->frame_bits - 8 * (s->vbv_delay_pos - 1); - double bits = s->rc_context.buffer_index + minbits - inbits; + double bits = m->rc_context.buffer_index + minbits - inbits; uint8_t *const vbv_delay_ptr = s->pb.buf + s->vbv_delay_pos; if (bits < 0) @@ -1883,7 +1883,7 @@ vbv_retry: return ret; } } - s->total_bits += s->frame_bits; + m->total_bits += m->frame_bits; pkt->pts = s->current_picture.f->pts; if (!s->low_delay && s->pict_type != AV_PICTURE_TYPE_B) { @@ -1899,7 +1899,7 @@ vbv_retry: if (s->mb_info) av_packet_shrink_side_data(pkt, AV_PKT_DATA_H263_MB_INFO, s->mb_info_size); } else { - s->frame_bits = 0; + m->frame_bits = 0; } /* release non-reference frames */ @@ -1908,9 +1908,9 @@ vbv_retry: ff_mpeg_unref_picture(avctx, &s->picture[i]); } - av_assert1((s->frame_bits & 7) == 0); + av_assert1((m->frame_bits & 7) == 0); - pkt->size = s->frame_bits / 8; + pkt->size = m->frame_bits / 8; *got_packet = !!pkt->size; return 0; } @@ -3445,10 +3445,10 @@ static void merge_context_after_encode(MPVEncContext *dst, MPVEncContext *src) static int estimate_qp(MPVMainEncContext *m, int dry_run) { MPVEncContext *const s = &m->common; - if (s->next_lambda){ + if (m->next_lambda) { s->current_picture_ptr->f->quality = - s->current_picture.f->quality = s->next_lambda; - if(!dry_run) s->next_lambda= 0; + s->current_picture.f->quality = m->next_lambda; + if (!dry_run) m->next_lambda= 0; } else if (!s->fixed_qscale) { int quality = ff_rate_estimate_qscale(m, dry_run); s->current_picture_ptr->f->quality = diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index c1013316aa..6a96909e17 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -31,11 +31,19 @@ #include "libavutil/opt.h" #include "internal.h" #include "mpegvideo.h" +#include "ratecontrol.h" typedef MPVContext MPVEncContext; typedef struct MPVMainEncContext { MPVMainContext common; + /* bit rate control */ + int64_t total_bits; + int frame_bits; ///< bits used for the current frame + int stuffing_bits; ///< bits used for stuffing + int next_lambda; ///< next lambda used for retrying to encode a frame + RateControlContext rc_context; ///< contains stuff only accessed in ratecontrol.c + /* temporary frames used by b_frame_strategy == 2 */ AVFrame *tmp_frames[MAX_B_FRAMES + 2]; int b_frame_strategy; diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index 4c326741df..b0f319680b 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -81,7 +81,7 @@ static inline double bits2qp(RateControlEntry *rce, double bits) static double get_diff_limited_q(MPVMainEncContext *m, RateControlEntry *rce, double q) { MPVEncContext *const s = &m->common; - RateControlContext *rcc = &s->rc_context; + RateControlContext *rcc = &m->rc_context; AVCodecContext *a = s->avctx; const int pict_type = rce->new_pict_type; const double last_p_q = rcc->last_qscale_for[AV_PICTURE_TYPE_P]; @@ -150,7 +150,7 @@ static double modify_qscale(MPVMainEncContext *m, RateControlEntry *rce, double q, int frame_num) { MPVEncContext *const s = &m->common; - RateControlContext *rcc = &s->rc_context; + RateControlContext *rcc = &m->rc_context; const double buffer_size = s->avctx->rc_buffer_size; const double fps = get_fps(s->avctx); const double min_rate = s->avctx->rc_min_rate / fps; @@ -242,7 +242,7 @@ static double get_qscale(MPVMainEncContext *m, RateControlEntry *rce, double rate_factor, int frame_num) { MPVEncContext *const s = &m->common; - RateControlContext *rcc = &s->rc_context; + RateControlContext *rcc = &m->rc_context; AVCodecContext *a = s->avctx; const int pict_type = rce->new_pict_type; const double mb_num = s->mb_num; @@ -315,7 +315,7 @@ static double get_qscale(MPVMainEncContext *m, RateControlEntry *rce, static int init_pass2(MPVMainEncContext *m) { MPVEncContext *const s = &m->common; - RateControlContext *rcc = &s->rc_context; + RateControlContext *rcc = &m->rc_context; AVCodecContext *a = s->avctx; int i, toobig; double fps = get_fps(s->avctx); @@ -477,7 +477,7 @@ static int init_pass2(MPVMainEncContext *m) av_cold int ff_rate_control_init(MPVMainEncContext *m) { MPVEncContext *const s = &m->common; - RateControlContext *rcc = &s->rc_context; + RateControlContext *rcc = &m->rc_context; int i, res; static const char * const const_names[] = { "PI", @@ -677,8 +677,7 @@ av_cold int ff_rate_control_init(MPVMainEncContext *m) av_cold void ff_rate_control_uninit(MPVMainEncContext *m) { - MPVEncContext *const s = &m->common; - RateControlContext *rcc = &s->rc_context; + RateControlContext *rcc = &m->rc_context; emms_c(); av_expr_free(rcc->rc_eq_eval); @@ -688,7 +687,7 @@ av_cold void ff_rate_control_uninit(MPVMainEncContext *m) int ff_vbv_update(MPVMainEncContext *m, int frame_size) { MPVEncContext *const s = &m->common; - RateControlContext *rcc = &s->rc_context; + RateControlContext *rcc = &m->rc_context; const double fps = get_fps(s->avctx); const int buffer_size = s->avctx->rc_buffer_size; const double min_rate = s->avctx->rc_min_rate / fps; @@ -866,7 +865,7 @@ static void adaptive_quantization(MPVMainEncContext *m, double q) void ff_get_2pass_fcode(MPVMainEncContext *m) { MPVEncContext *const s = &m->common; - RateControlContext *rcc = &s->rc_context; + RateControlContext *rcc = &m->rc_context; RateControlEntry *rce = &rcc->entry[s->picture_number]; s->f_code = rce->f_code; @@ -886,7 +885,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *m, int dry_run) double fps; int picture_number = s->picture_number; int64_t wanted_bits; - RateControlContext *rcc = &s->rc_context; + RateControlContext *rcc = &m->rc_context; AVCodecContext *a = s->avctx; RateControlEntry local_rce, *rce; double bits; @@ -904,11 +903,11 @@ float ff_rate_estimate_qscale(MPVMainEncContext *m, int dry_run) const int64_t last_var = s->last_pict_type == AV_PICTURE_TYPE_I ? rcc->last_mb_var_sum : rcc->last_mc_mb_var_sum; - av_assert1(s->frame_bits >= s->stuffing_bits); + av_assert1(m->frame_bits >= m->stuffing_bits); update_predictor(&rcc->pred[s->last_pict_type], rcc->last_qscale, sqrt(last_var), - s->frame_bits - s->stuffing_bits); + m->frame_bits - m->stuffing_bits); } if (s->avctx->flags & AV_CODEC_FLAG_PASS2) { @@ -937,7 +936,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *m, int dry_run) wanted_bits = (uint64_t)(s->bit_rate * (double)dts_pic->f->pts / fps); } - diff = s->total_bits - wanted_bits; + diff = m->total_bits - wanted_bits; br_compensation = (a->bit_rate_tolerance - diff) / a->bit_rate_tolerance; if (br_compensation <= 0.0) br_compensation = 0.001; @@ -951,7 +950,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *m, int dry_run) q = rce->new_qscale / br_compensation; ff_dlog(s, "%f %f %f last:%d var:%"PRId64" type:%d//\n", q, rce->new_qscale, - br_compensation, s->frame_bits, var, pict_type); + br_compensation, m->frame_bits, var, pict_type); } else { rce->pict_type = rce->new_pict_type = pict_type; @@ -1014,8 +1013,8 @@ float ff_rate_estimate_qscale(MPVMainEncContext *m, int dry_run) "size:%d var:%"PRId64"/%"PRId64" br:%"PRId64" fps:%d\n", av_get_picture_type_char(pict_type), qmin, q, qmax, picture_number, - wanted_bits / 1000, s->total_bits / 1000, - br_compensation, short_term_q, s->frame_bits, + wanted_bits / 1000, m->total_bits / 1000, + br_compensation, short_term_q, m->frame_bits, pic->mb_var_sum, pic->mc_mb_var_sum, s->bit_rate / 1000, (int)fps); } diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index 028b6b91aa..ebed90c729 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -1597,7 +1597,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, mpv->picture_number= avctx->frame_number; if(avctx->flags&AV_CODEC_FLAG_PASS2){ - mpv->pict_type = pic->pict_type = mpv->rc_context.entry[avctx->frame_number].new_pict_type; + mpv->pict_type = pic->pict_type = s->m.rc_context.entry[avctx->frame_number].new_pict_type; s->keyframe = pic->pict_type == AV_PICTURE_TYPE_I; if(!(avctx->flags&AV_CODEC_FLAG_QSCALE)) { pic->quality = ff_rate_estimate_qscale(&s->m, 0); @@ -1847,12 +1847,12 @@ redo_frame: s->current_picture->coded_picture_number = avctx->frame_number; s->current_picture->pict_type = pic->pict_type; s->current_picture->quality = pic->quality; - mpv->frame_bits = 8*(s->c.bytestream - s->c.bytestream_start); - mpv->p_tex_bits = mpv->frame_bits - mpv->misc_bits - mpv->mv_bits; + s->m.frame_bits = 8*(s->c.bytestream - s->c.bytestream_start); + mpv->p_tex_bits = s->m.frame_bits - mpv->misc_bits - mpv->mv_bits; mpv->current_picture.f->display_picture_number = mpv->current_picture.f->coded_picture_number = avctx->frame_number; mpv->current_picture.f->quality = pic->quality; - mpv->total_bits += 8*(s->c.bytestream - s->c.bytestream_start); + s->m.total_bits += 8*(s->c.bytestream - s->c.bytestream_start); if(s->pass1_rc) if (ff_rate_estimate_qscale(&s->m, 0) < 0) return -1; From patchwork Sun Jan 30 06:27:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33922 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771114iov; Sat, 29 Jan 2022 22:31:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJzhkIghpa0uvQH+OzBkubmvFZSDcHAbEM26//g67nr7LqnvMXWLwbFH+ywyI9JiDtnKOina X-Received: by 2002:a17:907:6e09:: with SMTP id sd9mr9136889ejc.259.1643524297325; Sat, 29 Jan 2022 22:31:37 -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 b1si5750366ejl.766.2022.01.29.22.31.37; Sat, 29 Jan 2022 22:31:37 -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=Vh5CsmtM; 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 45EFE68B246; Sun, 30 Jan 2022 08:28:52 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2108.outbound.protection.outlook.com [40.92.90.108]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EF59268B228 for ; Sun, 30 Jan 2022 08:28:48 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nHaktdwKxMHhIcZEZZyhEf7g2T4vgvEbyruwfXCdZUJEiXyh/dNDuQKm410/FJxAvnLQdfIlVas0bIvbSPkikca6jt12OuD3HtOd/ddYdPw++HJN+4nNYXiyc+uaeJMH7L/OBXZ2cguyL70XrRHfBO8Pn3VntzVwjqwQB6Iz4/nhAmV9sH2hCZ2rFgxwDH6CqNZ6Yx08pmYK0cfTKz8yOfWTyXO9EYO5zd7oujr/BCtpO9rMVQSrOOZFp/WueUXd9GETotsMTLAG82deDSnYHhB4k9MFBiK45D9eoJeHGtjD8j2XUyqbpBP8P8cjE5KvK7SpCzqFTSb5C604O9BduA== 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=8QekzsSykIA7OvApI98OkWDknDWmivtzYH65Z3UYS8I=; b=fp4QvbjvP7JTuMUVDi1X7ZOtWsI9uzjKa9pY/Mj/IehYmON1hy4vfA2PVTzWmcFfko0gTmGwSGkcGBkxjVYhmmQfW2v/+BeS88lL3d8BIkyvuPoK0NcHsG5xKzY/227UJYLCiTAeXJYuvXLW7n52+S3al3FcuQMWDz+2MmmCIxByUwiOTgiN0KniJzPGEtQOObUvYwhcNlIKuj4OFmBusI3JTYPaOLU5FNLEu7BhlpFSxtlQBSuCjEUD3K8tuBH66usXr0Anw/qxCqzdX3MDfgjEv5lmImSlxTmIGgId5sp1Fkw5d04D2G/StHiRg8ZBprSutkJf19uGYfqKFl6yQw== 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=8QekzsSykIA7OvApI98OkWDknDWmivtzYH65Z3UYS8I=; b=Vh5CsmtM9LzUTVfrrvV/duf0aOgY5HU2dX4OnM/Lb/JfnwMCx7okIUDRkBgzOXGZRHGmAB80WMNU1Zj+Rx+EEQ28XhsLQnbxU4XGk8ckFFnNwq4tryetGVUbBB27Xv9fWzkqlcycjrtOWR0biWIK+Lh9ML1Wd+C7aXw2RWEGeTjdYO38byPd0NcclvZXdIFijLpodWP2eCoLMCeTMFBA6n4Ut05YxraXFnLPNPYONaPkVOnvWlND8x7vpZ9lcaA7qYe5FpHq0kD9JsDRQzVVMAuc218f5oD/AC6bKP1RkMdYXKcjMNir4LvwrZ23W/ZHH8QbIP2rlyN08nOKEiuPZA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:45 +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:28:44 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:29 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [a9PBGLe2x7nr4Tl3VbZqcCbNReZaOyMt] 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-20-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f27ff222-7690-4f74-a5a0-08d9e3b9c3da X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +OIoquu4WEi7btDK7FfAu8rF8Ek1huUjcHcXzOWdMnk9fr4JdqnmikTuSlS/ejSO9rx46EPBEQph/xG29HRdopdXp4I/Pd10BsQw67R1SE+sTlOA9UwaOoB/nB2OcUg9rV4ntl7LWWwVgN1apHn5e1XIujMEMJQK5uYGxjGPrrHWunilaMvd7SC2sfHIY3xU7004JPgout52Jwd55rPRzGgMLY8tD9McTBGikuCO3efVTWg0z7V5XdFWwM2onYRxsXC49gELNWFPyxwfJvsUtRfjxtdlkhO6DNq6Vbo9b65uNudacKGghT/+G+L11RLEJva83IOlJw9nBSktkHDfQ3X6EV1TpdqQBHnlJK0Rs+spH5c0JWGkYou8QxCQoQxgjEQ6LPKbvyB/exvaYnXHScZPjfM+791ZeV6jrd09rZvenA9jgRZ/pg/ri2FcYegVQisC7CWu2nXbhvKuPpUPXcOb2oTq+0+ryyYsingincKEue3hre4i3C5ylCCfH9o5Wc8XUmCUuVmJ0PGiOqAPYsc21t7/dxZK7I8uWZ5pmQ+LQ3lXxvmzZu6K9mRAJl9B X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TSgJ9GYWvJJE2r2oTr5wTu99r4wlPpm4orsCsZhzXtHiX6zUw73xyA9edEZSb96nxUOZ5OAgXtuWafKZUgRRNsFmOFyB/9881zHBiDGAGH5B4wRvUDBiKeA57eKNIHGfVfv7LnjJUnouV4kM8nBKvsJn+TviMXaVxy7teXbbzHYubinj4JdOTPeoz0ljDBfwWtkXo9kLB+WrDc/AHbKHscdxRPiTGcsFqwAyR+VtRFmZqSZ7lypcJ7IpaoR+0miToK82oAXTYXlTkgwDhBL+YXnc6aOB6g6YCkskzFC/2Q6eidllYdXQ1u1xdEXf61TOLvehZSzVgioUah6tBsjSaSkzu5Z12GCAzIRHfUxlasfEtDRw5lSQnj1iyn4mOPa+JwIFCrfOAMCMjC/V9KtuODBcu5E0Uri4O6OaGIGpe0LvwFyuzZYN+ierFwJaVS0zlEthOZQ27SQsEr5FZISiqlFdIeyKhrPkIYVMkkWCyQZGgYALlE/2A0wxXTs7kfnR9lokobGp0byhH1oSRt3Lowuje0lR1OiK/i3Te1QiXLx7F4f+DLuCEv2VO6VAMm87hg5hVmRLg4xxFMO+zg73lEJpAiFaPtcEt7p+egZWUBs3pSjH9yc/G4qcL+skxQ18UxVQ46zfifB4xrXQSpJ2ELS+b/MsmZCSyrjm6HA8RZmhuwH//Hw9hl9kMxWs5qZpoXPtUHoNjgg/MUVk9d6rJ6QZhpR5WEk0UeSSgLzrbSQZBZH9soFSqcqak+llEC4aY173mL4Uio0GenJprXpfBSVWD9Hh++FamItCe5EjwKT32wniYdyZKkYhyktdpS6fI7lr8TN/g4VcGA+lwBzmfSSj8skAlDHuhUjs773dlW+YdtQBZC/mkzNMw/eY5Sto5jCjeutE5h12IHg2oUmVZjzVFdgUsndiLh/lGBRDiRufAZ4pZD8bcQtd4D1HZgQjlmWAqC2i3wo4pmh3xMeYtQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f27ff222-7690-4f74-a5a0-08d9e3b9c3da 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:28:44.4758 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 21/41] avcodec/mpegvideo: Move me_pre and me_penalty_compensation to enc-ctx 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: o18WGeZQ6F0q Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 2 -- libavcodec/mpegvideo_enc.c | 8 ++++---- libavcodec/mpegvideoenc.h | 7 +++++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index c9467f0752..7089160765 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -239,8 +239,6 @@ typedef struct MPVContext { uint8_t (*p_field_select_table[2]); ///< Only the first element is allocated uint8_t (*b_field_select_table[2][2]); ///< Only the first element is allocated int motion_est; ///< ME algorithm - int me_penalty_compensation; - int me_pre; ///< prepass for motion estimation int mv_dir; #define MV_DIR_FORWARD 1 #define MV_DIR_BACKWARD 2 diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 3eb8260b06..4da765a617 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -3561,11 +3561,11 @@ static int encode_picture(MPVMainEncContext *m, int picture_number) /* Estimate motion for every MB */ if(s->pict_type != AV_PICTURE_TYPE_I){ - s->lambda = (s->lambda * s->me_penalty_compensation + 128) >> 8; - s->lambda2 = (s->lambda2 * (int64_t) s->me_penalty_compensation + 128) >> 8; + s->lambda = (s->lambda * m->me_penalty_compensation + 128) >> 8; + s->lambda2 = (s->lambda2 * (int64_t) m->me_penalty_compensation + 128) >> 8; if (s->pict_type != AV_PICTURE_TYPE_B) { - if ((s->me_pre && s->last_non_b_pict_type == AV_PICTURE_TYPE_I) || - s->me_pre == 2) { + if ((m->me_pre && s->last_non_b_pict_type == AV_PICTURE_TYPE_I) || + m->me_pre == 2) { s->avctx->execute(s->avctx, pre_estimate_motion_thread, &s->thread_context[0], NULL, context_count, sizeof(void*)); } } diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 6a96909e17..d32e4372a7 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -37,6 +37,9 @@ typedef MPVContext MPVEncContext; typedef struct MPVMainEncContext { MPVMainContext common; + int me_penalty_compensation; + int me_pre; ///< prepass for motion estimation + /* bit rate control */ int64_t total_bits; int frame_bits; ///< bits used for the current frame @@ -123,8 +126,8 @@ FF_MPV_OPT_CMP_FUNC, \ {"sc_threshold", "Scene change threshold", FF_MPV_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"noise_reduction", "Noise reduction", FF_MPV_OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"ps", "RTP payload size in bytes", FF_MPV_OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"mepc", "Motion estimation bitrate penalty compensation (1.0 = 256)", FF_MPV_OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"mepre", "pre motion estimation", FF_MPV_OFFSET(me_pre), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"mepc", "Motion estimation bitrate penalty compensation (1.0 = 256)", FF_MPV_MAIN_OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"mepre", "pre motion estimation", FF_MPV_MAIN_OFFSET(me_pre), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"intra_penalty", "Penalty for intra blocks in block decision", FF_MPV_OFFSET(intra_penalty), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX/2, FF_MPV_OPT_FLAGS }, \ #define FF_MPV_COMMON_BFRAME_OPTS \ From patchwork Sun Jan 30 06:27:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33906 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771172iov; Sat, 29 Jan 2022 22:31:46 -0800 (PST) X-Google-Smtp-Source: ABdhPJym584v5CgAxF5BIkWFXOXMT80gkuTU6eC/A0Khr+RfPgl9JKAoaIeiV9TaYDg/qRBpKXJ+ X-Received: by 2002:a05:6402:190d:: with SMTP id e13mr15625822edz.38.1643524306094; Sat, 29 Jan 2022 22:31:46 -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 v10si5417952edb.96.2022.01.29.22.31.45; Sat, 29 Jan 2022 22:31:46 -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=W4mfrqqG; 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 1CBBA68B250; Sun, 30 Jan 2022 08:28:53 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2108.outbound.protection.outlook.com [40.92.90.108]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 22B4568B22B for ; Sun, 30 Jan 2022 08:28:49 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H9ZojHc9JG8UusE6VaFMDxT9viMKHrd6+AGFMI759N8Mu9vDg0n6x91+uICoA8yfDYf9TfvxTAxb4gdfP1GyuCAEuFYy6yYjFSFTqouQBK4+Vz6lW9XhgpFCIMGJEKdQ0QmsotKeOh9V8IHQe57iE7G8TqEzBv1tEKIbYSQPlnZCsgcY1BmrMIdpS1dvCdkY9HY2nRcjuJlIYseKczN8ycO1KkxZS6e//wgRitW9KtblGfdyN8zBWl6sq6j2HBhB/btVHLOsSSvuAicrXtLxiVkshbHf6MRRqEdjVo6sHzrLALxXeOF5gY40sRwQoV951y9U1O5xWkRfxbvM8qLDdg== 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=6URz4oiervSeGlEAhCztBSUUhYCX3hGt/8NO6Mhci9w=; b=mOo5JmmHK9Y5ljUDTNHjzDiOcvTDQUcr/BW4yQ/NMNBmWfmGPEJytEuuW+k3vGIRtaSrmT99rvF/NIM70MkHiYs4xMUrO3cNROeUt7xwXsR9dJZFg4CfgRcAeZLtc4iynrs2GNY95adnUAkD8Rba2S+4lyPlaBm2/pf0A6jB/o6XsCm6pPEYyoVbpsfhK1Yo1he12Cje/Q/thR5diAnjHFSpTx1dUJM128sxrh13gz9CTVEvKKXGTcY3+3YiPcig3dg7JadEwYP9iesrZtQqc8px1lx5Wh58nDpH1Cyg610XpQlqZvOqHFf1P6j9h7DUdPFoO6a+rdKt/jUVe3148w== 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=6URz4oiervSeGlEAhCztBSUUhYCX3hGt/8NO6Mhci9w=; b=W4mfrqqGMzvuxVknjt39kHYTO++ZTzmJKLx7lSZsGgaQ6kElqx4uTm/1E9BcY53FBiud4xCdrzSBj2VmpVRNiIDOz6rkOftiO8bpKAcW1E/NDPFnoIG0ut9/uchzKMLz4ZHoILiSkq+iWePVCtdyjvCECCQIcW3kqmypipjB143Rx58MLFIuQxL+DV4myNNA2pLlIOFg8aPQ+4psZlKcfrnYK+1kZlIZANd4iiC8NJr3gBqtSGlRkc7iKXSvnxSgvVykixRQYbCLl30CmzPeycAzc87DQK87YX8K6zHhqr8wMRkl3k8Wsu+iSBSx4McZ04v/T4nv8LA6hT8W9y2hFA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:48 +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:28:48 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:30 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [aekcYdaj09+ibk90e6jn1LO/6u9vufD1] 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-21-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d25775dd-945c-4493-d291-08d9e3b9c62e X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xTePoysSa7A+20DazBgbS9ReTFaUPtOX+ST6ypDpBg8MiWyDLgNHMlXSmiboejKVf2yThx1R6HZ2KmSG1JigPPn666rhHKL+ipdCYpxPlHj7oL6Ak17Bw70xce8imOV9siGWY4yqRilqCOSQuJwAhF8+5KF04hSZglPC/XdmJP79fjvKtGV4qNxutYl3Fy9RVkXjp8+Lu/KnMNw2v04YtTZWZQyRaIFJBpHGIdDW0s1LrMfoqYvwoEXAMvPKhIH8AXabvADjz3uBfwuXLyV4QQ+Tr9Jgqun38qyIhHqaWX3u2fbtsnSpt06Ntn1nQdOynMqQCpZ67X27idULQUqfeAKUvy4z9/KiaP8V5szpVVEVSduONaj6FRvGvRnv49pofsayCYZZaTT96ndN49TQMQO7ILE9ySgBISNBIoHAGmxwv10ZavAhnQFz3sjRME9v88ZGgeGYEEeL+IGJILyLP85mIbhFft2qHH0nzqs2zkZBJl2DPCkjPaLHLAi6MsP8jAEfsCHfdhL65i7vKS8ctRXVlu4sigLjL25tr1ULyhQDWJn4KpBM3F/ppIvzoYRV X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9XH5LWiIepKCEYThQWnr0jBq3NitujvSZysFM3REUJxAqVT3v3x7SEG8/j7h1+eHTJxshNHm6T+eQXdKQCsv/1P/QLCRB6egUNUUxysXl4owT8ZX9qnbKRVIVOoXxDLYELzeYN8SHxuOJ53nQiJrhC50GrfTUgZ+ZMsjqZdtigtf8oeBTN3cQFyb014h+NwqVmEA+pntBTxzieaxiJ5STr0jmW7y0ulhp0so/eqF5bk1IJ4TgLl7xhYvS3IPfe19P0W4tw3Cwoxume/aWFJVQkhK2mtK4+/SwYwS7Vy+Gaq2p3Y17L8ZBOCp6gpXJr2qnuQzCo91mtqZ3llzM+BTKC4a+2QOHzUjGecm9pBDvXKXXT0FxVeHlpQKnSVkG2M01A2NNQ//rpdYc2PVjMyV0NSXQZmUsXr+7xOBsSYmIgJ5M/hzvhg2YhrPLANqcmBC+iVeMQwut8X0cOoL/VTDb2XYafw4X6fwm3AxeO7OzDuKv7nxuViehiukHeRqgfh72xEO/ikx5bqOm90Oml7+zFbfVDyTRgluOysmCHzsBc+C8nBaQUrYaVashica2etvoTjl+h0Tnpe9crM03w0b+EUpSL7rUFC0+mZscBKxtyUtzc+11D7GQVDRGHKS6Eq45TEP9RPvNDhH5b7JiJmCZOuSTk5Qaddh/qpLbAI6VLJNHYmKtuk2t/0ykpVioVEC/3LFtoE5yzb14nlmwEbf1S0u2a1N8BunhGuE70A9MGxq1r4wUa9+/jj5T9tveG6KwAK5AonF6EHGQKM4PToivVpd6hMwiQ8UYRuKeRRSuKpVwLDNbZxY132G4puOxtysu+OmjVzp0gz6/qj+1r7qqPdVT2QtbYv0t0t2p6EGYC660zMvoX6JKpjsUoDBy649khsyumIWJprufjROHKfqqFe/0KgnNvgqCUAjY2L6TSadwxfBVDrdp/zUc86Xb4X/Eniugz4RA/H0YZbxECY/Cw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d25775dd-945c-4493-d291-08d9e3b9c62e 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:28:48.3828 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 22/41] avcodec/mpegvideo: Move gop_size 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: 7t2tByC/yp3x Only used by the main encoding thread. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 1 - libavcodec/mpegvideo_enc.c | 14 +++++++------- libavcodec/mpegvideoenc.h | 2 ++ libavcodec/ratecontrol.c | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 7089160765..c679b7e531 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -84,7 +84,6 @@ typedef struct MPVContext { void *private_ctx; /* the following parameters must be initialized before encoding */ int width, height;///< picture size. must be a multiple of 16 - int gop_size; int intra_only; ///< if true, only intra pictures are generated int64_t bit_rate; ///< wanted bit rate enum OutputFormat out_format; ///< output format diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 4da765a617..785aeb2aee 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -350,7 +350,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) avctx->gop_size, 600); avctx->gop_size = 600; } - s->gop_size = avctx->gop_size; + m->gop_size = avctx->gop_size; s->avctx = avctx; if (avctx->max_b_frames > MAX_B_FRAMES) { av_log(avctx, AV_LOG_ERROR, "Too many B-frames requested, maximum " @@ -392,9 +392,9 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) } s->user_specified_pts = AV_NOPTS_VALUE; - if (s->gop_size <= 1) { + if (m->gop_size <= 1) { s->intra_only = 1; - s->gop_size = 12; + m->gop_size = 12; } else { s->intra_only = 0; } @@ -1380,7 +1380,7 @@ static int select_input_picture(MPVMainEncContext *m) /* set next picture type & ordering */ if (!s->reordered_input_picture[0] && s->input_picture[0]) { if (s->frame_skip_threshold || s->frame_skip_factor) { - if (s->picture_in_gop_number < s->gop_size && + if (s->picture_in_gop_number < m->gop_size && s->next_picture_ptr && skip_check(m, s->input_picture[0], s->next_picture_ptr)) { // FIXME check that the gop check above is +-1 correct @@ -1464,10 +1464,10 @@ static int select_input_picture(MPVMainEncContext *m) "warning, too many B-frames in a row\n"); } - if (s->picture_in_gop_number + b_frames >= s->gop_size) { + if (s->picture_in_gop_number + b_frames >= m->gop_size) { if ((s->mpv_flags & FF_MPV_FLAG_STRICT_GOP) && - s->gop_size > s->picture_in_gop_number) { - b_frames = s->gop_size - s->picture_in_gop_number - 1; + m->gop_size > s->picture_in_gop_number) { + b_frames = m->gop_size - s->picture_in_gop_number - 1; } else { if (s->avctx->flags & AV_CODEC_FLAG_CLOSED_GOP) b_frames = 0; diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index d32e4372a7..1c101d01ac 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -40,6 +40,8 @@ typedef struct MPVMainEncContext { int me_penalty_compensation; int me_pre; ///< prepass for motion estimation + int gop_size; + /* bit rate control */ int64_t total_bits; int frame_bits; ///< bits used for the current frame diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index b0f319680b..4e7bbe49a7 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -632,7 +632,7 @@ av_cold int ff_rate_control_init(MPVMainEncContext *m) double bits = s->rc_initial_cplx * (i / 10000.0 + 1.0) * s->mb_num; RateControlEntry rce; - if (i % ((s->gop_size + 3) / 4) == 0) + if (i % ((m->gop_size + 3) / 4) == 0) rce.pict_type = AV_PICTURE_TYPE_I; else if (i % (s->max_b_frames + 1)) rce.pict_type = AV_PICTURE_TYPE_B; From patchwork Sun Jan 30 06:27:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33923 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771222iov; Sat, 29 Jan 2022 22:31:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJxrZ3DSb0S6byYc0IqimPwgBtdaNtVdODveWhof0pyLtSUs2+Ym1od7m07yN677cJVaoZ1+ X-Received: by 2002:a17:907:3e1a:: with SMTP id hp26mr13025735ejc.695.1643524314733; Sat, 29 Jan 2022 22:31: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 n17si5779065edb.381.2022.01.29.22.31.54; Sat, 29 Jan 2022 22:31: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=K+hZCTzG; 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 1AA8568B257; Sun, 30 Jan 2022 08:28:54 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2104.outbound.protection.outlook.com [40.92.90.104]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 803DE68B246 for ; Sun, 30 Jan 2022 08:28:51 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XU5AlBO2hP58801GzTV+yyZvqiNuGXZ14hCfNhfHqWeJ8aUmmmc1dMmP4Xmd/gb6Xs3tgIkkc7PuKZIu6voVfP7XdXWMta2g825tb7rNGclWQvhWU6/Ty4RC1H9S8gdIxa0Tme/Zl705pG30r4IOlFR/YCFjaTVat03LeKfkzfAKSLW2ULRpy3sJtZKuopu+GH7rhCEaE5zOGrK9xalcROhThEGgztoM1KLjgsi3LlZ9k4MWCdB6+tTVAabxO+bnhHD+bhEeSHatqe/FFPp3bXV+28Pn4E7Hanc259PEtQ8qiVa0SdFUiYRY0gEAOT85Krm/U/c9jnL85W57rlwmKw== 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=FuzPydxPiedxkjl6a1lguD0c/ZuFK2sslk+i09R4+7k=; b=FQAwJzlU8iKaVabPk0tpak48L3sZ1I/VfOs+XF2ErD9R24jxMdyLEhv5YkiHDIlL7/xgVgqWvIeEEAVfgs1oKykhBXCg30PapRhhL4nbewS190nR0Ne1tQyw7msanTldFBsumIbieMznusnSfDBXt9+9dIU541X6zwfUC5BdHDp8pOqfz54W5zT2F8ur6A25cSa+5AqWoEdV3TjaJSWc78GlZ5LPT+4/2R3HWeO0Uq1vU+GcDnt3uLY0eDEhAs0D6bzOeItuCABXwApgf3z2KV1el+jVbv9F7y/tmkNdmL5Kl2jrrWgG0cR6FbNo2nqE9Nm8ApUA8vMlh5r1q3kkmQ== 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=FuzPydxPiedxkjl6a1lguD0c/ZuFK2sslk+i09R4+7k=; b=K+hZCTzGdX7CLXknjZfTwsCUY91S5dfjmNfmUjjJ2uxWgyW1w2dpyJ0kDQZTXfg5LIYUaSYWD1OUpkSmBZWuxxxK6Sai/NsP/C0suLlGYW4EfLBRqQGZNHtwUbUV3551FjZ+o/XqRj6G6LJs0ZfBCWuhE0eNGAumDzeW+TJvP3whGRKfi6xQD2dyivR9lwWKQ3VkvHzfdSFs4lcwBJ0QeWHTHYaSzZlQnWzdFVkJJSnacbFjIf2noFx57Ee8dtePRKCaKrTWMfp8IPar1+VkvK2DBB3yJWJPU5JT8jV3JiHlngEbgDLAl9G0ff1AqSr7VHUBIa57TQLNR91Ffu5fPw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:50 +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:28:50 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:31 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [WTcMq1fz/og5Nf4QJuFIObq74d0ywDA+] 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-22-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6ea334f8-5207-4d2c-7f67-08d9e3b9c74d X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0sh+/U39O0BXCIs3vWS6WA7gB1JT8a/Bak9RkAKKLk42sGmWeq2zHo/jYnwu0RSG6CEY5QSmvhoL/HVTzBsqNgHkyVMk/+TxFBCKvq9uiB+BD5MCS4fv0cNGJXUiT/Sg1BAyT/LYbJng9jZB8k0crTP1JhhxwsBOeoNQ7/E7MMrqzBh4Yej0fJbkEkZmNNVoyoSc2MG1HBza9HvLBODWgYo6YwPoR30KAbB7rS/xD5ElhSJS1o9+t0XbmiD170bm8s55m5Lez6wN+aHnAXwPO7Qjy641o5gGBikbGBnybKY7FQvMEfrwmnp1SxLjTPW54H+noy7Js0neydM5pZYVVPJoOT1DQLZjVkaDkHdgv8T5Ik213G2X15zWD+eTif9LUOq+bCjTmnXyom5QhQA7ZCyGDJ/ICDcE4m845+VL9CrpOrgMdt2+FWArycJfJq9CZ9Ix6K2ZICJsxlxe+DXFzS+dJ7EPJ+14rw5isor3hmgywzPPfRGSZbBgv8sD+UHLA7nFGzp5bFZGhXdE7Vw5saipuVVhf5yUh075/qa7ig+E2Lv+1ylBWS4FbKXA77aG X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jOgE31If9xPzYn2LY9DQlbLj5E1bNhG1QBtGewzI9WrVvxA1scC+2lbgEAST502Z5HUGwxKPdHKZwKjUc5yM9njUR1wWexGG6MEfwNlUWp2KC0INvcAatM1JBo41NosiwPSzi5k+V56gtyND2qUMY3JH+rmofMnzZUFvXcFr3OPut0u7ZEm73TE97QoRBD8kEtCEkAUklyY+XR+1v2LNBIAVnCkaUZTcEzptxaWcHFRsDNBZX/BDT5n9EDqz9GIKH09K/Fxy3MhodX+JiKwc+sE5MRB2zClBBgDBureMOhTvwbtNFMCDgKCz3SsUu1SrOAJ1yH4ziGqkiaGAfuzVyzE+nZGDiRfk90n1IkUF59bWyA/0UiCWSd+tCJ+5Wc7X+gFp2izZ5dofWm4NoDeNmg6ivwQsNGpdvwu8YhrzvHI5ASLQKNBlZIGRdEz4oJrV8TF6V6Lutqp6lrZA4rZAzL2wIParvZW2s3Y8U7yHX35RR5GDcI1zsUntFR12GWS/9I9uQPYdxEMNj6csXRMnahZELxh13gcI+SXs5HWLMss5MmZicHNA680Je2Lbvtnur9PxkiwLXTwPZpgWk3PHRy/K4l3gMWW1wMfu+b20KG7AD/j6sMzqkKFHvObCiE7C9x+ByLUg2V6SQPoNVo0GEMNspGrCVu0bwzb8DMdxqtyQ1VoADg9aWwr1BGS0NFxIUqMe+nILVyZ5SQBm69XbMSoAeudsM72VrkWxKERbe3ge+3mqlySYOQEYGRFF18BUjwwB+oV+d+/v/TbtGKyeTBuf0aQM014X1t2wGAYFwds47J6bcvSal84lTVjzd0zPVgLfK2qxgRSQ1Fpfbyqf3Y5mtc1rk62XT33sMOiaQsbTJlBZMT80ReXShdobvTRupu6ER7hxUWQ+Qf1BTww1PL+Mhc98vutOmws8WVKLUAY3KM+1kuoAN7rWxljh2Na8SeMsBw/48voRmydof3TEqw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6ea334f8-5207-4d2c-7f67-08d9e3b9c74d 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:28:50.2929 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 23/41] avcodec/mpegvideo_enc: Don't set picture_in_gop_number for slice threads 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: E7GYLMMr7LT2 They don't ever read this value. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_enc.c | 1 - 1 file changed, 1 deletion(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 785aeb2aee..5f3bc93da7 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -260,7 +260,6 @@ static void update_duplicate_context_after_me(MPVEncContext *dst, COPY(qscale); COPY(lambda); COPY(lambda2); - COPY(picture_in_gop_number); COPY(frame_pred_frame_dct); // FIXME don't set in encode_header COPY(progressive_frame); // FIXME don't set in encode_header COPY(partitioned_frame); // FIXME don't set in encode_header From patchwork Sun Jan 30 06:27:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33924 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771284iov; Sat, 29 Jan 2022 22:32:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJyX7jwGLK6sOk/iQ5OpvqH8XpS+34WfXG6jSJ0rMUZuoiU725Fth/ecCARDIWFvkb15aDrs X-Received: by 2002:a05:6402:2993:: with SMTP id eq19mr15333230edb.233.1643524323669; Sat, 29 Jan 2022 22:32:03 -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 d23si5537149edr.220.2022.01.29.22.32.03; Sat, 29 Jan 2022 22:32:03 -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=b9LDtjCo; 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 30B7268B25F; Sun, 30 Jan 2022 08:28:57 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2074.outbound.protection.outlook.com [40.92.90.74]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B230168B249 for ; Sun, 30 Jan 2022 08:28:52 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hFHxIjsANDNUcJoDPjruGghnlt8OvpJD1bTYYMF8ouNd+3bovvm4NuUS9zp043gPxiRwfZA/tDDla/bKFoJkWXffp2bNWYv6HsIf5cmSOpBsNc2Vargn+nm2egEHki2B2FHscYSBA1lrcqkME5BgkDjDlS5XeiUFCklZiNw9ycQZIPUsotpjt41DXL/KIxClx84Is4aWtg+bR/e5XFVjw5TFrC371Dj0rKTaJB73lLKRXZoD3X/TeH1F2ftCwcd2A7vu3AsBMhvD0VQ3gkJv0HevJ8O6OA5LG3VSF3bHqTInS2YbtFwZ/FecDoQp9Mo5Of3KatAkHaP0NM8LBsFiSA== 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=yeIkMW1pUV5pJnIXIxawPmq+Meb297qhzJskhSLrhxk=; b=FEPEc1WkBY7zoe2cwSBJfjv5yqfWBOdpzZQUNTry7+irHT0kNAPP1ts1QRAQuT9AMSPs++OU8LnYUIzPM54bQ1l0U/R+d00g2kTT/gDPqxuCJojlNXKJ6s5oYo2fFXB1U8tNsd68YxWlLGhhImcEs94dDoLJ/Ra8MnB1JEt6C++ma94lwYMuLTLYcS2Tmf5I6C28RSs9UFP/XySfDIYzYCIbU3e2QkIDx3Nj/jTiBSBnLFvDUCqUvD10OmRLm+/NF22BUdyOqC52D3NFiyfugcxUpUJcvIUJDoS2G6a1yuSZYmxGFTz9EilX7NjvsmmCduhVS0m3kGVvFauWS5OpsQ== 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=yeIkMW1pUV5pJnIXIxawPmq+Meb297qhzJskhSLrhxk=; b=b9LDtjCoVon1qej1UCZwNBJMLkmzBfJm3Ag/i0E3s4RdP08SUBCXZ4ZwgDfxaRQkzNb6KpK0Dv0+z8mImCLeqrM87njWHcRxFtOt6MIztmECFZCLBMv/haSv/1bHlVPM2Unl5PMou9kyN4rXJPP56ppFExU9eRmZpAJigJ+nVDseXYmdJzDELWZ+G0kuzLFTurEHfmdxi0H/IJSXfZyst4QeCM8/4xlVJ2Btt/WTIi2CzpCNiuYA+XZDyWF8sYIMcxKefGh01vMp7HO4c/2+kdHQCMsR1Bll6C+L30sNvIw72vbyaXPSwbpY7kEClH3B5S539cpOxfSyNC+QJ9loYA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:51 +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:28:51 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:32 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [bc4YK+UHn32MkT1/pLIL0NulE1YsRFrD] 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-23-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e4c13a6c-7e85-4c78-dded-08d9e3b9c83b X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rOeNeFzFuuqjeJ903eFVOG/JsplvNpGGx34LRM6yqS1If9oTrPG/rnlH/NrhCYETiOMp7713hVwFLmPSDVYot4z9u8FEUc2kqb++PvFUnDoiAPzMxk4pqxGzFuDp2pCPi0VR1Cf+uXxvrjD7KHlhznDAoMpQb15hA85TBOfLAkNN1BksKST79SLkIkVBUDwQvCIadubpSkxX2GfP9MDEQuNM0EUKpmtayGcdJj+MhpdxFxAICBWREhPgZDAMNhFyZSgUTal1AcAKwgNlgoDmQbVfS3rvsTQOn+DH47dlb93aOfPOp5Er//N2idfBiqqY1RghLDGFtYWdFQH4TDt4XcHeIMIRsQUknOhBZxM5JmChtF6D7RWJe/Xsx3V0Hvk2/3ag7UQBNhl38PX+6iHLAGZvikqbj7QN2Tj00KGpiSulaCxHxoE84s2pz4bpXVwTupjwnHNcYMVGtuYjbu680ehkANdqhTR25Ppcr3IEdRGdpf22Ms7ATdaJpoYncI2q4wexkH98PjO/XVvnhDAQ8C0pjx1gR+cdUmzlzrAPLe2cKYgD9SQEAEgKnUauyHSj X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: CDJ7pD5Uhdi8bAyy7FdwP55VBORZEMcM1rWvvM3dtCINcIwtkGbhOsLHlfkccvb3TMAPL2j4G+9ptzEcLXxxwuKHjLVbjPa6cibV7e1cn/ndqUuKTy3IysSOCU+HTZtioVAnggTWCadzyVVUaGrUlqm42CHxIFPRnzh7ROVdfFAnZOkvfTJc17P9ForZaScV+DtO5zWvGZLS4xodYP/Wuwez7GjB0f8MeygnSwLiQ3jNZbjcaszznyMWcmwm/9Iz6O09iNW9kqdWf7W8/aWm08X+5is3PpwOU16Yei/9N1r4G4BOs/bHnpUZNPraHXOPGvbTt9BxwdPwZlipoe0N7RBHA/sxV99R50sf4/hF67mV6YOowYbr5kaDfe2dBb4ODgj8R+0HYKnNZsTw9Vi6tzvQtaYWdihO8UoJijTogXy1oWGovbnDSQLddw3QKeDzNux/aaYKYoMBXQpL19RYFROkpeMIyO4e8h8Oij7UsSrZ6pyEyccEBYuwvKQvSzmOJ4SlFo6PsvLk7ScNzMzwb3ag79IQT4MjJTea7SP20JgcftLjFlLAas+tjeo1VIAEPPoii42xHFLdG91oPgzuOoum8yDrKZqTc7N9Iufj8VQhBWhN1bN04ACRKKyF9N2TmF7lnj8UJLLUBO3VIfksb0HWevL2oLkZ0ExuaJFAJHctWQLDd5NDgUicfspPx4kYilBZ2cLtP8UjgW35YuRPI+Kv2JUsTJIYr+UuYMhSp4B+EF7V2pBUHeXhzqYcAcLO7P80YMpfayoqfZCiyiETgo7FmxGQugvBt27xume902vsNfRz+xmmfYIuauvldikSXoGUL0wR2HRg0vDnCxDxzihsHeWkV37iJFauinmtWXLrc+N3F2AwBK0cnvJBG8RVq4TXwKAlWN9nw8kODRSLxlmSRvJT/KJVV+B67aAHNi3c3Xg77QPXkH80mMhHJYh7yQSpkSjD6KP98icWUfI18A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e4c13a6c-7e85-4c78-dded-08d9e3b9c83b 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:28:51.8238 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 24/41] avcodec/mpegvideo: Move picture_in_gop_number 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: qvSfnmLGhdY+ Only ever used by the main encoding thread. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 1 - libavcodec/mpegvideo_enc.c | 14 +++++++------- libavcodec/mpegvideoenc.h | 1 + 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index c679b7e531..cab3abcc77 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -110,7 +110,6 @@ typedef struct MPVContext { int input_picture_number; ///< used to set pic->display_picture_number, should not be used for/by anything else int coded_picture_number; ///< used to set pic->coded_picture_number, should not be used for/by anything else int picture_number; //FIXME remove, unclear definition - int picture_in_gop_number; ///< 0-> first pic in gop, ... int mb_width, mb_height; ///< number of MBs horizontally & vertically int mb_stride; ///< mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 int b8_stride; ///< 2*mb_width+1 used for some 8x8 block arrays to allow simple addressing diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 5f3bc93da7..9477a02ae1 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -290,7 +290,7 @@ static void mpv_encode_defaults(MPVMainEncContext *m) s->fcode_tab = default_fcode_tab; s->input_picture_number = 0; - s->picture_in_gop_number = 0; + m->picture_in_gop_number = 0; } av_cold int ff_dct_encode_init(MPVEncContext *s) @@ -1379,7 +1379,7 @@ static int select_input_picture(MPVMainEncContext *m) /* set next picture type & ordering */ if (!s->reordered_input_picture[0] && s->input_picture[0]) { if (s->frame_skip_threshold || s->frame_skip_factor) { - if (s->picture_in_gop_number < m->gop_size && + if (m->picture_in_gop_number < m->gop_size && s->next_picture_ptr && skip_check(m, s->input_picture[0], s->next_picture_ptr)) { // FIXME check that the gop check above is +-1 correct @@ -1463,10 +1463,10 @@ static int select_input_picture(MPVMainEncContext *m) "warning, too many B-frames in a row\n"); } - if (s->picture_in_gop_number + b_frames >= m->gop_size) { + if (m->picture_in_gop_number + b_frames >= m->gop_size) { if ((s->mpv_flags & FF_MPV_FLAG_STRICT_GOP) && - m->gop_size > s->picture_in_gop_number) { - b_frames = m->gop_size - s->picture_in_gop_number - 1; + m->gop_size > m->picture_in_gop_number) { + b_frames = m->gop_size - m->picture_in_gop_number - 1; } else { if (s->avctx->flags & AV_CODEC_FLAG_CLOSED_GOP) b_frames = 0; @@ -1687,7 +1687,7 @@ int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, s->vbv_ignore_qmax = 0; - s->picture_in_gop_number++; + m->picture_in_gop_number++; if (load_input_picture(m, pic_arg) < 0) return -1; @@ -3717,7 +3717,7 @@ static int encode_picture(MPVMainEncContext *m, int picture_number) s->current_picture.f->pict_type = s->pict_type; if (s->current_picture.f->key_frame) - s->picture_in_gop_number=0; + m->picture_in_gop_number=0; s->mb_x = s->mb_y = 0; s->last_bits= put_bits_count(&s->pb); diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 1c101d01ac..3deee6d5fb 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -41,6 +41,7 @@ typedef struct MPVMainEncContext { int me_pre; ///< prepass for motion estimation int gop_size; + int picture_in_gop_number; ///< 0-> first pic in gop, ... /* bit rate control */ int64_t total_bits; From patchwork Sun Jan 30 06:27:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33925 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771354iov; Sat, 29 Jan 2022 22:32:12 -0800 (PST) X-Google-Smtp-Source: ABdhPJx+uF+5rqF5+lP0eZv/qyeZC7rUFtqLufjFH3Ny0dUMXM+pdD+UPbF/xVxImu3ywLK7KItD X-Received: by 2002:a17:907:924d:: with SMTP id kb13mr12687109ejb.507.1643524332547; Sat, 29 Jan 2022 22:32: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 qf38si2507396ejc.14.2022.01.29.22.32.12; Sat, 29 Jan 2022 22:32: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=KwD9CSCn; 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 820C368B290; Sun, 30 Jan 2022 08:29:01 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2011.outbound.protection.outlook.com [40.92.90.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 32A8068B205 for ; Sun, 30 Jan 2022 08:28:54 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W6F0ysN1Kyz3o1ubdHtNPVK6YveCRlqlLv5NeL5TSH5kR4uTmiWoAiwcNh49FhDwjvDN69PWKdUDn7UZGJL4RjkK8dKQwDEg8bWREbV3wQhvntPRWSPnsmox1krG6C2k/0S89wNTjlxvPhyO1f7sLEOUaHFNhRgG+7lJnRikfqyCkg7Jq+EjXkVh/yc865Gwy3qYqo9wyiUjcGYpZeOJkMuvSjHpN1ZXJnNfAoGci9dLXlDiYI0KU2NKu8TGdX8x5gG5RUzUzqE4b7en8ST1PdTgi/XcsZYIqf1+n5hGiOWZedleuSVg7J/lB+/QyxQsqPvbqFlHOylviqgb8LaIWw== 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=yBtA/7GQtX1/AiaXz7snALZF2nkIKNhwi+7mGioRO2w=; b=O76hPu3pUhLV1Pxvl6dZcIF+NF8b8YeIymHO28UeAumD5FXWl7YgTCMpmqupH/Kcuc+NgMTwKpa+tOpHa9zVabMYCvu0DVBiB1sFpXRBk3K9wynMbhb9O4u6fFOteF5AjTbeaGmVowpt0g5BsWYUz3iSsaJ6EPyx3GcfeDwVGILiH0jSW1q1jcOV91Soe1eUx0B8Kewol+iNcns7wmZ0YTzKMsPF1RNOHSg+OTuRJySAPvXmfvgpx03a0oYUXusOaDxpF7V+f5YjOIuOkENALyf+VrH7LTKuHKPXApLDPv49mpcAJA+3ZHxokknmBwDMi/ITm+6uWLd2KPJ/PMi0OQ== 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=yBtA/7GQtX1/AiaXz7snALZF2nkIKNhwi+7mGioRO2w=; b=KwD9CSCnRA/LqvkI1r6L8Drb/FM0fHIX3HU7oqju+yYvjYafgqzEjXE+/YiXjGY1F7h92Z7CqKbfn8ArnmarfxCeJ9aK79bNbcUoWK7DlkPcjA79uvih27Gt5czifgNjFl8qiIj6kujQMDPUihBff2IyvJBh9xOrLFL66ba+6Hr7oEKsLLfY2rhtfDp2qKeAKV9mBBd5g7CbJbaUSd/LE6jAbjlPAYAAI1PstTmo4UU5OdwSYshiWFUgCpxz7PGtNcAO977LYiHutbn5zPjt5jleW5WrW78Uy9kFe2i9DAtxazNjcfe6zT0Er6eiYGCDLF7w5yylXt+nyyrwF5nXqw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:53 +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:28:53 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:33 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [q3TUB346QO2uN9GVUtjtWW/YA9wdDw3O] 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-24-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 95786e31-34a2-4177-df24-08d9e3b9c925 X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dM60SvNw0KmPfWspMVBFfz8pyeaNNWEFRpkmpNbyBVLJjhckCb74AISWK7MqO7hk91btluLEFLZkGvnpSa7bYfNHxjb5H2N2LpSkg35f30kdm+FPCffveKHde+VRPtsOYx3y7hw2RYeXwFPLyDdfH7Kamc86OM3U9DEYg5Zk3cVmOat4OP+Ej9NuTV4JhNdlQ9l6kxKenHGHYPLSNEnc/w6DV9FnTANTcg8YjHGeUeisO4vT5PJ/N/R775+Sd4SqrO0B3aGa0iwxhuaV+EYrk8zcoUF9Xscm2XvmPcXBJzGpO20J6kZGN30ljW5fNlD77qTk5A+kDkoCyN1R24rnH/+h0R0zS42mOwBbybpHGaWKNYiYu2nZ0yDcrxAZAUjU2FE36gg1jHzWCDgdh20LmZavdsajIdGRkYeLKKZjvcId/UzPI3MUvOawjyIM1lFm2mPTbkhBZjPa7jBSQf0uu+A4nJkcoGwQRJ8cx2qH1nglexH36tjZbY3bVh8D/7ZjmLNRv2tMRLtPMdU6Xujy+mcRuxf7ugUh0SAxbHw5WSsR3LLutOVOnwdIWY9JQGFo X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: mbRP+oT1t424qnQ2RaNAjx2daEI3lL5vGVnKLUBdlTDRWzfDaiJKgTqoYQGgXpTW17syaksJICZfKE+mz8Wp9wBjy5tWRFHc6Dq5GTWXvn7RfwyHsNjKcyAwKGTra3r1t8D3Cxajo6Ldgf7KUCxkJfTFfx2k9PoUKMbyM2TtaHCTLXXJV7kc1iIOQe1LZBPr/MeUB4Wx2JOdMh5j9mNxULo6Un5oDI4XbGNxWER10kdj+I++IqaGdCYlHrEKwF2DDk0DPvnHvJ+xxMlX45I21+mwHdGiOTDR5uyqvmWOnTKUbU1vR7WJBwWDkx4C6Dp4dQis3//snDBDqJPHiED9reWD++qjYGMAJ9/dCrwSxJZOVJQuzWrHfj+OcMkOqlpbBNQ+kjv28PXCtzzc7+VHPkY0yvA6K89PLTVQWCovKUv3eSfkcss3o/k5rvHHd5KVS3MYeu/e9B92Aww9wjUjOc06K7lsRwkPUIWy8/JLsw2JMgE0AQjuHZnw4r5QrHsXwjzJmYJIsewJw7ETwEc0hczNZz1LpbQoJsRosNdE9+y1u1hlBUp61dolZq4/nWdlXAXQ2PzfZuCwNpshSNtu04eCf+YK1QEv12iHShVZxw+ZmUSvNyZfOUbJEoY28VNBcwFqjgdjqAhXMD92VIh+iBvqlqHhu7K7FBMZDgVDyuc48Do5iyM1WD5YifsbPd67t/prHTKmzDwmMM5ySh8cqErm8poB1DaAmYrGrA2H/MeXR84EjiQ5iUxNzILfg5BjhtDBdi9PXAU343uaJw/vdA1ZqsV8clpnVoUEaKmXT2vE0h2zgzqmL3FnoIBwrCOTGl3GCJUAh6qN7DM4vJFpGtbwWA2qOn4D0Hugufwg863Opudt1doLkcOg/Bu5DBGdRYn9KAalZ1uwX+tQYpexkxlEW8dmkysAznd08yobv3PMKkP445lohvZr/xGdmxIMwFDRckrA5munq2ojCVaJlg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 95786e31-34a2-4177-df24-08d9e3b9c925 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:28:53.3574 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 25/41] avcodec/mpegvideo: Move pts and dts fields 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: Nay8bu1CPTKe user_specified_pts, dts_delta and reordered_pts are only used by the main thread. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 10 ---------- libavcodec/mpegvideo_enc.c | 22 +++++++++++----------- libavcodec/mpegvideoenc.h | 11 +++++++++++ 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index cab3abcc77..a334acb3aa 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -121,16 +121,6 @@ typedef struct MPVContext { Picture **input_picture; ///< next pictures on display order for encoding Picture **reordered_input_picture; ///< pointer to the next pictures in coded order for encoding - int64_t user_specified_pts; ///< last non-zero pts from AVFrame which was passed into avcodec_send_frame() - /** - * pts difference between the first and second input frame, used for - * calculating dts of the first frame when there's a delay */ - int64_t dts_delta; - /** - * reordered pts to be used as dts for the next output frame when there's - * a delay */ - int64_t reordered_pts; - /** bit output */ PutBitContext pb; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 9477a02ae1..9b05b44d36 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -389,7 +389,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) av_log(avctx, AV_LOG_ERROR, "intra dc precision too large\n"); return AVERROR(EINVAL); } - s->user_specified_pts = AV_NOPTS_VALUE; + m->user_specified_pts = AV_NOPTS_VALUE; if (m->gop_size <= 1) { s->intra_only = 1; @@ -1021,8 +1021,8 @@ static int load_input_picture(MPVMainEncContext *m, const AVFrame *pic_arg) display_picture_number = s->input_picture_number++; if (pts != AV_NOPTS_VALUE) { - if (s->user_specified_pts != AV_NOPTS_VALUE) { - int64_t last = s->user_specified_pts; + if (m->user_specified_pts != AV_NOPTS_VALUE) { + int64_t last = m->user_specified_pts; if (pts <= last) { av_log(s->avctx, AV_LOG_ERROR, @@ -1032,13 +1032,13 @@ static int load_input_picture(MPVMainEncContext *m, const AVFrame *pic_arg) } if (!s->low_delay && display_picture_number == 1) - s->dts_delta = pts - last; + m->dts_delta = pts - last; } - s->user_specified_pts = pts; + m->user_specified_pts = pts; } else { - if (s->user_specified_pts != AV_NOPTS_VALUE) { - s->user_specified_pts = - pts = s->user_specified_pts + 1; + if (m->user_specified_pts != AV_NOPTS_VALUE) { + m->user_specified_pts = + pts = m->user_specified_pts + 1; av_log(s->avctx, AV_LOG_INFO, "Warning: AVFrame.pts=? trying to guess (%"PRId64")\n", pts); @@ -1887,10 +1887,10 @@ vbv_retry: pkt->pts = s->current_picture.f->pts; if (!s->low_delay && s->pict_type != AV_PICTURE_TYPE_B) { if (!s->current_picture.f->coded_picture_number) - pkt->dts = pkt->pts - s->dts_delta; + pkt->dts = pkt->pts - m->dts_delta; else - pkt->dts = s->reordered_pts; - s->reordered_pts = pkt->pts; + pkt->dts = m->reordered_pts; + m->reordered_pts = pkt->pts; } else pkt->dts = pkt->pts; if (s->current_picture.f->key_frame) diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 3deee6d5fb..227701b3e3 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -43,6 +43,17 @@ typedef struct MPVMainEncContext { int gop_size; int picture_in_gop_number; ///< 0-> first pic in gop, ... + /** last non-zero pts from AVFrame which was passed into avcodec_send_frame() */ + int64_t user_specified_pts; + /** + * pts difference between the first and second input frame, used for + * calculating dts of the first frame when there's a delay */ + int64_t dts_delta; + /** + * reordered pts to be used as dts for the next output frame when there's + * a delay */ + int64_t reordered_pts; + /* bit rate control */ int64_t total_bits; int frame_bits; ///< bits used for the current frame From patchwork Sun Jan 30 06:27:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33926 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771430iov; Sat, 29 Jan 2022 22:32:21 -0800 (PST) X-Google-Smtp-Source: ABdhPJwYrHhXH0fEtdfG2gBv325Qc5lh8DxNVu1TURVTs3UCsiHWi3DBKdloplBqYYTqRxNidiL0 X-Received: by 2002:a17:907:7d93:: with SMTP id oz19mr12853842ejc.350.1643524341655; Sat, 29 Jan 2022 22:32:21 -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 m14si6131779edd.534.2022.01.29.22.32.21; Sat, 29 Jan 2022 22:32:21 -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=gFrbKm+P; 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 7E0E168B296; Sun, 30 Jan 2022 08:29:02 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2011.outbound.protection.outlook.com [40.92.90.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5D48368B205 for ; Sun, 30 Jan 2022 08:28:59 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Xrpmn171P4A2lCn7pCjFU2hn5EeuvoHhvxC+algbxBUH7ZlrKflYBaN07wgdN9+deK1D32M0CUHQbVzK/+qU7+EnybVMWhqxdPWcVVmJqSUQMlwax0oRXXTicpi/Tu66lE6dSFZaJmtFKbU2niTn0nne0nwsQhKIfKoOSyYuPQxEjuQ8UGQwilqbiqseBfEPtJlU5IWur1r6n8KOascHLOOI5dbmuFjxwCBRn7TH6fpCxd1jM9lpimJ6+83J4WcAnY///BaXye4Lgpd59XIVriIUPymjvtBu8wUQJUddeTluJnRidy5Hdsdk3XeWotXtkqqGgmaKS8Ea0NVh4uN8VA== 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=pGT3eHNK0eYIDNhQWfwD4GrOdFcIqvpgbcXYNkOmL4o=; b=e8TncXwrubVs2Zg5SReQ91PZA8vGCFFO7Un/gIW7OKWxYrVJzGXtTB/oLJ/FvCS8SnxiXuJsWaLX876sXPTacdO6/HDaVOONBKtFQDsH019ciPhG+T0D6UNe3EU7wAFmc+Hkb/LN5FDHAte7gx7ZK8S5Vs4qf50pMp20UJpIMF3w6esvP4cZQKsh6uXA/DpecXpzTMHmbzXVj6ad847O9/q66HUo1b4Dzx/kGNIQaQkx8BH7WsgQJorMkZ91LmUkqqo/r1fmib8OYFU8mLrRMMYHXRrV+qqeSSYqUdgoEE4P/OOON2pug2KyMNgK4WhFpNfGBPI/8kB8wI3RCplS4Q== 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=pGT3eHNK0eYIDNhQWfwD4GrOdFcIqvpgbcXYNkOmL4o=; b=gFrbKm+PI3H2syZn/cVtNOaHDNfm5A8ZZztNPejd4uDSpfeRLhqByt06Fh2tH2OF4EtIstfmgYDa1Nxma4LCH5AD59EI7IcA8EeGAeEIYk2rHmf0yUBhpfaXK0qi5amYdkdY0DWfFhxqrzF7nPM+zrbhE85pC6QhlCvnycdG/FPQ5ZQsoTYQlIDvLG9gSvWInpDCHEEQKjrvHgSdg1QQL35Kui56sAsxX+RsHNy67iJMfYHNLHzaab7WXqWF3Iv9vh3sXC5XjTZobxcpdFXu5IgFLlAMxfqcpZ8ibURg7hnpMOx3UsoZVqETJNawJZIacNcbK/asioT4lBwMa5WKMQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:54 +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:28:54 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:34 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [mp1U+z9Rhwey0kmw4Zb7EGkleGLqGJX5] 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-25-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4aa928e0-1bf3-45dd-fb9d-08d9e3b9c9c7 X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5j5lq6KlV+LkfLwcXh6+uBZoWdynuZBB5RqMuP760V5WmnvlYeMU3sWo1Gle/Qw/047iEYiGhUznVGsRSwYnHDEr0h+c0SSC2c9+lgheAmnncYR8Y2zJu/DRHjdq+pWdpS7f/gCEM8JoKdUJwILpEzmdQzNdCx4AuWNBlb0UcL+kUKCltjqwb3mXwwWfp+PtmQxZZfzYQ+ZdDSR1Acn7r1KbVSHpT9ISIQTRzXE1b1vTAZ6JZdvpx9mNHZEq2IUJrqvu81MWH/F4ksKiFWid0dVoSBh596xOk6KOItA81S+9muuz5roaUh3+BnpoAZ9oE2Gus2pQzpZ7nHVJt96MqiK9a//UHGXZ0KUZ4GMWJ3IA5jvanQ6jJzuq6l7ZZ6d0EXc2vuE3JYcVHOFSMsI6x38GMQZx7M0gmAOurSlqpveF8yVYf9ELPEaiaf11x2GnM09a4u9/jM/h5Xge8PjtxRfyt2VPooOke1f0YSDvZi+yiWe2zyzuAyPNYEq+CoLdsPV0/wW74359Ohh9Av5tQVeG/cvrjlABV15XqVorc+alk/NLbEYMrXly6wRyJsnC X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZQihNjQl7vSMpdV4+xj5Vl1id/DblRhFYQ6oHIvqf2h1sDp/NQj5WZL04Ycs21Q8T3uMGGEJFQtMlajy899DjWSSdK5Q9FlAOJoA6/O+9O5BotE38Sp6GH7KFU3+4QHjv7GmYMrZ/ABqsJLUnnH7r37uuBwT+QK53JSZyK8kzKvH4PQAQxJlBCQENcQwj2fX1P0TZ7t9hHpJw8EyYlHdNLAhYamgJx07KyydIdnjX02r1HPdpvqWCScfpUIilImb03C1i1Av3Rbmauok8wkgIzZ/cFZsa7E4DcO4PCgMrqXhHyGvmQ2yjfj9++gmzvljRtqoFCsZN9ytwVvFc12WYiVgokXLE4CAPh3Cr0aVK1LC5sKkJXytgnXe6kpUlwn+bwSgGzWvg9ZW+IceT/h0hBm7hNA4awulGTC9qyLglM+TEpQ7JBouFdHgT5sSYDe3Ne2HP9yZ3QM5wScmgRwG7T5kh4dUNVM/vMCA6j/usuQdXSSWGeu2PH0L+GX6FYeOD/ml+ATsg3WSAQmkA4vIErAQB6tMY9+kJIlO2MnTbtZ8GkAoxFQU2q6uD7/y+ug6J12aOKU4bR3b2lqOS/7vRu8SCgCWwqV6CPN2jwu28SIJPucLV6zipvwxJehYBLwlIiyWOjQLCHNbapNcXvgVjbSVnIKlpuxiEQUNCKgoPCCY0hxJGtT9MJj7kUKla5dorsj+vwkhaS0bEQ7qeYa8XFgXRYDK7z8LwQQCDH2jEJpbR7J0EoK0/oQau/lnsJLeYHPc9BpQD95D8k8f9LE3mD8i/yEUAuh678cuOWq+syq2qHEDUzU6BIN3+LUUf+i6NDA/AiHrx9TCKs2+Bf8QWc/Vp0Wh3YOn0e+9tM+/omk7wKmxLg3yuu3Vka/6A2TnGRBPvIA77T49X7UkxoAt6ZsnU+h/+NADnyVPZcv35lkYZqgFoAOmXY2vDB1+E3DqKryu3WKo3sk31UJHpssqKw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4aa928e0-1bf3-45dd-fb9d-08d9e3b9c9c7 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:28:54.4354 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 26/41] avcodec/mpegvideo: Move input_picture list 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: +/vTfy3MuDWr Also avoid an allocation while doing so. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 1 - libavcodec/mpegvideo_enc.c | 60 ++++++++++++++++++-------------------- libavcodec/mpegvideoenc.h | 2 ++ 3 files changed, 31 insertions(+), 32 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index a334acb3aa..98810ea231 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -118,7 +118,6 @@ typedef struct MPVContext { ptrdiff_t linesize; ///< line size, in bytes, may be different from width ptrdiff_t uvlinesize; ///< line size, for chroma in bytes, may be different from width Picture *picture; ///< main picture buffer - Picture **input_picture; ///< next pictures on display order for encoding Picture **reordered_input_picture; ///< pointer to the next pictures in coded order for encoding /** bit output */ diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 9b05b44d36..1cf194dcaf 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -825,7 +825,6 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) !FF_ALLOCZ_TYPED_ARRAY(s->q_intra_matrix16, 32) || !FF_ALLOCZ_TYPED_ARRAY(s->q_chroma_intra_matrix16, 32) || !FF_ALLOCZ_TYPED_ARRAY(s->q_inter_matrix16, 32) || - !FF_ALLOCZ_TYPED_ARRAY(s->input_picture, MAX_PICTURE_COUNT) || !FF_ALLOCZ_TYPED_ARRAY(s->reordered_input_picture, MAX_PICTURE_COUNT)) return AVERROR(ENOMEM); @@ -952,7 +951,6 @@ av_cold int ff_mpv_encode_end(AVCodecContext *avctx) av_freep(&s->q_inter_matrix); av_freep(&s->q_intra_matrix16); av_freep(&s->q_inter_matrix16); - av_freep(&s->input_picture); av_freep(&s->reordered_input_picture); av_freep(&s->dct_offset); @@ -1137,9 +1135,9 @@ static int load_input_picture(MPVMainEncContext *m, const AVFrame *pic_arg) pic->f->pts = pts; // we set this here to avoid modifying pic_arg } else { /* Flushing: When we have not received enough input frames, - * ensure s->input_picture[0] contains the first picture */ + * ensure m->input_picture[0] contains the first picture */ for (flush_offset = 0; flush_offset < encoding_delay + 1; flush_offset++) - if (s->input_picture[flush_offset]) + if (m->input_picture[flush_offset]) break; if (flush_offset <= 1) @@ -1150,9 +1148,9 @@ static int load_input_picture(MPVMainEncContext *m, const AVFrame *pic_arg) /* shift buffer entries */ for (i = flush_offset; i < MAX_PICTURE_COUNT /*s->encoding_delay + 1*/; i++) - s->input_picture[i - flush_offset] = s->input_picture[i]; + m->input_picture[i - flush_offset] = m->input_picture[i]; - s->input_picture[encoding_delay] = (Picture*) pic; + m->input_picture[encoding_delay] = (Picture*) pic; return 0; } @@ -1249,11 +1247,11 @@ static int estimate_best_b_count(MPVMainEncContext *m) FF_LAMBDA_SHIFT; for (i = 0; i < s->max_b_frames + 2; i++) { - Picture pre_input, *pre_input_ptr = i ? s->input_picture[i - 1] : + Picture pre_input, *pre_input_ptr = i ? m->input_picture[i - 1] : s->next_picture_ptr; uint8_t *data[4]; - if (pre_input_ptr && (!i || s->input_picture[i - 1])) { + if (pre_input_ptr && (!i || m->input_picture[i - 1])) { pre_input = *pre_input_ptr; memcpy(data, pre_input_ptr->f->data, sizeof(data)); @@ -1285,7 +1283,7 @@ static int estimate_best_b_count(MPVMainEncContext *m) AVCodecContext *c; int64_t rd = 0; - if (!s->input_picture[j]) + if (!m->input_picture[j]) break; c = avcodec_alloc_context3(NULL); @@ -1377,13 +1375,13 @@ static int select_input_picture(MPVMainEncContext *m) s->reordered_input_picture[MAX_PICTURE_COUNT - 1] = NULL; /* set next picture type & ordering */ - if (!s->reordered_input_picture[0] && s->input_picture[0]) { + if (!s->reordered_input_picture[0] && m->input_picture[0]) { if (s->frame_skip_threshold || s->frame_skip_factor) { if (m->picture_in_gop_number < m->gop_size && s->next_picture_ptr && - skip_check(m, s->input_picture[0], s->next_picture_ptr)) { + skip_check(m, m->input_picture[0], s->next_picture_ptr)) { // FIXME check that the gop check above is +-1 correct - av_frame_unref(s->input_picture[0]->f); + av_frame_unref(m->input_picture[0]->f); ff_vbv_update(m, 0); @@ -1393,7 +1391,7 @@ static int select_input_picture(MPVMainEncContext *m) if (/*s->picture_in_gop_number >= s->gop_size ||*/ !s->next_picture_ptr || s->intra_only) { - s->reordered_input_picture[0] = s->input_picture[0]; + s->reordered_input_picture[0] = m->input_picture[0]; s->reordered_input_picture[0]->f->pict_type = AV_PICTURE_TYPE_I; s->reordered_input_picture[0]->f->coded_picture_number = s->coded_picture_number++; @@ -1402,38 +1400,38 @@ static int select_input_picture(MPVMainEncContext *m) if (s->avctx->flags & AV_CODEC_FLAG_PASS2) { for (i = 0; i < s->max_b_frames + 1; i++) { - int pict_num = s->input_picture[0]->f->display_picture_number + i; + int pict_num = m->input_picture[0]->f->display_picture_number + i; if (pict_num >= m->rc_context.num_entries) break; - if (!s->input_picture[i]) { + if (!m->input_picture[i]) { m->rc_context.entry[pict_num - 1].new_pict_type = AV_PICTURE_TYPE_P; break; } - s->input_picture[i]->f->pict_type = + m->input_picture[i]->f->pict_type = m->rc_context.entry[pict_num].new_pict_type; } } if (m->b_frame_strategy == 0) { b_frames = s->max_b_frames; - while (b_frames && !s->input_picture[b_frames]) + while (b_frames && !m->input_picture[b_frames]) b_frames--; } else if (m->b_frame_strategy == 1) { for (i = 1; i < s->max_b_frames + 1; i++) { - if (s->input_picture[i] && - s->input_picture[i]->b_frame_score == 0) { - s->input_picture[i]->b_frame_score = + if (m->input_picture[i] && + m->input_picture[i]->b_frame_score == 0) { + m->input_picture[i]->b_frame_score = get_intra_count(s, - s->input_picture[i ]->f->data[0], - s->input_picture[i - 1]->f->data[0], + m->input_picture[i ]->f->data[0], + m->input_picture[i - 1]->f->data[0], s->linesize) + 1; } } for (i = 0; i < s->max_b_frames + 1; i++) { - if (!s->input_picture[i] || - s->input_picture[i]->b_frame_score - 1 > + if (!m->input_picture[i] || + m->input_picture[i]->b_frame_score - 1 > s->mb_num / m->b_sensitivity) break; } @@ -1442,7 +1440,7 @@ static int select_input_picture(MPVMainEncContext *m) /* reset scores */ for (i = 0; i < b_frames + 1; i++) { - s->input_picture[i]->b_frame_score = 0; + m->input_picture[i]->b_frame_score = 0; } } else if (m->b_frame_strategy == 2) { b_frames = estimate_best_b_count(m); @@ -1453,11 +1451,11 @@ static int select_input_picture(MPVMainEncContext *m) emms_c(); for (i = b_frames - 1; i >= 0; i--) { - int type = s->input_picture[i]->f->pict_type; + int type = m->input_picture[i]->f->pict_type; if (type && type != AV_PICTURE_TYPE_B) b_frames = i; } - if (s->input_picture[b_frames]->f->pict_type == AV_PICTURE_TYPE_B && + if (m->input_picture[b_frames]->f->pict_type == AV_PICTURE_TYPE_B && b_frames == s->max_b_frames) { av_log(s->avctx, AV_LOG_ERROR, "warning, too many B-frames in a row\n"); @@ -1470,21 +1468,21 @@ static int select_input_picture(MPVMainEncContext *m) } else { if (s->avctx->flags & AV_CODEC_FLAG_CLOSED_GOP) b_frames = 0; - s->input_picture[b_frames]->f->pict_type = AV_PICTURE_TYPE_I; + m->input_picture[b_frames]->f->pict_type = AV_PICTURE_TYPE_I; } } if ((s->avctx->flags & AV_CODEC_FLAG_CLOSED_GOP) && b_frames && - s->input_picture[b_frames]->f->pict_type == AV_PICTURE_TYPE_I) + m->input_picture[b_frames]->f->pict_type == AV_PICTURE_TYPE_I) b_frames--; - s->reordered_input_picture[0] = s->input_picture[b_frames]; + s->reordered_input_picture[0] = m->input_picture[b_frames]; if (s->reordered_input_picture[0]->f->pict_type != AV_PICTURE_TYPE_I) s->reordered_input_picture[0]->f->pict_type = AV_PICTURE_TYPE_P; s->reordered_input_picture[0]->f->coded_picture_number = s->coded_picture_number++; for (i = 0; i < b_frames; i++) { - s->reordered_input_picture[i + 1] = s->input_picture[i]; + s->reordered_input_picture[i + 1] = m->input_picture[i]; s->reordered_input_picture[i + 1]->f->pict_type = AV_PICTURE_TYPE_B; s->reordered_input_picture[i + 1]->f->coded_picture_number = diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 227701b3e3..a06e208be8 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -37,6 +37,8 @@ typedef MPVContext MPVEncContext; typedef struct MPVMainEncContext { MPVMainContext common; + Picture *input_picture[MAX_PICTURE_COUNT]; ///< next pictures in display order + int me_penalty_compensation; int me_pre; ///< prepass for motion estimation From patchwork Sun Jan 30 06:27:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33927 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771512iov; Sat, 29 Jan 2022 22:32:30 -0800 (PST) X-Google-Smtp-Source: ABdhPJzdEg4sKDq7GEtkZNbq4PL1gAVDUF3r+yl0TYPeCuHiogkrZZjguHDfV9hSNIpmXQaxUJPi X-Received: by 2002:a17:906:3f8e:: with SMTP id b14mr13596441ejj.463.1643524350814; Sat, 29 Jan 2022 22:32:30 -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 qf25si6289333ejc.550.2022.01.29.22.32.30; Sat, 29 Jan 2022 22:32:30 -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=QBaUgDOq; 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 638DB68B0CD; Sun, 30 Jan 2022 08:29:03 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2011.outbound.protection.outlook.com [40.92.90.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 76F7D68B24A for ; Sun, 30 Jan 2022 08:28:59 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=A+3fgra4Xh89M5IQVyHqfUMf2IlsO//1/ya8GyUnRvgav6l16Z6h1FcHVq1CbRPQiZBTbe5atXPOYDleiYwgCzMAVPcUvC5IFF0cHwi9PvkDm+yD0k7R6meL4Nckmwrbdv2nTLtLdWnVq6hRAx5bb9LvTsVrz8EDLzHanC8Q61YtdbUZUc2W58vYLBbVL4s7/1+Tj5ygbyzkBV4+kfRJkhlE74QcrUVxOAyZ7Nkjbc49rCS5Yh7hszTZopJpcPiB1nRzwcciOTOGZs9YixycrQRk9I1ub5Z+wF3SYcpkJ76FacOzpCXf1k4nbiPnEDdwk0o2NE9OmPayIf4t/F95Bg== 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=0gtrWgq7unoMs3zVqvI7myYjzVTlT6hAPsmRR/nbwnM=; b=RKwSZXLPF+Vd6DCBIIcGaNsRmRX075sSZDKyFBhLIRatO136R0f3R54whiKJjb7L0W2NuIGIl6Udu6gwgizjwSRqEcYJY1QLL9bS0CojujrzxInyiPVJFCpEcNBQIMJX6t3AIMuQMLEL7RWAF1w3RRhEthEai/gBaEE1cQvyHIlVQx9MkCjmbQRzAEiFQXLc45ZaMdp7iSu7LrsMTTd6FcxnjrBfmD1nM9vtkweq5r4kEcCNo9HJQG9CrF8BXj0abgWp4AwwWNRHwQum/VOw8dVjif5zLtgbrVwETYcbT+865tNMtx7yPSD0BaBj0icVEp4pKAyI4IYPJ2qqThY8CQ== 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=0gtrWgq7unoMs3zVqvI7myYjzVTlT6hAPsmRR/nbwnM=; b=QBaUgDOqPFAp/08WpGmaQEli4Olb0G1cSlh8a4aYw0Fzn6Sewfz73xIYhPTE0bIJwXRvhfoKsbu3EwtmoU5WCw/R6MZ1a3H4P/1OmM4b1QrLnKT0HNU53NJaYydh7dvSz4kTtt1dYntCnn/R2EjHxtT3NJpO1Fvd0FqXjAQDdD1uqhoEo+LNrwHqUFvG5KxlqZ8dMNBezyAkGQ5v2YkS8Wa93Awlwo9fEH1b1fbsIJ0u+nbnxx5VZ87QMT3nBPMq+kfH2ZcVpDuMBOTUO0uE5MZsRLCbh/I+HkAg7OuXU8v5bVO0oupPBF8Gc6y8q6jjhfiF7rMGji9SvJPfJhbGVg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:56 +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:28:56 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:35 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [VCbN1ibe2oj4Ksi14kIUZcPop0yujITQ] 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-26-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2bfc2a28-df24-4bee-c3f1-08d9e3b9cab1 X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 72mHboDaGuTa50Zv0K246DmDHkhq4PuP9qCZPqH6YKliA6Kyaw9FhW2jANDzl0bxSpfkoALN5xc+XkhyoNure5x7nrnxiGCIf3SlUpkbFUys6otl0EoKnDEkQpA4nLNdk7GFrMRdPhpTMbx4MhXTiOKC4l9kaQ1q0stwRoDz/cbOlejFPfzOlN+trv0higiR84sF1VckATN05oheioczcSrOaUBSLUVI7z4XAciqDp6w32jFIu4uiFJpBj1sEZwrVm8lYV8jPKYicxBeonlwOOC00oQyg2JgNp42AFnJ30pbLaQW4lwWA/ysRVZFj6Zgkqx0crPiMfePkwZbkZTJLtY9n0WkxFtMIzAi23eGDmobobWOZ5ounnWsiJAVaeycyvq6siTF/du/uUHIVFKJ32balsqEa7UrnfSc3Jcv9kYIftcuBzQtUxKT0NXjMnoxTDsS21mo7kZlmLsDehZ3XLoDDP2RivxvzVmFSFqUwQU4r/nuoOxgwUmFQF3fkRLy9EeLMmZFPtlKTBB7O9fepF9mrnM8xGjji0ITmwFKFYKK/Us71aiWjejmBOKgnZdY X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BBDWOtqScr0m7YbZLs9GMOO6wJbT6puhuCFKFyzwTTBPCHq6sRo3/3ZXw+FmYRMJq8cWbPRst3un7QntsdzU8ejnhGE8TfNQfGgwrkTzGBBlTRpgSg89yVTJ5b/S+4n7cVMRNiwRZHsH1GQWB8v+wJV81sbMxx7q+VN/sY2CzeNYde/iRYovHTEXhQhfG7T05exeBWNuSaKBB3oL2iF3wIWdqeinOLOrGFhDuCIZlfU0EcYjXzgvgnn7E3/NP9TkkkdVS+BzBEV2M9ynpCcxQaK2IkiUoA3GFkl9jUV0lQwOOeb7OzGPJX5NhjbxOQqk6GwoiIaneTRz2xnUIeMjbq7dOJoSUEHz8Sp+Li5zeMKz8ce/DJn2FjOzhfR9AJ+R+4dwzOxsrIBbMoBVNVe4+UMMjyBLjJul5XQko4K/MO5hR5miWiH0sIQMJCMSE4+fmZetWRbnxtKk7yQN+D/47GVtT3S3OLGZN0DmGTl/jEfjfQ5y0eNQ8iu/XutZP5dujGMZqjVRbTsdJChyNi9EcKTf1Meu5e/RAU4pJDGBQPMx8ogQRDXlZlvLkib/NNZ6fo4PeILQnywCjIF9ineiY0JisJTNh8t0RaTqyL2Qm1AnvG/cUZfx59CFNfcvUXhq77U+W9r5ib+wi9TRseSXSCAqSr31tPINErUbgiNkcGDsduRCRT62UDkKE2axlzCwTP9uSqwwEvoM8fOgoIR08M8T1JUfb2NORwRurm2FYRMbUtxdAmMFlS6e32Hxgity4JoWtH0K7Vy5d8Wm0juWfWGcUVotnwsmm9X2OkHEU5pK6soT+qYrgFwdAIRla3rVOlCsYd9exrSAdQgypKDOa9Wi9YAAoKYP//r97dLH//OoOEKamt26BjYi9eG/A4ojUs+v5Xxb8m0z2SBVmp6vJIHlvguH0XuSdnq7DSbRv42Ecdt4V/GfDcbAwIshx7TS2ucuytgNELr05p0ldz+gag== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2bfc2a28-df24-4bee-c3f1-08d9e3b9cab1 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:28:55.9519 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 27/41] avcodec/mpegvideo: Remove write-only [fb]_code 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: 8vucy/Poth6P Signed-off-by: Andreas Rheinhardt --- libavcodec/ituh263enc.c | 1 - libavcodec/mpeg12enc.c | 5 ----- libavcodec/mpeg4videoenc.c | 8 -------- libavcodec/mpegvideo.h | 2 -- libavcodec/mpegvideo_enc.c | 8 -------- 5 files changed, 24 deletions(-) diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c index 4af7ccb527..571abdffd7 100644 --- a/libavcodec/ituh263enc.c +++ b/libavcodec/ituh263enc.c @@ -682,7 +682,6 @@ void ff_h263_encode_mb(MPVEncContext *s, if(interleaved_stats){ if (!s->mb_intra) { s->p_tex_bits+= get_bits_diff(s); - s->f_count++; }else{ s->i_tex_bits+= get_bits_diff(s); s->i_count++; diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c index 78c802d897..2c937ecf61 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -942,7 +942,6 @@ static av_always_inline void mpeg1_encode_mb_internal(MPVEncContext *s, put_sbits(&s->pb, 2, cbp); } } - s->f_count++; } else { if (s->mv_type == MV_TYPE_16X16) { if (cbp) { // With coded bloc pattern @@ -973,7 +972,6 @@ static av_always_inline void mpeg1_encode_mb_internal(MPVEncContext *s, s->last_mv[0][1][0] = s->mv[0][0][0]; s->last_mv[0][0][1] = s->last_mv[0][1][1] = s->mv[0][0][1]; - s->f_count++; } if (s->mv_dir & MV_DIR_BACKWARD) { mpeg1_encode_motion(s, @@ -986,7 +984,6 @@ static av_always_inline void mpeg1_encode_mb_internal(MPVEncContext *s, s->last_mv[1][1][0] = s->mv[1][0][0]; s->last_mv[1][0][1] = s->last_mv[1][1][1] = s->mv[1][0][1]; - s->b_count++; } } else { av_assert2(s->mv_type == MV_TYPE_FIELD); @@ -1019,7 +1016,6 @@ static av_always_inline void mpeg1_encode_mb_internal(MPVEncContext *s, s->last_mv[0][i][0] = s->mv[0][i][0]; s->last_mv[0][i][1] = s->mv[0][i][1] * 2; } - s->f_count++; } if (s->mv_dir & MV_DIR_BACKWARD) { for (i = 0; i < 2; i++) { @@ -1033,7 +1029,6 @@ static av_always_inline void mpeg1_encode_mb_internal(MPVEncContext *s, s->last_mv[1][i][0] = s->mv[1][i][0]; s->last_mv[1][i][1] = s->mv[1][i][1] * 2; } - s->b_count++; } } s->mv_bits += get_bits_diff(s); diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c index fcd436082f..4304562669 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -564,8 +564,6 @@ void ff_mpeg4_encode_mb(MPVEncContext *s, int16_t block[6][64], if (!mb_type) { av_assert2(s->mv_dir & MV_DIRECT); ff_h263_encode_motion_vector(s, motion_x, motion_y, 1); - s->b_count++; - s->f_count++; } else { av_assert2(mb_type > 0 && mb_type < 4); if (s->mv_type != MV_TYPE_FIELD) { @@ -578,7 +576,6 @@ void ff_mpeg4_encode_mb(MPVEncContext *s, int16_t block[6][64], s->last_mv[0][1][0] = s->mv[0][0][0]; s->last_mv[0][0][1] = s->last_mv[0][1][1] = s->mv[0][0][1]; - s->f_count++; } if (s->mv_dir & MV_DIR_BACKWARD) { ff_h263_encode_motion_vector(s, @@ -589,7 +586,6 @@ void ff_mpeg4_encode_mb(MPVEncContext *s, int16_t block[6][64], s->last_mv[1][1][0] = s->mv[1][0][0]; s->last_mv[1][0][1] = s->last_mv[1][1][1] = s->mv[1][0][1]; - s->b_count++; } } else { if (s->mv_dir & MV_DIR_FORWARD) { @@ -609,7 +605,6 @@ void ff_mpeg4_encode_mb(MPVEncContext *s, int16_t block[6][64], s->last_mv[0][i][0] = s->mv[0][i][0]; s->last_mv[0][i][1] = s->mv[0][i][1] * 2; } - s->f_count++; } if (s->mv_dir & MV_DIR_BACKWARD) { for (i = 0; i < 2; i++) { @@ -620,7 +615,6 @@ void ff_mpeg4_encode_mb(MPVEncContext *s, int16_t block[6][64], s->last_mv[1][i][0] = s->mv[1][i][0]; s->last_mv[1][i][1] = s->mv[1][i][1] * 2; } - s->b_count++; } } } @@ -796,8 +790,6 @@ void ff_mpeg4_encode_mb(MPVEncContext *s, int16_t block[6][64], if (interleaved_stats) s->p_tex_bits += get_bits_diff(s); - - s->f_count++; } } else { int cbp; diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 98810ea231..bb14304495 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -306,8 +306,6 @@ typedef struct MPVContext { int i_tex_bits; int p_tex_bits; int i_count; - int f_count; - int b_count; int skip_count; int misc_bits; ///< cbp, mb_type int last_bits; ///< temp var used for calculating the above vars diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 1cf194dcaf..71e751d88b 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -2445,8 +2445,6 @@ static inline void copy_context_before_encode(MPVEncContext *d, d->i_tex_bits= s->i_tex_bits; d->p_tex_bits= s->p_tex_bits; d->i_count= s->i_count; - d->f_count= s->f_count; - d->b_count= s->b_count; d->skip_count= s->skip_count; d->misc_bits= s->misc_bits; d->last_bits= 0; @@ -2476,8 +2474,6 @@ static inline void copy_context_after_encode(MPVEncContext *d, d->i_tex_bits= s->i_tex_bits; d->p_tex_bits= s->p_tex_bits; d->i_count= s->i_count; - d->f_count= s->f_count; - d->b_count= s->b_count; d->skip_count= s->skip_count; d->misc_bits= s->misc_bits; @@ -2785,8 +2781,6 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->i_tex_bits=0; s->p_tex_bits=0; s->i_count=0; - s->f_count=0; - s->b_count=0; s->skip_count=0; for(i=0; i<3; i++){ @@ -3418,8 +3412,6 @@ static void merge_context_after_encode(MPVEncContext *dst, MPVEncContext *src) MERGE(i_tex_bits); MERGE(p_tex_bits); MERGE(i_count); - MERGE(f_count); - MERGE(b_count); MERGE(skip_count); MERGE(misc_bits); MERGE(current_picture.encoding_error[0]); From patchwork Sun Jan 30 06:27:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33928 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771577iov; Sat, 29 Jan 2022 22:32:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJwlyNc/UYGKCvJCnR+zUwH779otmBY5fhh1Fr8CbfR6LAvPKxj76tkSzzWBe2nyw1RcgkEh X-Received: by 2002:a05:6402:219:: with SMTP id t25mr15284269edv.62.1643524360196; Sat, 29 Jan 2022 22:32:40 -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 qk12si2714986ejc.686.2022.01.29.22.32.39; Sat, 29 Jan 2022 22:32:40 -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=u1K7dMNx; 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 5AD8768B2A4; Sun, 30 Jan 2022 08:29:04 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2011.outbound.protection.outlook.com [40.92.90.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8C26768B205 for ; Sun, 30 Jan 2022 08:28:59 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RrTMgIXFVi3kiS60kRlzWTSFjGsDGZZlC7DpyabUCQ9Pd2E89Wx7/v7O9Pkx8ii2+GLpFOlUur9F1CDrhYRCqOMNVLMY+REhL5EpMKbzGXp9UEG8hxazV2OLXWRXmB57Mi+5fe2MZF4eFAdwgcsnyuCv6LXjOXuObV34UCi/t6Ruw2pQthGh6LHhNxxq+OerFshpzb3p8LX1NQXHs9FtJG08L9UUSxMA/jOnhRc02naOfiTwZ87OvzhuhLBRHKivIUbREVfilLzpJHu9CmGGJf7EFcR6J21W9Ntz5SFGu8liSUACm7XGUiZRpdvTcIsQkpdDs1oY1RnFj2roJFM3OQ== 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=Jw5IeDee9d3F8OUt4qMqZTCQtxlyoLG1rfxPsJ+iYDc=; b=WY7Uk5RTiefNIx6pf368BBRLjnN6ZSt+gLuF/5Mk+RAvsOyyYbiVsIyRJhRRA0oGLyF34oMLifz/b7JMoKux7mq+i99X4niCqaCHATwMSAQVrOzQYQAJxCq2rQQI8MbLDzzdAzwSX6pjotmyAzKzSX1mjl4d00Hid/nSd7Bu8kQEgVSVzgabfXc3xY5UZv2tpZ3LiVXrEshgyVeMMtS89YUIsfWXWcGdGOPugX1piJFVGEXfSOCXLUT9LvpL4u38qUW3GiE1bfxMvZl61Yk8QfvYaK2ZWbfDrxZgJJOdypyn4TUtzFLhmPka8STE7q+zFhDkrFU/yQloGKvAONljGA== 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=Jw5IeDee9d3F8OUt4qMqZTCQtxlyoLG1rfxPsJ+iYDc=; b=u1K7dMNxyT+PSUZ9WT8clN4tgtJquarx6WuRg0WPI3KB+lBLhH54v7Nbb2Bu5aNvpVhEXc1ZgYrsZph96SJWODhw1+/jWyr9MLnC6qutLCSy45267IxXDbaIL5AS8q9QrHvaKxS+Lf5JUV+sFw5N/bgA64iYOZEH/McMhdPoArK7sD1QcMlx/vbzEJSGehFm2RZfAhQP/3ibYksNPCx28cl+Jz7SKjwrUT9luZHSMCYhS9+aKo7gMwK7xk+UvAbc7OTRk+tbyK1DX3A8328xRhLPheEqjiYGFPvMa2q2KN7eirHl1mrQG3ws06XorkFqE8zV++g5gxxQQzfKmG5SaA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:28:58 +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:28:58 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:36 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [WQfnYQVdTTDhbTPzMum+PUR/1eosXKQ0] 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-27-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 04503c65-1542-4fa1-b36f-08d9e3b9cc50 X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6WTy5W5icpBW9PavvDj8+OsM7pvacIAZiWzsMFCJCpdG662kBS+St0rG/yXE6jT27O/VnbU3XPq7ERHoFeCszGLhRT4hrf8l3yxAvRFgZw1hCL7cfZiJ4goLBI6P6OkglPmnplF1ikWI9CJUD9e4JXj6T86VsNmzEddOhosDD+DVtcCSkgCG72G37xXZ0pGlwWJGPxPwa+UR3hW1cGb2CcJeqp+FAzeJMqupWfg92k8YVHKUhx4itmdggMMahYPrp6fzfG7WQo0kPoasX00rr2UXxhc/I9UJOVJX5Cn1yhkF6deYc62E1uqwD8NK+LJwp/O5DylppWF02bpwBZpRTWpm/pV44Fcmcx7Wv74y/dzZYB8buNPvwyb0RI62JwauIbPg34qTgrdUgbhDwF9xbNIg0+Bprhs7cWmrMkW9tQliGDxOR+59h+c7auiKGMPBbm2kdVFPS2e9rCII8m7fCY0SjSO2budcl8qX0zp98W2KNui9nfUSSTpVW7HSQyvm5haVznbzaZxi6jJJLyyNufZQGoMRnqyDC+FSrN2OhIs= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 84dzmxPKFey7DUWuRyc6CE5dLAJhuNSSMUwj0BZWWkGSnne/tWJH7aEvUyypFRY8EG8+O1q10cws0V76MaptiXPLy7k6yHaIL3bu8AO4Q44s+5GzMR56KvZMS4rqMMiUHMoqlEKGX1rBn2UGELXCxDZI1MpkimDf4yW//c4rBOmVwCaA17jC9OUY2bHiQy/JCt7euffgw7hzXuK1h/zXSBeHfRssQHowRNaaGPKFq1RY9mbRue89cosLHHSYIziWu8YF5nG2BivLbJFcBrammS67eGqlM/I8JfRtQUimPnz23vC716CwXpcSBSS6G9KhJqdWlWxo2F11Q+RgX8Zjei5kVBWIyF3X9xCne26wutRySnxN9eo6P+CrzsN4BsaXhym+Ol2YWSD3BYcQmCAW7Zq2WQMtsDGsRTuy/r76mdMsBJjLON3q/fVxPBgsI/OMYTUMq0KSKrAzm2towHDY5//rBskK/9gjITUDqr7pSSQkcbv8UBJDSqKgtdOFne9GR4zEiCMsj8MI85hk6pW9TYxNx2pYiWBQko7S7DGZdvbcfsEwAL/toM7m0O+3RbNRatwShZXQ65TC9At7c73JGeduLTMeGRGk/fRQp8nfl8KogdzHbqjiHC0cmcI7+BBqHXsMtHh3esYngZOje2cC39pCE3NLzyCkpv6EoPf9L4sOZlx10xR+psRpbC/SIcH74xiOuLETrjWpr3tnsN+VqAYL0PFG7kaVlt7wWrmNqhiq2HdSYuaLFLpLHCNWdINnxu66OvOrHZd3ubulvnSfIvb4Lg4I4veWaUNK49B/UQPppSpX6Hj7J0TW/7R7U1irPUnpYTpCmlP9NXCyXT1ri+LPT9VqE2zwXuj4rlDO2yP9mecqSWdZ+gSsf6W9wQ0RChL/yTVSGfqOH5Mek1/ySRorw+pXcrV+oHG65xgTDpJBhLPse18S11sxSVFiSer5y1UbG8KYxXfJzecAdjqjzA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 04503c65-1542-4fa1-b36f-08d9e3b9cc50 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:28:58.7025 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 28/41] avcodec/mpegvideo: Move last-pic information 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: AXeKXOkjotqj last_pict_type, last_non_b_pict_type and last_lambda_for are only used by the encoder's main thread. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 3 --- libavcodec/mpegvideo_enc.c | 16 ++++++++-------- libavcodec/mpegvideoenc.h | 4 ++++ libavcodec/msmpeg4enc.c | 5 +++-- libavcodec/ratecontrol.c | 4 ++-- libavcodec/snowenc.c | 2 +- 6 files changed, 18 insertions(+), 16 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index bb14304495..8b5916f68d 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -183,10 +183,7 @@ typedef struct MPVContext { int dquant; ///< qscale difference to prev qscale int pict_type; ///< AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ... int vbv_delay; - int last_pict_type; //FIXME removes - int last_non_b_pict_type; ///< used for MPEG-4 gmc B-frames & ratecontrol int droppable; - int last_lambda_for[5]; ///< last lambda for a specific pict type int skipdct; ///< skip dct and code zero residual /* motion compensation */ diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 71e751d88b..36e14efea2 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -1238,9 +1238,9 @@ static int estimate_best_b_count(MPVMainEncContext *m) //emms_c(); //s->next_picture_ptr->quality; - p_lambda = s->last_lambda_for[AV_PICTURE_TYPE_P]; + p_lambda = m->last_lambda_for[AV_PICTURE_TYPE_P]; //p_lambda * FFABS(s->avctx->b_quant_factor) + s->avctx->b_quant_offset; - b_lambda = s->last_lambda_for[AV_PICTURE_TYPE_B]; + b_lambda = m->last_lambda_for[AV_PICTURE_TYPE_B]; if (!b_lambda) // FIXME we should do this somewhere else b_lambda = p_lambda; lambda2 = (b_lambda * b_lambda + (1 << FF_LAMBDA_SHIFT) / 2) >> @@ -1575,10 +1575,10 @@ static void frame_end(MPVMainEncContext *m) emms_c(); - s->last_pict_type = s->pict_type; - s->last_lambda_for [s->pict_type] = s->current_picture_ptr->f->quality; + m->last_pict_type = s->pict_type; + m->last_lambda_for [s->pict_type] = s->current_picture_ptr->f->quality; if (s->pict_type!= AV_PICTURE_TYPE_B) - s->last_non_b_pict_type = s->pict_type; + m->last_non_b_pict_type = s->pict_type; } static void update_noise_reduction(MPVMainEncContext *m) @@ -3525,9 +3525,9 @@ static int encode_picture(MPVMainEncContext *m, int picture_number) ff_get_2pass_fcode(m); } else if (!(s->avctx->flags & AV_CODEC_FLAG_QSCALE)) { if(s->pict_type==AV_PICTURE_TYPE_B) - s->lambda= s->last_lambda_for[s->pict_type]; + s->lambda = m->last_lambda_for[s->pict_type]; else - s->lambda= s->last_lambda_for[s->last_non_b_pict_type]; + s->lambda = m->last_lambda_for[m->last_non_b_pict_type]; update_qscale(s); } @@ -3553,7 +3553,7 @@ static int encode_picture(MPVMainEncContext *m, int picture_number) s->lambda = (s->lambda * m->me_penalty_compensation + 128) >> 8; s->lambda2 = (s->lambda2 * (int64_t) m->me_penalty_compensation + 128) >> 8; if (s->pict_type != AV_PICTURE_TYPE_B) { - if ((m->me_pre && s->last_non_b_pict_type == AV_PICTURE_TYPE_I) || + if ((m->me_pre && m->last_non_b_pict_type == AV_PICTURE_TYPE_I) || m->me_pre == 2) { s->avctx->execute(s->avctx, pre_estimate_motion_thread, &s->thread_context[0], NULL, context_count, sizeof(void*)); } diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index a06e208be8..8e6c45c0b6 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -56,6 +56,10 @@ typedef struct MPVMainEncContext { * a delay */ int64_t reordered_pts; + int last_pict_type; //FIXME remove + int last_non_b_pict_type; ///< used for MPEG-4 gmc B-frames & ratecontrol + int last_lambda_for[5]; ///< last lambda for a specific pict type + /* bit rate control */ int64_t total_bits; int frame_bits; ///< bits used for the current frame diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c index 9ab7f9e146..d34de80192 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -153,7 +153,8 @@ av_cold void ff_msmpeg4_encode_init(MPVMainEncContext *m) static void find_best_tables(MSMPEG4EncContext *ms) { - MPVEncContext *const s = &ms->s.common; + MPVMainEncContext *const m = &ms->s; + MPVEncContext *const s = &m->common; int i; int best = 0, best_size = INT_MAX; int chroma_best = 0, best_chroma_size = INT_MAX; @@ -206,7 +207,7 @@ static void find_best_tables(MSMPEG4EncContext *ms) s->rl_table_index = best; s->rl_chroma_table_index= chroma_best; - if(s->pict_type != s->last_non_b_pict_type){ + if (s->pict_type != m->last_non_b_pict_type) { s->rl_table_index= 2; if(s->pict_type==AV_PICTURE_TYPE_I) s->rl_chroma_table_index= 1; diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index 4e7bbe49a7..03466a1a43 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -901,10 +901,10 @@ float ff_rate_estimate_qscale(MPVMainEncContext *m, int dry_run) /* update predictors */ if (picture_number > 2 && !dry_run) { const int64_t last_var = - s->last_pict_type == AV_PICTURE_TYPE_I ? rcc->last_mb_var_sum + m->last_pict_type == AV_PICTURE_TYPE_I ? rcc->last_mb_var_sum : rcc->last_mc_mb_var_sum; av_assert1(m->frame_bits >= m->stuffing_bits); - update_predictor(&rcc->pred[s->last_pict_type], + update_predictor(&rcc->pred[m->last_pict_type], rcc->last_qscale, sqrt(last_var), m->frame_bits - m->stuffing_bits); diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index ebed90c729..6ff0491a77 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -1858,7 +1858,7 @@ redo_frame: return -1; if(avctx->flags&AV_CODEC_FLAG_PASS1) ff_write_pass1_stats(&s->m); - mpv->last_pict_type = mpv->pict_type; + s->m.last_pict_type = mpv->pict_type; emms_c(); From patchwork Sun Jan 30 06:27:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33929 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771629iov; Sat, 29 Jan 2022 22:32:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJy9W9mK9TggSE+Pp8rCOmg8NggM/6Es2P87l6KPmdhp5dii8RKf1j2ZqNc5Binbcqv6sbWU X-Received: by 2002:a17:906:5d14:: with SMTP id g20mr12761177ejt.237.1643524369146; Sat, 29 Jan 2022 22:32:49 -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 qb2si5567911ejc.722.2022.01.29.22.32.48; Sat, 29 Jan 2022 22:32:49 -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=mKGWBoJP; 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 7026068B037; Sun, 30 Jan 2022 08:29:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2055.outbound.protection.outlook.com [40.92.90.55]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3AB1468B2C1 for ; Sun, 30 Jan 2022 08:29:04 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PDZMOSu0G5GNyPB3r0d18HgZeUgtt0YgmL7I9Q2GraiR3/Ve+YAKY1K4TYoB+FOKL7O7GJ3rcQ55kFqkfPPi/OOqdpPYLAmqvqRZUsV/sn+0k8ySN/0dndNSVj68DyWDhLMIs75YwTDg9mMdlmH37YvROjiElKRACKE/gksDumPS62gkJj2LSPwKAZk/mJHZtA2X20KF3LsIVtdLPr5mUDLTc9NE0Ah98w2/CHWvCcjWGy0JhNAXAl813rxYUtJ26fOOJDHFlltqQt7Rydx7PC9xIIDm6XJis3d+rgx9LTAzgoD3veBH8opUkXyELTyvsIymdRJJlVWkdXeTfdE7Tw== 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=PH00C6vfx+i/296T6qffhqrkzi/FpxrKxNfm1FUTmTk=; b=ipupynjI21imb/luKQVYvpqVv5Y2lYsedVgQvg/adopQvWLNmYXWuimpwdQvqc0EsiLIZzsjvZSdvvunTdpgWGSuhK6w35uxaSADlTVMKevA4vC1UOPdVztIWZz2HF2nquYFFcyYcPTdho3KAtL8EHhP9di2jUTq1YRNaIfgoCvdInERw2Ufwlw9u1MDO6uKoh+820CHlnLa+1r4oa3Qw4gzb6drlHz/HPiMkI24uxAWK0HHpHBf1qdbYEN+luWEb8cbN/M3cPxo7RqwYTQAxo2CeK5DpxT9Wk/onm2DkJeQWcIsPaBQg0y8E+ZTMRH1vVRW3qDn/mlL0Eep/B3Xjw== 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=PH00C6vfx+i/296T6qffhqrkzi/FpxrKxNfm1FUTmTk=; b=mKGWBoJP6gsB5lzhM1ogOK4D5KIsLpYh43qBZvMhp+uVHQJZRdRQBCM/jPGMTmfPzdnXinZAQb1b/iUBA8pjHC1s5C7hR6/n6AvZTMy2m6vk0147lp5Pu8b2E9ssqMO/U12rYTCr2QujzRkGTZfCp/z4kny9YEVLJlKN5euBF15tznGoUbNlEOk5LJECNar4wgCmR70LgZH9Rm0Bl0WFx18z633s0hvjS26yO5RubuK21u6u4vVArclLdbG1Z3NJ7FIJn88AqqMvkmZxOD3lI82HyyTO7k5rhlcDOMo3T2vJ1gQeQkrhtH+Ugu7s0IRt66gEpAXdC3e8evSfyOxeag== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) 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:04 +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:04 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:37 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [hcy+ukf+TZfd5y3wVgxWojjp8b59a5/H] 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-28-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a1438aa7-4b26-45c3-966f-08d9e3b9cf87 X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5r7jeU5s+bXFsfQ+D7SH4icNezy8gIdZgF6k37ovrfqQ+KYpukhD0LKMVOUMB7eEccRyEph5du8bMx7qAuxqk4WRl4y/NyKFhzfHpjNp9rn48ATedRG7HE/iohaiYemct+4a+3i27eMNp8aZ4vFkv+WCAd8oo3DV4J97MBky/hHT91feukO2LxcdRc8GFMHzEf2CqcToUqZcz4RHfmOVOX2mQeeD0LlLTkxicgG3DzDO8r+LQfy+Dj80ZNro3VkgAiTlo/4togX2jMyAB+hg54b1JrWoUvdUpD7pEaOlm8GPj0GOT2TVDu40xI+eXsUe269ia+2EjeXKvXp20Y0uKVOC2KXiumOt0Ge5PDdsEcLuLTi030Pl/PdmFa5r1J5NRIVUWMhY3ceozXTFbSYJRPCVpm4/9uYtYlMm5gcq3GUcc7MGxXVyu5XmKnQM+dUAAaMaJjrEFsQ8zspzHtYXSIoEPeukEVhWejrbEozFsuAclGnPOSydMuIBBX+dx0B1TuMGZWCDRuVur6Vda16bQpNM7Yl2GTKTFoa1MmgD7LE= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: QY02TmMAEGaea3WskCX9RHHTZ5mb0RUf3wczeSUHKSuHkQTDEIZEPDop23+gZUcs3zCkZW7wDorVTZ2e9BitXk+M7+AXfnnq+MmlqFkTqcO9Zf3tT4JKZ/K+3v7653IPp89ANzt0WKojRC/zu4zqUdun4VycjtaRmzWSivW9MsiIoyAhZLv6TGxf0YeiWdzy+o3NT8c9RFbKkISx/S0WGdDcvO4556vDadN52bHsLF+vvcKVDGCNyN1EyNVyBcOBDdXD5WyybEs3roEKHZZAexuvTTI8JR8K2Mp8BQSGDjQYyFV/tiUcSYqSQvr2gUXcSCPxoL+BxYLfOKFbLKoZVVeYEJJfjJJInrJc7kd9KnsTn2BsyDjL2cdV0GpgeEzZhK/NTfTYHit5lG/rmuGO2bLJnISv2ee9jWNgwe2Led59rfGItmIia9aKul8Y6demQuQ97K4sazcWKpG0KxVLDfWHW2muTCGPsEWAdru/MU4RCFKE6Bf+t3e9fmvnuSnm8+CN3pO3tx3c4RYxI2YEyPMUVENgD66Xc6vH6ZmZos+kD9YJhqgzi3rru1gZzSCT3i+LGLizIKBOxKTyyAjTcQ1ggkmCiau+WYPf1k9+K+YEQYlSVHwx+hXDtCBNzcVFH0mvQX6BeCyPhabP8nEt4CtOzoGMjtITGDnHqwtPLd3RlC7qbdJRWJedLcrN2mbFLnBaiwBLzlz53MXII+dzxHmCuk0utQsvwnB4YXMtoRbOkEOIr8igYDX/p6ATV7FupQgxV/Rvfi05h6sxBYiv2kvUrg9cVUzxriEU9/TinOH6Ab0r8VhWItrf8P6yw9X2Xv1ldxC8wgn3EuDlzFBUlr35oDoF16p0+PxTVcNYEN3LihzcMZIkZnpP6RGdADtsQbZt6F88o/2y8zvEgscITPLcSnR40evQiOzdyMOPJUw4915N1K4dUVWktJZi01mL2KPCTog1lYvezFlPyXjEfw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a1438aa7-4b26-45c3-966f-08d9e3b9cf87 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:04.0641 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 29/41] avcodec/mpegvideo: Move header_bits 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: vO5NoB46FoQV The header is always written by the main thread, so it is not surprising that header_bits can be moved to MPVMainEncContext as well. Signed-off-by: Andreas Rheinhardt --- libavcodec/mjpegenc.c | 14 ++++++++------ libavcodec/mpegvideo.h | 1 - libavcodec/mpegvideo_enc.c | 6 +++--- libavcodec/mpegvideoenc.h | 2 ++ libavcodec/ratecontrol.c | 2 +- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 23772c4c1f..a8efe72231 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -103,8 +103,9 @@ void ff_mjpeg_amv_encode_picture_header(MPVMainEncContext *main) * * @param s The MPVEncContext. */ -static void mjpeg_encode_picture_frame(MPVEncContext *s) +static void mjpeg_encode_picture_frame(MPVMainEncContext *main) { + MPVEncContext *const s = &main->common; int nbits, code, table_id; MJpegContext *m = s->mjpeg_ctx; uint8_t *huff_size[4] = { m->huff_size_dc_luminance, @@ -118,7 +119,7 @@ static void mjpeg_encode_picture_frame(MPVEncContext *s) size_t total_bits = 0; size_t bytes_needed; - s->header_bits = get_bits_diff(s); + main->header_bits = get_bits_diff(s); // Estimate the total size first for (int i = 0; i < m->huff_ncode; i++) { table_id = m->huff_buffer[i].table_id; @@ -224,6 +225,9 @@ int ff_mjpeg_encode_stuffing(MPVEncContext *s) #if CONFIG_MJPEG_ENCODER if (m->huffman == HUFFMAN_TABLE_OPTIMAL) { + /* HUFFMAN_TABLE_OPTIMAL is incompatible with slice threading, + * therefore the following cast is allowed. */ + MPVMainEncContext *const main = (MPVMainEncContext*)s; mjpeg_build_optimal_huffman(m); @@ -236,10 +240,8 @@ int ff_mjpeg_encode_stuffing(MPVEncContext *s) s->intra_chroma_ac_vlc_length = s->intra_chroma_ac_vlc_last_length = m->uni_chroma_ac_vlc_len; - /* HUFFMAN_TABLE_OPTIMAL is incompatible with slice threading, - * therefore the following cast is allowed. */ - mjpeg_encode_picture_header((MPVMainEncContext*)s); - mjpeg_encode_picture_frame(s); + mjpeg_encode_picture_header(main); + mjpeg_encode_picture_frame(main); } #endif diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 8b5916f68d..ed1416fca6 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -299,7 +299,6 @@ typedef struct MPVContext { /* statistics, used for 2-pass encoding */ int mv_bits; - int header_bits; int i_tex_bits; int p_tex_bits; int i_count; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 36e14efea2..22f4cd2d0e 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -1737,7 +1737,7 @@ vbv_retry: frame_end(m); if ((CONFIG_MJPEG_ENCODER || CONFIG_AMV_ENCODER) && s->out_format == FMT_MJPEG) - ff_mjpeg_encode_picture_trailer(&s->pb, s->header_bits); + ff_mjpeg_encode_picture_trailer(&s->pb, m->header_bits); if (avctx->rc_buffer_size) { RateControlContext *rcc = &m->rc_context; @@ -1794,7 +1794,7 @@ vbv_retry: s->pict_type); if (avctx->flags & AV_CODEC_FLAG_PASS1) - assert(put_bits_count(&s->pb) == s->header_bits + s->mv_bits + + assert(put_bits_count(&s->pb) == m->header_bits + s->mv_bits + s->misc_bits + s->i_tex_bits + s->p_tex_bits); flush_put_bits(&s->pb); @@ -3754,7 +3754,7 @@ static int encode_picture(MPVMainEncContext *m, int picture_number) av_assert0(0); } bits= put_bits_count(&s->pb); - s->header_bits= bits - s->last_bits; + m->header_bits = bits - s->last_bits; for(i=1; ithread_context[i], s); diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 8e6c45c0b6..55c265edbe 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -60,6 +60,8 @@ typedef struct MPVMainEncContext { int last_non_b_pict_type; ///< used for MPEG-4 gmc B-frames & ratecontrol int last_lambda_for[5]; ///< last lambda for a specific pict type + int header_bits; + /* bit rate control */ int64_t total_bits; int frame_bits; ///< bits used for the current frame diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index 03466a1a43..c41682b29c 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -54,7 +54,7 @@ void ff_write_pass1_stats(MPVMainEncContext *m) s->current_picture.mc_mb_var_sum, s->current_picture.mb_var_sum, s->i_count, s->skip_count, - s->header_bits); + m->header_bits); } static double get_fps(AVCodecContext *avctx) From patchwork Sun Jan 30 06:27:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33930 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771705iov; Sat, 29 Jan 2022 22:32:58 -0800 (PST) X-Google-Smtp-Source: ABdhPJwWahg3OjibhfMzJolT2c1UBGJfS+p2vQke0HQMFPOG/5RjVBqiotnvA03bmMEhvKgfMwhU X-Received: by 2002:aa7:d4c1:: with SMTP id t1mr15813614edr.207.1643524378213; Sat, 29 Jan 2022 22:32:58 -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 w4si5716607edu.318.2022.01.29.22.32.57; Sat, 29 Jan 2022 22:32:58 -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=LLDbXlAV; 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 66CAE68B28A; Sun, 30 Jan 2022 08:29:08 +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-am6eur05olkn2027.outbound.protection.outlook.com [40.92.91.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 52A9E68B22C for ; Sun, 30 Jan 2022 08:29:06 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OfXfyvE8kEadqBgEYklXBsraz05m2mIkf84mCyTIpLoK9KQLGGDfDVlOHV2Lb6iuCSMTpJcdbQpRLgiiP7158dLTjK7CzaHu2fbB97Eqh/NPPNsBeS4FqC/UDSZAWrkmWFLwcr+VRGYha9Y/XFQcEWAX9F7gj+ZfNIs8AaeyRJSljCIH7UqxhrFJy+YYvWmkXxn98NUcNRtTs9DuiWx3RUxgz1+dJFRMKM816FFNtNiO0KepWMOs48cRAGIjfBO/idem0hbeMnmfRz4WIuFfwfVYjbMJ5+zBZSzmXv6CL1Y2Nm4s5UrHIcrz7GwfG+gD9+BsC3hBFws+mfrfaL+q4g== 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=uN8FEsf3l9sq7P80zR+620KtmovWZI9dPYPmSlrnyfw=; b=GVRU8vhFgHbDxfmNkj8q3eCFzp1xz4PrNMALrUQxTAU+Q7EHITQ5uPx/K0LLLG5thGaR+wIoNXQLk9wrfJm4OOaqcYZLnXKQGjZlycTzH9OD+ez9I3H4w8YKRLqLEiNpKYfxzA8KAud3qOAPn6PP1+mIAODEOKBhd3zCGYzvdgtKnsxS4cwnR24i1w2KHC63NHPt1ffuJNkBp2biyPD4jvVNA+4MAUk3cYK1XVul2UotNSQCT0SZuWzRtVj+ieLs8WOY5p3wJfubdJG6yJbVQ8x9t/J39zQRH7Vucntau3zmzb+WdRuEhfVMj17+GbdfjF+3x+5pY0dWfKtdDKeGRw== 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=uN8FEsf3l9sq7P80zR+620KtmovWZI9dPYPmSlrnyfw=; b=LLDbXlAV0T5B3SoVBI8axzoJ9kEFNuTQkHOQHtxphA7rAQdRN16blOrx+a683g2CCCNtavINOdNFdlYXPL6tpR2Ktz4NY5b1lluZQthtOv84/Fh64ngxgP5CKqzWsnzu7v9V6CE2aH02gBCj1KWqpl+GcJK8jAATLHTloKhNGmWYnD8Cj1e2O53Ac9mNvH3o6zQEvSOQs+34SuL//a64F7AWAnhIOApFCfaumT4bpEb36njOfMmwjBYyjzWblfoMYw1EK+GmodyMox8rzJswSwYPbrF4MPukoKnyhJBYOXbT9fgSc5tyiKO4wRQ73KCdFf1sXJjO4XQNGTNn1aOVZA== 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:05 +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:05 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:38 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [TAhd11tcFc3kQFvHA94PTN9PeGP+s3pW] 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-29-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b9f1c266-99ac-4b11-26bc-08d9e3b9d057 X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +b8B9WpBRkxbvHktcwQopf9E6xerlDkgY/+TRAlXCzXYAUuQtmaJRCfftwJ7XM8nMT2DDVxu92/yEIehB8J9qJwx0O8LAM8viN3AiikDnQdcQ/HJkqLzqW79ji5Z+b2i6AbaZLQC5cN/HD+4rOQjPkTq6IuV+7cWlbJReIIXJgacJCpgyWh3bNync9SEz98nVBcm+bL3++VqqhVnujO7fE1ZbZSv4yOAF6hv8MA2EHNIuqwxUR4LnfzqCSYX8UOmu4pBqNUDy0X2zVRx7/QR4s42JzPioiXbWSDZoKfbc1DL/YCOiqC2UmICXOILYz++LrVKW+ts9bhjsnJmoDvKTYNn+gec4DMaaNCTJsBVTt8h+YSx0UG114H6XTw2oDcgVV2gKxgrqEhPPQQAw8SiCPFvIHeMlD2PzGgS60LqJwgnPt99KhFTgLgsRnvb7srlc2paNcL+wCuXb5pug7rAWpQHYpv7FdleCD9rXx7WrsF09yoyMNdZmCQVRDyvD+UdwuN2AOTdSfsJtu3D2BxlOHeClFm+f8cC5hYXDwOPZegfaPsLAi2ePo6HBrUkWL+u X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lx3uMEBMSvztFBMWHgJOreoCi/lyRtlHBHaa47usm25PqG8xoA7MOG21AWGE1u2NGcEjnZqlk4eGQZOjoOKvv4nbHqwzZ7/5fofHOTzAnD3x+JWwMkk4vQAVhLL3mMSwIU2O0T3QtF3jyAWxywoZqizZaMloWRYws+so/DOH8jls++s8pn77D35voaBMk459/hyc4G7cFO72KEpMa4FBB8FGTtLQuK4yOba7g+iE6eEcYn6Xu9k0w3+RnFjh8ABFnqduKoGg5kze9cW+EuSOFnw2LC75g7jQ9lKG2Pab5Y9FY3iMDqmL5Ze9L80WzIVtiBbI2nI2M9mi2wlB6ysVLUxzzWJb1/11YrKPcw/gurIuSkZ/TpRvxSXypLaXySaLDl//rF01QUaztlV2TNUQrZjQTEVGPh/CgdT4noGqQ+9zdTRUCB1PIypW9kfWDf0Ql2Nda06DnC/rnf+Kp2REkfOarVm3I3YlRNNHLd6+7bx6wFZSK7acKauz299aDddzeYbMr2ZwbqFrytA0My27q8KXlKp1Ga89b68tOOU4mGOk5m+vf4NamU2lCOxO2t9U86+OrdEC4FqDtypKcw2hbgnxkbmzAdh35CcDTouYIywfcGQqJGWy/cVFzDckcbnl0RmIvocgOwNq8tAG52435J1CN4fp0Ks7AWIk2mjuDEzazhxHNK6AieejDorUh267iW3VVssMiwHltbQ1q2ZHTVEPdoFTZO2gvqOKG1dYOnMNbHx9SRiKjjw7IUXtoswrkNMWwbfMeTOeFZnK1I0/YfnK76MjqgqWoDdZp4X/nq4zx/fk/MC/gIelu9lk0I3R1Ry5lDcyEvPVGl+vaKvf8kchGaJy7cLPqK7wJkWDPFAiC0vQbdC7zl43c/HJs7VjxxabadX75p1evxgpaIYCKe2KV+AJEtrwEhU8GZzbTIL0cehsI/Dw+kLYeIkX8xgwqRilGL3eSYlQZ/1BG3VN0A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b9f1c266-99ac-4b11-26bc-08d9e3b9d057 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:05.4244 (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 30/41] avcodec/mpegvideo_enc: Remove unused function parameters 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: 1ymMGU/ItbmO Seems to have been always unused since these functions were introduced in 1f0cd30fd9b656122436ecd625656a04f6235fb3. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_enc.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 22f4cd2d0e..61f8e20006 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -2429,7 +2429,7 @@ static av_always_inline void encode_mb(MPVEncContext *s, int motion_x, int motio } static inline void copy_context_before_encode(MPVEncContext *d, - const MPVEncContext *s, int type) + const MPVEncContext *s) { int i; @@ -2457,7 +2457,7 @@ static inline void copy_context_before_encode(MPVEncContext *d, } static inline void copy_context_after_encode(MPVEncContext *d, - const MPVEncContext *s, int type) + const MPVEncContext *s) { int i; @@ -2502,7 +2502,7 @@ static inline void encode_mb_hq(MPVEncContext *s, MPVEncContext *backup, MPVEncC int score; uint8_t *dest_backup[3]; - copy_context_before_encode(s, backup, type); + copy_context_before_encode(s, backup); s->block= s->blocks[*next_block]; s->pb= pb[*next_block]; @@ -2542,7 +2542,7 @@ static inline void encode_mb_hq(MPVEncContext *s, MPVEncContext *backup, MPVEncC *dmin= score; *next_block^=1; - copy_context_after_encode(best, s, type); + copy_context_after_encode(best, s); } } @@ -2966,7 +2966,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ int next_block=0; int pb_bits_count, pb2_bits_count, tex_pb_bits_count; - copy_context_before_encode(&backup_s, s, -1); + copy_context_before_encode(&backup_s, s); backup_s.pb= s->pb; best_s.data_partitioning= s->data_partitioning; best_s.partitioned_frame= s->partitioned_frame; @@ -3200,7 +3200,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->current_picture.qscale_table[xy] = best_s.qscale; - copy_context_after_encode(s, &best_s, -1); + copy_context_after_encode(s, &best_s); pb_bits_count= put_bits_count(&s->pb); flush_put_bits(&s->pb); From patchwork Sun Jan 30 06:27: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: 33931 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771818iov; Sat, 29 Jan 2022 22:33:07 -0800 (PST) X-Google-Smtp-Source: ABdhPJxaHeCeS6ZGOdn8FeSTE4cznMoaMsd4tNHmJ9UeCtD1DzwUFuuYV/2z4H91QKeUeO5FSl70 X-Received: by 2002:a17:907:6d99:: with SMTP id sb25mr12645252ejc.10.1643524387710; Sat, 29 Jan 2022 22:33:07 -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 z1si5880009edm.334.2022.01.29.22.33.07; Sat, 29 Jan 2022 22:33:07 -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=rcZu+pi1; 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 6827868B2D5; Sun, 30 Jan 2022 08:29:10 +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-am6eur05olkn2056.outbound.protection.outlook.com [40.92.91.56]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A184768B2D0 for ; Sun, 30 Jan 2022 08:29:08 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oAvPLjwNPSJxp+xZlBUyRBt9uSWwOImdeEpLkY7FzWplGZsYtTs4oGCu4Frpc/vjIPAEeVVmRk3H3csJh3Uv7/GDk8AYfl5D/BwhsisuWSursYGGiyzCN5YWkEhr09e4fdWuwrV8S+aaVs18LusaCepwhl+BOytBDgpUpNxABljEQBj5PleYRexjghVAkzs5aHwMoCz9h4j3HCeyCYbRmP+aiWAaAeqxVk28AK1kHMpDmVVhTpjV1HlqaDqDOVZULPCUAt1DqSmw8ymjJUZNr1wk5ZHjglz1BACL//YVeIJ1oy0bvaCQQeGSlzzxvZE6EAJ7GUCIv+vnwZF7N479gg== 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=sRbT514/alNI/Ix2LDcr0FvrHvazobSIsnizkBPrU/c=; b=PHAFPKyh79kYUd59VbsxdODv1cSfmmHJxP2+nJDkevQv//p5Tlnfev8LTjfzzkC6DudZH4X6u1RWB82lHmNjz0Er47m0l+eRCaVSEfv5DL7wynj+m5JCiAMbN7QeG/75jvI6ISg1t0kA87X81V2zXgwNc9/D4re9kJLy4OdSurkgPpmaKpdZwTk6Vf1Q6xBIeCYuX9e9hVVdbzCSJ4cEoJsQbTKFD3QCSc3yz4xTlhgh0LrUgOCIJuDIpOYo12gIigj4casfGqA1+v3AwMIA+pNc7Nc5LI6I3KuS1UFGXrbJlffZqwgtcyTvJq1Lt23JD3YZWar+VZy0r5End2JnZA== 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=sRbT514/alNI/Ix2LDcr0FvrHvazobSIsnizkBPrU/c=; b=rcZu+pi1qbslSEZ5XiSkS7E1CCGvqVbWmJ83CZ7y6Nn/v+HVpq1xVL99S5TUQ7Mj9nao4HCd8FTlcyem+FZjU1fCWCgx0PkLbtw+YgQ7fgpc95IxFCD4O2fln4KU/XPgLysHyB74WltikhK+nA/YXBqy/GCoE+ETcT48vdTS5xPMtB1V3O7Rlh6ODVNZpzFewNsf0alXU4pVJaRp+cK27Hkv8s5flA8+AxgDFvBBNpWnG8mfdvIjXBxlPVRElOFv+n7oNz2iUxY1+Ix0cev5PNwlSHekVH1c3MpUfsl4hea26SoDkgxhzG/6UgUF9bnqE6VFlihkyJ35OYMmIpKYLQ== 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:07 +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:07 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:39 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [H4VcxxBxEwpIzwdaaYhS8GJy7ws+/CI4] 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-30-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3e9be91f-f13c-47d0-7d89-08d9e3b9d16b X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: v3QEoVJIHUidihaujInY++TtJp5HG00zyRduJeaPJyU97uXI2F5oUrDVJDN+9+wwNwp3PBEUJW0a7gkTSLllOxo4ms7Fq41NU269g6AGSj/u4ZeHHFjiv5P/Kjr6GmLzcZ4kGDkEDNIxc2mGRmEKXgpWs+hXWzMFwv6MltmxPYB/MWGgYfwkpnZg2tPMMR+3/H9y4WEl3X65IBJVTKmEKr76U6QwUKqNeUge+WyAXpgJCFXF+NhI8wz+GY4t7EVfnUTfG6PoTSVe4PbyIn5wV3sKwli7rxJVbdDNSgEhyavAgDtU94a4xp6M/nyQKUm/HV/0OGs7G3bVyjiuddrkDtRdrT9gGmwBeBSfhsVerg3Et6RfRqzqryXpL+3qhWyRaLFdIKPP1d2nU9iRR1FO718cDhf9e5sOks5JaI0g13NNkwVMMjiZFpZEWXDfBRW24lPzywt6AJfFj9y50X+e5OjOHCe1TI2wTL00lNJqrsssN+M1R6dRr2NYMep+gngUlFqfKKoUnlguZpAoOtQefYAtVU0WTfYdo2mSPUD75/lEsljTa3H+XgMRLwrv0nTU X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +ZsYVFRgIGqDyZTNTzISQBt6OPl6h0N3FMG84EHyj0UK323JUTRGehQ+f4bbjDHqLnnmaPYxWSsFTKPndawU7Z/IN2CroiBC0WP6+I/SGqd4oWug3Uqe+dxJDxwbvDLQDEYIQyTuTpnK6LOGisFkckZW8M0z4U12Fa7hFHmYuL5182xf6+UNNVtXeoOMrmJFqFsTn89gK9JUp8R91jSXiUXjyCdRjoUW01QjdMUyDxl6Uww0WJw725tpD1GXAlUMOxo1BektexbuLXQcwLY6qm2V02CLOAcvjXEx2dMoajOOfUYIco8LYiGqZWGkD2UGRYwK8ih5i9A7PbbQ/AB7VMGLoxujc0HP6dut8gKCyijOt95Vue6vRNTq6pl75K8F7cXEDHafYy6XnD9FTZOc0+aT2JQZMR2n0XoV2AHyFrKtNruw1SXTBtIuRCIbLLiukcMBm7NpHM3z891o+ZQXKQ1vfgg6D5mc6mUAm1rFawLtnP998iOCXvBNCiymUhIi5B32EGmg5/o8++QhRH6FcoyVqlhSNNFXrW3cGHk9InLkWSZoSfx9Zht4QWcajtGafNqKdEhthtG5sa/dEBD2SZYjWLJ4W+YZY1Z2YChPrTgJsvivucKUbKCs0oq0QTjyLihdioo0hmM6osw23SZ95a+FsxswQpvsKONFFUd65YhGr+1g6kgLXiMQ6+Zl8Nyc3OVjQIF+0dDwt8y4ljtFUsbNujOomhi+ebibpMlAJvSV6xc5PqV0gbzn17ACcnm8lzaOVMbe+UbWXx8qFzaNV2+6Jay6P9dUtnqC/HEfxCNgE2OoaaXM5ldcaU9CdxK76odsDcUddIk96BBLGWMqm/RcZuAtihExKkl/zIjE5OJZZBD9G/W44RykTf+EoDPFwop/iq66MMpX5gNveX1q5cyex+6BZbCT/n+0WrPCWT/6sjqR9nMyTbxO1gDwnplPACkalBDhpbxKHyCt+DR7Kg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3e9be91f-f13c-47d0-7d89-08d9e3b9d16b 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:07.2523 (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 31/41] avcodec/mpegvideo_enc: Remove unused parameter from encode_mb_hq() 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: MOwz3imZ9q2R Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_enc.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 61f8e20006..b90eb43399 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -2495,7 +2495,7 @@ static inline void copy_context_after_encode(MPVEncContext *d, d->esc3_level_length= s->esc3_level_length; } -static inline void encode_mb_hq(MPVEncContext *s, MPVEncContext *backup, MPVEncContext *best, int type, +static inline void encode_mb_hq(MPVEncContext *s, MPVEncContext *backup, MPVEncContext *best, PutBitContext pb[2], PutBitContext pb2[2], PutBitContext tex_pb[2], int *dmin, int *next_block, int motion_x, int motion_y) { @@ -2981,7 +2981,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mb_intra= 0; s->mv[0][0][0] = s->p_mv_table[xy][0]; s->mv[0][0][1] = s->p_mv_table[xy][1]; - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, s->mv[0][0][0], s->mv[0][0][1]); } if(mb_type&CANDIDATE_MB_TYPE_INTER_I){ @@ -2993,7 +2993,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mv[0][i][0] = s->p_field_mv_table[i][j][xy][0]; s->mv[0][i][1] = s->p_field_mv_table[i][j][xy][1]; } - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER_I, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, 0, 0); } if(mb_type&CANDIDATE_MB_TYPE_SKIPPED){ @@ -3002,7 +3002,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mb_intra= 0; s->mv[0][0][0] = 0; s->mv[0][0][1] = 0; - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_SKIPPED, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, s->mv[0][0][0], s->mv[0][0][1]); } if(mb_type&CANDIDATE_MB_TYPE_INTER4V){ @@ -3013,7 +3013,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mv[0][i][0] = s->current_picture.motion_val[0][s->block_index[i]][0]; s->mv[0][i][1] = s->current_picture.motion_val[0][s->block_index[i]][1]; } - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER4V, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, 0, 0); } if(mb_type&CANDIDATE_MB_TYPE_FORWARD){ @@ -3022,7 +3022,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mb_intra= 0; s->mv[0][0][0] = s->b_forw_mv_table[xy][0]; s->mv[0][0][1] = s->b_forw_mv_table[xy][1]; - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_FORWARD, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, s->mv[0][0][0], s->mv[0][0][1]); } if(mb_type&CANDIDATE_MB_TYPE_BACKWARD){ @@ -3031,7 +3031,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mb_intra= 0; s->mv[1][0][0] = s->b_back_mv_table[xy][0]; s->mv[1][0][1] = s->b_back_mv_table[xy][1]; - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BACKWARD, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, s->mv[1][0][0], s->mv[1][0][1]); } if(mb_type&CANDIDATE_MB_TYPE_BIDIR){ @@ -3042,7 +3042,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mv[0][0][1] = s->b_bidir_forw_mv_table[xy][1]; s->mv[1][0][0] = s->b_bidir_back_mv_table[xy][0]; s->mv[1][0][1] = s->b_bidir_back_mv_table[xy][1]; - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BIDIR, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, 0, 0); } if(mb_type&CANDIDATE_MB_TYPE_FORWARD_I){ @@ -3054,7 +3054,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mv[0][i][0] = s->b_field_mv_table[0][i][j][xy][0]; s->mv[0][i][1] = s->b_field_mv_table[0][i][j][xy][1]; } - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_FORWARD_I, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, 0, 0); } if(mb_type&CANDIDATE_MB_TYPE_BACKWARD_I){ @@ -3066,7 +3066,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mv[1][i][0] = s->b_field_mv_table[1][i][j][xy][0]; s->mv[1][i][1] = s->b_field_mv_table[1][i][j][xy][1]; } - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BACKWARD_I, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, 0, 0); } if(mb_type&CANDIDATE_MB_TYPE_BIDIR_I){ @@ -3080,7 +3080,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mv[dir][i][1] = s->b_field_mv_table[dir][i][j][xy][1]; } } - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BIDIR_I, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, 0, 0); } if(mb_type&CANDIDATE_MB_TYPE_INTRA){ @@ -3089,7 +3089,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mb_intra= 1; s->mv[0][0][0] = 0; s->mv[0][0][1] = 0; - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTRA, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, 0, 0); if(s->h263_pred || s->h263_aic){ if(best_s.mb_intra) @@ -3133,7 +3133,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ } } - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER /* wrong but unused */, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, s->mv[mvdir][0][0], s->mv[mvdir][0][1]); if(best_s.qscale != qp){ if(storecoefs){ @@ -3154,7 +3154,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT; s->mb_intra= 0; ff_mpeg4_set_direct_mv(s, mx, my); - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, mx, my); } if(CONFIG_MPEG4_ENCODER && mb_type&CANDIDATE_MB_TYPE_DIRECT0){ @@ -3162,7 +3162,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT; s->mb_intra= 0; ff_mpeg4_set_direct_mv(s, 0, 0); - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, 0, 0); } if (!best_s.mb_intra && s->mpv_flags & FF_MPV_FLAG_SKIP_RD) { @@ -3192,7 +3192,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->mv[1][0][1] = best_s.mv[1][0][1];*/ backup_s.dquant= 0; s->skipdct=1; - encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER /* wrong but unused */, pb, pb2, tex_pb, + encode_mb_hq(s, &backup_s, &best_s, pb, pb2, tex_pb, &dmin, &next_block, mx, my); s->skipdct=0; } From patchwork Sun Jan 30 06:27:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33932 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771901iov; Sat, 29 Jan 2022 22:33:17 -0800 (PST) X-Google-Smtp-Source: ABdhPJwVs8GvWHkZcBOVXtmBnpOh/qYTvxxny6023Xr+JzRUpeT4SuT7KsYUU1IUz5knvi1kOxrJ X-Received: by 2002:a05:6402:254a:: with SMTP id l10mr15147221edb.318.1643524397375; Sat, 29 Jan 2022 22:33:17 -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 y3si5583910ejk.567.2022.01.29.22.33.17; Sat, 29 Jan 2022 22:33:17 -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=OaS98M1l; 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 5CA7068B2E1; Sun, 30 Jan 2022 08:29:12 +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-am6eur05olkn2070.outbound.protection.outlook.com [40.92.91.70]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0101868B22C for ; Sun, 30 Jan 2022 08:29:10 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=U/JF2PVg4CHBdrQU1xmkop7dNkKD7NpykugMNU0PMda1uj+AUQWC/ZgTEQOEWmiDW2HZ9BOBK602dDu2UrbOUB/g5QzWiJ1ajQ+zqSL8NzBqN2ek/uGbRIEnRfMjs11GNmcr7/m+/TsD0aU70Ktb9Fni6ZTgsDV/GZOaajqV3BiEuPqSv/uWwyi5Chv3k5jXjgXhvXezoNuZcZakoEshZB1UAVx99a8Lde4Td4EeLP7VwF1JCq7Jp425/FClYVDsjxJvaPezG9L9gMPBanXB699qeBlV3NNggKpiamIWFzXeYEglDn5iOergQGPzACxHo2n2ppP/J6nUnfFnsWY7yw== 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=fmp8t6mikpYnyUK1L89z8JscGBuDbsVE3Je2uH838uk=; b=cFV0eDOHZDCJGHzzDDzxGMn5PnAybbswSUP+CCRNyONza6pB50vCNgtAIzE/BZUDRdb0RglnIJE5kwMAGT8T4u1Y8VPP6ZAIoJY5V447xSC536z68aDL8INoc2yvbYQKkLGsD64NMeYLKFFMeaUDdgk9k3Wexj7EZLkiEzdB1QNpexK5wGziYuFKcF6v9wAlETwPcsYjUPMGvRYMGhLg4T2xBooDOB2BmwkTGQy4xJWs+HBnhFB8bExDpFvhAP2fUDjEe7QVSwkmjMxG4UUambdWncIdATKrIF+X0pEdkf6KAEcZnIohgvWOhH5EwOfxdvvv0zBfXKHm/dvCsafc7w== 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=fmp8t6mikpYnyUK1L89z8JscGBuDbsVE3Je2uH838uk=; b=OaS98M1lJI3mk57qqcfIBdFT2xGJ0E8SRPEOi0sJ06jIpCpd8jmDnbSWn3HlszFQZNuK2lLn1lJQz9Ta2R2AN/bYjE1CkELcbh2cQwc5eO3qe1ABcrcTKqUcuSbHaP8wHTQv5aGWVbRaufDxc800B1tJKB3WoVZQ7FnkmcweZ/iZxZDYVUoJfBToGlDzsGdIWAp7SkqQYFvdhpXObM3zPu3oW7Wk5Cfx+P1UVMQg6uSpN/gKTULDg3wyo0buMx5gDYGV5Itg0Xm8ZJytCOmy66rerXntaNZ8VP+f0ogsvbsiIE6QFxLn3dO0bwG44PaZ3pTN8kh0UwdGIQBRQ6WsMA== 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:09 +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:09 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:40 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [26asfCTy0v87ae7Wed1j88IkVDH9Rcbu] 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-31-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 60619da3-bee8-44d1-c441-08d9e3b9d2c0 X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +/vh7oeGSvm/7aaoyPirej+R5tAwU9mpjmjOb+FD+j6H0p8TRs7un4U78D/d9vxezZzcOQLUCod9gINexdjL9+rL6c9LFA/gAw3Dj4wu4XhM41tsb5orDnDpmU4gqNgOSgGNEIrd3jDJK8S88Xrd4/F3nAyiC//L5R5+FaPD17OWEYhjdI0QaVFtMTn2FqqJvL0EwzIoBrDYE6rqz/DWBU/+lHNj1OqwRSPwR9V7wvKixKNgBLsJv9u0m0LBbjC5Nu0G+xgz/soL6QNY/uMtr/UL7TGFMA8qRmb+nU4v/9gCkM/os0LYfC0p1e+cqdMVHqUQJbw6yCIFtaLLdCu9b8tuWkfPc/c9xHBZSrBldIkXb1722zM0JOzR+DVMUw1jE2CL51ddnm4zh6ezoM9h48vo3GResZiyKdMqChy3/rMRmqPh616vd+ZoTtv547jnsRw5/37HGwJbdcJ0ZHB9Dq5eAJFcEQYvFXgGq853TfdKmXt8DRFWWaCCVbRzDMNU+OiJ7jyiCM8bwIkmLX/mqwGRd9Xaa/fIUYl4EmVP9SPx7iiUi0LDw1ZPUfQGJQd2 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: G77Hpkn6Prjp86Y2CVsOIpSouZrOOR2iiklkpEvBrgc7QV5mH5PiKIVhiGckCBnZgiMiJMbaIL1ReppPHB0JlDuOTWoycGImo1SdJIzC0W6Pu0J0in5WHVh6QAKqzqPSBD2JQGOF9qa9VOv1BlilDS3lPChiHJO6V06wtC8xfu4M4BzIlgebQ7QKcYviPKIEmZLZfjpWl8AR+RipT0bMciZlAY+rcudB0HJODSxTit92TW26FY6S1yvhcJhfRTAvbeFt2PMXD1nhaG+YG0i+vn3yNTlxdQwdEbrDIGxG+pTeEEaHxtMOre5SpjwqYJ7R5LMjt2bOqvZ9olkE/VF48ES+0Z6K5M/9ieHWQYV6qPnxJttLs9cgiCL22HpnBql88IDJeIULtLcUXj5zjURWLL81UGs/loeLFn+mEb7RLKXuaGvY6n8IZfBW2kSz88R7vRrdH5wtxPNLv/pyI6f0cTUmyooWQyHPOAnYTJck6X4YkzwnFLEcHnZyeuamKpSkIOvcqyLTbrhdk0fKsLSSs6moK+AmE3fa4+Lhp1NfgmJaR3O5QmK+7gdjGGdZVMI+AdAE6BpGNT42kUczcV1hLYWGzB51G7cjqpJEI2XKLfogKbI8TgQhPsjMycgihD8UVtgv3wbBSut2KUhSSWezdAWbufnXmRUwpeMBINCLvzbC+VT3txeK/80nf/bOaBJ7hEtVv8GSa7GbOLgwOkWYPL4hxUj6bEF/Bx649073yGAm15sC+Y8JF8KYFIWzYW4i/5eHGEzvV35iEUL/Y/ohgAFQWaq0E+3s2cCYWEUsKYjaQfu55mU+Kqrf7dGvqXI49VsMl/lWiaj5pp43OjkNZ3237Zl6tCnygn5jpHRJWOerhD1u0lFruLLx8GKphhRkzTNKRkf/LpCRqDGkOpAlTvSG/HstXKrKQ0C+JgCdnPNqvASqyE1oZN8Wg7b6q8es1KHtTBoXXZqF7LD4NHpuXQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 60619da3-bee8-44d1-c441-08d9e3b9d2c0 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:09.5189 (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 32/41] avcodec/mpegvideo: Move vbv_delay to Mpeg1Context 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: yVeF6MN+SRpk Only used there and only by the main thread. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpeg12dec.c | 5 +++-- libavcodec/mpegvideo.h | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 4c53451d8c..631582fd61 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -69,6 +69,7 @@ typedef struct Mpeg1Context { AVRational save_aspect; int save_width, save_height, save_progressive_seq; int rc_buffer_size; + int vbv_delay; AVRational frame_rate_ext; /* MPEG-2 specific framerate modificator */ unsigned frame_rate_index; int sync; /* Did we reach a sync point like a GOP/SEQ/KEYFrame? */ @@ -1284,7 +1285,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx) if (avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO && s->bit_rate) { avctx->rc_max_rate = s->bit_rate; } else if (avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO && s->bit_rate && - (s->bit_rate != 0x3FFFF*400 || s->vbv_delay != 0xFFFF)) { + (s->bit_rate != 0x3FFFF*400 || s1->vbv_delay != 0xFFFF)) { avctx->bit_rate = s->bit_rate; } s1->save_aspect = s->avctx->sample_aspect_ratio; @@ -1357,7 +1358,7 @@ static int mpeg1_decode_picture(AVCodecContext *avctx, const uint8_t *buf, return AVERROR_INVALIDDATA; vbv_delay = get_bits(&s->gb, 16); - s->vbv_delay = vbv_delay; + s1->vbv_delay = vbv_delay; if (s->pict_type == AV_PICTURE_TYPE_P || s->pict_type == AV_PICTURE_TYPE_B) { s->full_pel[0] = get_bits1(&s->gb); diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index ed1416fca6..0e8e11743e 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -182,7 +182,6 @@ typedef struct MPVContext { int adaptive_quant; ///< use adaptive quantization int dquant; ///< qscale difference to prev qscale int pict_type; ///< AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ... - int vbv_delay; int droppable; int skipdct; ///< skip dct and code zero residual From patchwork Sun Jan 30 06:27:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33933 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771963iov; Sat, 29 Jan 2022 22:33:27 -0800 (PST) X-Google-Smtp-Source: ABdhPJwdXw0fni80ZOxJHTSQDXGh1O5v7RcabUrK31c4bv95s7lw8EJWtTF3kONkqKQeE8R8J6YE X-Received: by 2002:aa7:c0d6:: with SMTP id j22mr15711029edp.240.1643524406967; Sat, 29 Jan 2022 22:33:26 -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 dn8si5627894ejc.1000.2022.01.29.22.33.26; Sat, 29 Jan 2022 22:33:26 -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=jaOfdcIB; 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 6B61168B2E5; Sun, 30 Jan 2022 08:29:14 +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-am6eur05olkn2108.outbound.protection.outlook.com [40.92.91.108]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B79C568B22C for ; Sun, 30 Jan 2022 08:29:12 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WcUv5Ouh+0+7xzBa0kDWHVNxxzLf7PRGAEaw4fG4ABPaqnsJFQWktE85BjSN/c6Zy9OhtK3lqEJM6fHgXjDQl/vjq/Sg1f61qiRgaDO5CI5aeeX2/eKHRDxSCvY5PbZUZXprpLu2CjSX1j6EbxLSLJSkMO2Aa5uvor1H4MAZspy4TSZ+6qOjKpLVeSZFxols+n1rXRMds5LLYPGizEyJn7Ay09dMCy9yghft0uJcnP6+Ei465DidDHL+dYQXHFBRBLUtKTbjkdDE3qf2Sun7mp9TO1YE7fd8ew9yoAT1653rYcbzvmH5LM5kcgbxCLwzERvYxW8/n8rCGdZqa8O0nA== 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=SSQYZMVfx0xtBof2Jj6W65vVKrGiAlFGTuYMgqerHk0=; b=n9WiYjLcDyOAQS1TvxAwq37vhmlftnMkS50WB0evtiAKBrgafaGgpK3//8aivo+ez8ytquWtQQweHz/C5+kaB9tWGx9vzDh3pUuhIlnz8ScUoUoUsyMvHLVegvaPO04e2k275OiEF+FJp4X98yGhbmn5pzxnjG9tHxLiySkFec+l6qSdRbjNRdXDkz3VpO08IkCN44fzWSc9JcfCUTudXFzecKqKsBt1lQsxcQePRwifDrPXdWO0eOsA5VcrFW/FRYPVTt9+OnDIv4cEGF7k0Oy8Px/QHXVB9EiHGbjhUWvxNt29TdbLmJNjsyTCphWJpXgOy9epYy+vQqHklEVOfw== 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=SSQYZMVfx0xtBof2Jj6W65vVKrGiAlFGTuYMgqerHk0=; b=jaOfdcIBxePWUmoRqZ1kAWQNQ6j6O3kpawmwhFBxaFxbUwJNMeERdFU3gc1pf7d3LeruVc9HF9MSWvosz9TtfyUXnW77CrKtwQ1ylszEMg9u+bDaJfuqltFfwY94LN+hLF9M1Nq1iXncceck6xolz7gwHuLZOjtRvsVZN3wj9QsYi0Ub8x7APtnH4rENGpbhPDhq1ytglnXJLMgIWoqaYgim+X7Xu7wEw4V/3E3nqnj43o8fD0Uge2wLs46o5yo6ZUxy1EcVDFqUbY8czdObgUlDoencvfyOb0w2WbU0wvLPdSOQsC+U6M5h8RwpK7ch51LP6wOJjU5+wNCAvgJp7A== 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:11 +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:11 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:41 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [ev73eEPCRbFKp/6kSbS6Pj49TtdKl8Lt] 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-32-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8f867cdd-a408-4bba-8df4-08d9e3b9d3e8 X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NEuLnHqzyvUIYmaNFJyTzROb6n9hKcN9hGtFj1lAkw1biqclHfwD8UQ1Mfdkj2YHBfWajP2JRP04yaHBBYYuXOx/Wc8jgjZfRoVwdLj+o+jvTYV+i1jynBUtVRccf+G116oBLgoi8x3KBZM8q6xIY4CV5wDbq9loiuxytUIOU55zeBUmErdNmqeuCVpzEJiK0Zx9ehn0cXddzK4UIdXlBdJ+KtNTCCWUkCn/Dn04Y7uF86A4L/JBA1+Q5ytecleM1zFy0dTZW9wPdFeWIwBzHeuNLVDYlzrB5PXhNGL9haOxh+Y91tpPyrlYS7FKOKTqMAP1O06168ZujJQqnGwcJVxHqqhB/Va3RI+HRT8r7OPNzheABrLOshw0fPnwv8bGB1Ag9ICtc6hEN7MN1RHmhF0JdnwHPgzfgo7ddUJzpA7WUduaHqctQSiTNaeFlxiDkH/DEEMgCZqMlbEcXF16TBpKC9eanSdXDKZDWIW/CbjjsCbINwvMP/LArxW+xHvLJx7kC8HrDQso4P5q/tYC+v+qhTPrSDBkO2iEdhS+tmo= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Rl+lPhrqneSJB3uGCknn0hqsuRKsimQjKEfZBIIs8O3lpjvG5TCLm6UYrJaPkeBlCiBkx4FA5T2Xt8HKdriLJ4gBWJHDjBfyk4zhNe3M5f9pD7TndPRxBBdhFGFj9dY4vW1H76/hzVLSChsUnM/8s0oDn35Vp9iIsQ0kNmn8guTTI/uGzhZH6OmAzgC4lLjeB8K7RFrZ9C7gDDcBiGlIaaUWn5Hcy2IBEvR3im04ME7QvAw7wgiMEMKi64RyAobDPrd4Jz1IMJ1drh6SaVqUKsXgJxC67nEXML04rmxeAfqdsIgM2xYtGP6hkY3M/XDRRQM2jcGtYRhTcKkYlN4GySCuKqZiK+I8c0LFX2BfkKacbi4GGr/0oKVdyVGinoPgZwm/u3AbTDp3rCL5SvyxP2M+9p3wCK+qJRFw9/Kq03LtKzY5VOtgFWN6uXcebckwyzXYg+O7OYSdl27fFWSmhPo/3whKzaufHmQYaRI5bEZAPyrl04JcrRSr+tY9VFp+V3e6shAQMguqWG4Cwl+K62QO9HOuuGc/CJQQvI0P4ZWZXZR9IG8ZslOSaXop8kr7Jt24eTNJxYFQlf7/cUZetmee79ZoT0yKDAQSapkxxPa44eLtheFKdKI1OeI3KcasgczOTI9AU0CWa8RwvJt4gMqrb044pHE+bNF/K6EV0uCUVgvwwyLPBb/pnsjWWonxX3JJntQSBjrr94zqzqU7YCAbwwuYefsdVqhAiif9O0IYYZg59EBaL5vOIiGdKj5YWPyo+HXYQCdkCyFYu3PMLKwSbCt3vpcrLLhIi56DVvmcT4pgf3q3dOrPuEU+fK14jrBjYJMYd0MB9aAFYOQt0+LeHUGRrCT+MEnSJE2ccob3d3SQI4TrtYdWl2vRvy17ELLCwb0Mb0vUEgfRBtCb6RDavWBRxJtxsrHkORxpPr0/2paotukOkrRuXe2lbsSxdocpxSritpElknq6RT4tWw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f867cdd-a408-4bba-8df4-08d9e3b9d3e8 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:11.4104 (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 33/41] avcodec/mpegvideo: Move brd_scale 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: pT7cipyuE18U Only used by the main encoding thread. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 1 - libavcodec/mpegvideo_enc.c | 6 +++--- libavcodec/mpegvideoenc.h | 5 +++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 0e8e11743e..c11aba340e 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -410,7 +410,6 @@ typedef struct MPVContext { int top_field_first; int concealment_motion_vectors; int q_scale_type; - int brd_scale; int intra_vlc_format; int alternate_scan; #define VIDEO_FORMAT_COMPONENT 0 diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index b90eb43399..1039a50db8 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -907,8 +907,8 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) return AVERROR(ENOMEM); m->tmp_frames[i]->format = AV_PIX_FMT_YUV420P; - m->tmp_frames[i]->width = s->width >> s->brd_scale; - m->tmp_frames[i]->height = s->height >> s->brd_scale; + m->tmp_frames[i]->width = s->width >> m->brd_scale; + m->tmp_frames[i]->height = s->height >> m->brd_scale; ret = av_frame_get_buffer(m->tmp_frames[i], 0); if (ret < 0) @@ -1222,7 +1222,7 @@ static int estimate_best_b_count(MPVMainEncContext *m) { MPVEncContext *const s = &m->common; AVPacket *pkt; - const int scale = s->brd_scale; + const int scale = m->brd_scale; int width = s->width >> scale; int height = s->height >> scale; int i, j, out_size, p_lambda, b_lambda, lambda2; diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 55c265edbe..539bdf3065 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -73,6 +73,7 @@ typedef struct MPVMainEncContext { AVFrame *tmp_frames[MAX_B_FRAMES + 2]; int b_frame_strategy; int b_sensitivity; + int brd_scale; } MPVMainEncContext; /* mpegvideo_enc common options */ @@ -155,7 +156,7 @@ FF_MPV_OPT_CMP_FUNC, \ #define FF_MPV_COMMON_BFRAME_OPTS \ {"b_strategy", "Strategy to choose between I/P/B-frames", FF_MPV_MAIN_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS }, \ {"b_sensitivity", "Adjust sensitivity of b_frame_strategy 1", FF_MPV_MAIN_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"brd_scale", "Downscale frames for dynamic B-frame decision", FF_MPV_OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS }, +{"brd_scale", "Downscale frames for dynamic B-frame decision", FF_MPV_MAIN_OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS }, #if FF_API_MPEGVIDEO_OPTS #define FF_MPV_DEPRECATED_MPEG_QUANT_OPT \ @@ -167,7 +168,7 @@ FF_MPV_OPT_CMP_FUNC, \ #define FF_MPV_DEPRECATED_BFRAME_OPTS \ { "b_strategy", "Deprecated, does nothing", FF_MPV_MAIN_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ { "b_sensitivity", "Deprecated, does nothing", FF_MPV_MAIN_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, { .i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ - { "brd_scale", "Deprecated, does nothing", FF_MPV_OFFSET(brd_scale), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, + { "brd_scale", "Deprecated, does nothing", FF_MPV_MAIN_OFFSET(brd_scale), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, #endif extern const AVClass ff_mpv_enc_class; From patchwork Sun Jan 30 06:27:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33934 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1772013iov; Sat, 29 Jan 2022 22:33:36 -0800 (PST) X-Google-Smtp-Source: ABdhPJxpnaUU3e5cYSm6Ms9N4K+t5QmZ21593Z8nKkg9UczQUq3zlteGUHaOPyc0NCc1+LJ+ltkr X-Received: by 2002:a05:6402:345:: with SMTP id r5mr15802142edw.269.1643524416062; Sat, 29 Jan 2022 22:33:36 -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 hg2si3840019ejc.231.2022.01.29.22.33.35; Sat, 29 Jan 2022 22:33:36 -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=nZfLbMUk; 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 5727168B2F7; Sun, 30 Jan 2022 08:29:21 +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 B843C68B2E2 for ; Sun, 30 Jan 2022 08:29:14 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hI+W7SFKfHJUjybawGsXGSSfdaFeA0lE0ETliukEGqV0a58DGDw3NA0HVU6ICSFyztAaukv+b+3CE8ZMIHLRCzTKBcZKs/IcJfI1hfPLOHykwYC5Fwd4Ee1zBKbTXD77RADoB9Fm3HSsgJ4+TuWMYVqXpdEgJkwsn9/1th4EbNTt49N/vHdGZ2cYaxxKbJ6smGbcIHWYt+alqV6UOELpZAd3MiWf7l2tBnJHFnc9Wcq/ppQxdLMy9QqAXKiKz11IxYl9zdY6ns2AMWNedgu9FCvfa+wHvkdZsVxivecrBB1M+P+0WyRAXSS6cAiJpUo/B5gdGlErgGSX/0FKNMVDKA== 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=ImvEkyh2G2kfls4y/2uM/Tm8dx0f6mO/plE1b6W0oCU=; b=JJpC6HjJmZTWXbDOkVelNp+/E/knj55oH7aeevMcrhKxY82Fbnrrug5alU6imchsll+b8IacXSgnOTpxLRWlN1oMQoRuy+nQkCHuc3lXc6llWCzJXWPp4dNT8mi7GFo/aanXf2DDE0IBpnrCvFYqU7o4o1k+pPjt527LXn3mRyxkAZ9lTP9qojx0LaoW1pAYH9h7O+En7st9Zx1bN98QMV+dDnJd2SBT5vIiSn8tB0/mTgjwPVYuhfpNM/7+vFZhf43GWJJRMNQWdLvGTlJO0v/RFuVLbYYt+pJUu+xEqQmCU4ub1KcYuEVocsX65RPwocgQ+n4+IjauNPGmxihiRQ== 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=ImvEkyh2G2kfls4y/2uM/Tm8dx0f6mO/plE1b6W0oCU=; b=nZfLbMUkEKV/PcwiZzp7o+6J8+Ftbqb6cu+Nh68mEU779J3nKmXml0owZVV742dSbLMi/UXrkv6Hl0kzYuItbUZo1gR+91YOwA7hvTtsPYgbv9iL6uCpSYbvwRE5Goqkd3NzTlEMnxXTD7OUJTolkF0X+3uXi7h04si11AmFSC6dzA/PTbTRa/z294cYseEdnhSXu064zYw/jsdgOlJ3NGbHw3ff5z4fT45kZZ6a2z2vEzkq1Omxw2kElsUjoCWvSMEZlilsVOoavH0mTRg2JwABtFJl0RHf+1BLLvexdsbxoLnh2n5oS3PmB8EVBmMghpKUMhAQGCezTzN3y0+KWw== 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:13 +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:13 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:42 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [vyQuJbW05HDNhepS4aLWP6gsoy+DWayu] 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-33-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1593ce4b-08d0-4ce7-884d-08d9e3b9d523 X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7fM/4nmv0hESBXMmgvMS81uoI/OqQpibBDEm7vhKyhMZFi0MAv5FCgzeqs8WHtR8mANPR1IYZ93z0QX3hw+yHEm2TAVo0C0TIj+7yYG5Rmc+oghSrsYELbncivFYERp+ZV9GB3Kc3yUkV0ymWBHdTuAqYhcsal17PGpdGpfx2wAinIJLysM4dExZe6+KH2HUBOSl0ubB6Rqb7+4NlOiy+KQGt1oyoM005YEaEPYk4RDPxRsBZsHoj7zRwYIGoFDdIs68XBBu3n9RRlC0IntzJ6lMNh8kwj1kHEQhY1N+y/Th7VxbqMsE9kDH5abcOsNPjHiecvR/uqim9tlQQNKjTxVGzU4CZzwiJ1GiZc5pAzzIam4z8tA0mPB/0B3Z0YlpbT6QLkRiZKEe6dSsjos90lE7at+Eiu7TKXxOBrG/zx8p1+tnF9/nujMiwrf4uWoouzJfSbpklU3vnVOG8VBoZiaHvurE0H5yyjUtjtpcO4lB7k9F770GBRhM2U6p3u6gjnxyubRfhO4Mcv4nS/uNgzzGmEzWHSWUufT1F4+x/pdHILec8kU5MOVwitUaUwj5 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: CsKc+AjNEt44NXziKm/AYeWOLLMwEc2NXydwQKehFHfetYvBchB6LZ0XVWzYlb60wXPkdBMb+VxA3QMXyEh6kIZTuvPcC90CHA3guX8m+03859lFuaU+N0cx5KEFBb2o1PzDfyqAT4KjxdApqP1Imp21d5Z1GPZvL5aWwFvRJgxQfpkE9GSiOA4NnNQpCnophwKXh8jTsNrOhg1a49LRjUUGxRcmZvNXA4BTPjwSxytRUdzFSrCW/LJKG+FkH5k1vWTv3MqFZ4lRjoGKALxad5SNmZpUVBm0MTLQRvgjjYhxeAu9p+a1/S2baCVCM21Awyx8RZHuvRSpNi7xddwncigCPMfoRMRWhrDTCP2bgIny0/YorZVtjhAWb28lTj58P2BKZC34NQTISp+TiqwC1id3HrLyhVXYWV0dBO4Av4PTfjT2XCE70ARuitTMU3JWcomwKGMQpPKtfCYbbJ3kVRqmfXWFl1rkNC9mrHAMoj3HKFd3WtqXZ1eq6Y6X7cjUxvuGTbcmCRsEwhBXuYQwfTntjOpIE0h5VxiRh7lLkjhWztPHLdxs+L5Sg93AWgiiRrzAVoXdA6kemecwfsPvw+CkwgFXcALXYuvPnPAnv3UqFQ7gUsO+1LLQjdcX2oDFs8xAjRpqblylWBk9+Uzi74HySKoVv/v1gUp9DDWHDjiL+foQ1q5Z/sLqWUnlvl26Hv35QqmfWIZIwovagGmtz3GwyPcQ8qPPt/X7/FaR9FCb3iCWvJ04M6WvDZXopNoJaIcZbn0d0gtTj//4kwkMnS0vm2gKIcLHfAn4iEr9W3SElqRtUKMKNykreOYJWWUBZPg0FC3GDKIGGKzOxlzaGpW0NsMFUFV+f1JfzPxCu4kqe4R50LZRI+yPb/IamLcLmCuUMIfWSeJvqga51XBGd9R4z5OlNpRPcDMVPHnIYxRvSp2k/wQ+gc2xWnkby3tbI3YcdMVKd+Zqs2scNOc6Hg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1593ce4b-08d0-4ce7-884d-08d9e3b9d523 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:13.4747 (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 34/41] avcodec/mpegvideo: Move ratecontrol parameters 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: 66OIwlea60l/ All except vbv_ignore_qmax are only ever used by the main encoding thread. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 13 ------------- libavcodec/mpegvideo_enc.c | 4 ++-- libavcodec/mpegvideoenc.h | 31 ++++++++++++++++++++++--------- libavcodec/ratecontrol.c | 38 ++++++++++++++++++++------------------ libavcodec/snowenc.c | 6 +++--- 5 files changed, 47 insertions(+), 45 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index c11aba340e..ed62175db5 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -473,21 +473,8 @@ typedef struct MPVContext { int mpv_flags; ///< flags set by private options int quantizer_noise_shaping; - /** - * ratecontrol qmin qmax limiting method - * 0-> clipping, 1-> use a nice continuous function to limit qscale within qmin/qmax. - */ - float rc_qsquish; - float rc_qmod_amp; - int rc_qmod_freq; - float rc_initial_cplx; - float rc_buffer_aggressivity; - float border_masking; - int lmin, lmax; int vbv_ignore_qmax; - char *rc_eq; - /* temp buffers for rate control */ float *cplx_tab, *bits_tab; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 1039a50db8..fd82681869 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -406,7 +406,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) avctx->temporal_cplx_masking || avctx->spatial_cplx_masking || avctx->p_masking || - s->border_masking || + m->border_masking || (s->mpv_flags & FF_MPV_FLAG_QP_RD)) && !s->fixed_qscale; @@ -1746,7 +1746,7 @@ vbv_retry: int min_step = hq ? 1 : (1<<(FF_LAMBDA_SHIFT + 7))/139; if (put_bits_count(&s->pb) > max_size && - s->lambda < s->lmax) { + s->lambda < m->lmax) { m->next_lambda = FFMAX(s->lambda + min_step, s->lambda * (s->qscale + 1) / s->qscale); if (s->adaptive_quant) { diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 539bdf3065..ada5935410 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -68,6 +68,19 @@ typedef struct MPVMainEncContext { int stuffing_bits; ///< bits used for stuffing int next_lambda; ///< next lambda used for retrying to encode a frame RateControlContext rc_context; ///< contains stuff only accessed in ratecontrol.c + /** + * ratecontrol qmin qmax limiting method + * 0-> clipping, 1-> use a nice continuous function to limit qscale within qmin/qmax. + */ + float rc_qsquish; + float rc_qmod_amp; + int rc_qmod_freq; + float rc_initial_cplx; + float rc_buffer_aggressivity; + float border_masking; + int lmin, lmax; + + char *rc_eq; /* temporary frames used by b_frame_strategy == 2 */ AVFrame *tmp_frames[MAX_B_FRAMES + 2]; @@ -123,19 +136,19 @@ FF_MPV_OPT_CMP_FUNC, \ { "error_rate", "Simulate errors in the bitstream to test error concealment.", \ FF_MPV_OFFSET(error_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\ {"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", \ - FF_MPV_OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0, 99, FF_MPV_OPT_FLAGS}, \ -{"rc_qmod_amp", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ -{"rc_qmod_freq", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS}, \ + FF_MPV_MAIN_OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0, 99, FF_MPV_OPT_FLAGS}, \ +{"rc_qmod_amp", "experimental quantizer modulation", FF_MPV_MAIN_OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +{"rc_qmod_freq", "experimental quantizer modulation", FF_MPV_MAIN_OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS}, \ {"rc_eq", "Set rate control equation. When computing the expression, besides the standard functions " \ "defined in the section 'Expression Evaluation', the following functions are available: " \ "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " \ "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", \ - FF_MPV_OFFSET(rc_eq), AV_OPT_TYPE_STRING, .flags = FF_MPV_OPT_FLAGS }, \ -{"rc_init_cplx", "initial complexity for 1-pass encoding", FF_MPV_OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ -{"rc_buf_aggressivity", "currently useless", FF_MPV_OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ -{"border_mask", "increase the quantizer for macroblocks close to borders", FF_MPV_OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ -{"lmin", "minimum Lagrange factor (VBR)", FF_MPV_OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 = 2*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"lmax", "maximum Lagrange factor (VBR)", FF_MPV_OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 31*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ + FF_MPV_MAIN_OFFSET(rc_eq), AV_OPT_TYPE_STRING, .flags = FF_MPV_OPT_FLAGS }, \ +{"rc_init_cplx", "initial complexity for 1-pass encoding", FF_MPV_MAIN_OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +{"rc_buf_aggressivity", "currently useless", FF_MPV_MAIN_OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +{"border_mask", "increase the quantizer for macroblocks close to borders", FF_MPV_MAIN_OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +{"lmin", "minimum Lagrange factor (VBR)", FF_MPV_MAIN_OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 = 2*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"lmax", "maximum Lagrange factor (VBR)", FF_MPV_MAIN_OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 31*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"ibias", "intra quant bias", FF_MPV_OFFSET(intra_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"pbias", "inter quant bias", FF_MPV_OFFSET(inter_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"motion_est", "motion estimation algorithm", FF_MPV_OFFSET(motion_est), AV_OPT_TYPE_INT, {.i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, FF_MPV_OPT_FLAGS, "motion_est" }, \ diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index c41682b29c..fa28e6d61d 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -118,10 +118,12 @@ static double get_diff_limited_q(MPVMainEncContext *m, RateControlEntry *rce, do /** * Get the qmin & qmax for pict_type. */ -static void get_qminmax(int *qmin_ret, int *qmax_ret, MPVEncContext *s, int pict_type) +static void get_qminmax(int *qmin_ret, int *qmax_ret, + MPVMainEncContext *m, int pict_type) { - int qmin = s->lmin; - int qmax = s->lmax; + MPVEncContext *const s = &m->common; + int qmin = m->lmin; + int qmax = m->lmax; av_assert0(qmin <= qmax); @@ -158,13 +160,13 @@ static double modify_qscale(MPVMainEncContext *m, RateControlEntry *rce, const int pict_type = rce->new_pict_type; int qmin, qmax; - get_qminmax(&qmin, &qmax, s, pict_type); + get_qminmax(&qmin, &qmax, m, pict_type); /* modulation */ - if (s->rc_qmod_freq && - frame_num % s->rc_qmod_freq == 0 && + if (m->rc_qmod_freq && + frame_num % m->rc_qmod_freq == 0 && pict_type == AV_PICTURE_TYPE_P) - q *= s->rc_qmod_amp; + q *= m->rc_qmod_amp; /* buffer overflow/underflow protection */ if (buffer_size) { @@ -177,7 +179,7 @@ static double modify_qscale(MPVMainEncContext *m, RateControlEntry *rce, d = 1.0; else if (d < 0.0001) d = 0.0001; - q *= pow(d, 1.0 / s->rc_buffer_aggressivity); + q *= pow(d, 1.0 / m->rc_buffer_aggressivity); q_limit = bits2qp(rce, FFMAX((min_rate - buffer_size + rcc->buffer_index) * @@ -197,7 +199,7 @@ static double modify_qscale(MPVMainEncContext *m, RateControlEntry *rce, d = 1.0; else if (d < 0.0001) d = 0.0001; - q /= pow(d, 1.0 / s->rc_buffer_aggressivity); + q /= pow(d, 1.0 / m->rc_buffer_aggressivity); q_limit = bits2qp(rce, FFMAX(rcc->buffer_index * @@ -213,8 +215,8 @@ static double modify_qscale(MPVMainEncContext *m, RateControlEntry *rce, } ff_dlog(s, "q:%f max:%f min:%f size:%f index:%f agr:%f\n", q, max_rate, min_rate, buffer_size, rcc->buffer_index, - s->rc_buffer_aggressivity); - if (s->rc_qsquish == 0.0 || qmin == qmax) { + m->rc_buffer_aggressivity); + if (m->rc_qsquish == 0.0 || qmin == qmax) { if (q < qmin) q = qmin; else if (q > qmax) @@ -275,7 +277,7 @@ static double get_qscale(MPVMainEncContext *m, RateControlEntry *rce, bits = av_expr_eval(rcc->rc_eq_eval, const_values, rce); if (isnan(bits)) { - av_log(s->avctx, AV_LOG_ERROR, "Error evaluating rc_eq \"%s\"\n", s->rc_eq); + av_log(s->avctx, AV_LOG_ERROR, "Error evaluating rc_eq \"%s\"\n", m->rc_eq); return -1; } @@ -522,11 +524,11 @@ av_cold int ff_rate_control_init(MPVMainEncContext *m) } res = av_expr_parse(&rcc->rc_eq_eval, - s->rc_eq ? s->rc_eq : "tex^qComp", + m->rc_eq ? m->rc_eq : "tex^qComp", const_names, func1_names, func1, NULL, NULL, 0, s->avctx); if (res < 0) { - av_log(s->avctx, AV_LOG_ERROR, "Error parsing rc_eq \"%s\"\n", s->rc_eq); + av_log(s->avctx, AV_LOG_ERROR, "Error parsing rc_eq \"%s\"\n", m->rc_eq); return res; } @@ -627,9 +629,9 @@ av_cold int ff_rate_control_init(MPVMainEncContext *m) return -1; } /* init stuff with the user specified complexity */ - if (s->rc_initial_cplx) { + if (m->rc_initial_cplx) { for (i = 0; i < 60 * 30; i++) { - double bits = s->rc_initial_cplx * (i / 10000.0 + 1.0) * s->mb_num; + double bits = m->rc_initial_cplx * (i / 10000.0 + 1.0) * s->mb_num; RateControlEntry rce; if (i % ((m->gop_size + 3) / 4) == 0) @@ -753,7 +755,7 @@ static void adaptive_quantization(MPVMainEncContext *m, double q) const float temp_cplx_masking = s->avctx->temporal_cplx_masking; const float spatial_cplx_masking = s->avctx->spatial_cplx_masking; const float p_masking = s->avctx->p_masking; - const float border_masking = s->border_masking; + const float border_masking = m->border_masking; float bits_sum = 0.0; float cplx_sum = 0.0; float *cplx_tab = s->cplx_tab; @@ -895,7 +897,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *m, int dry_run) Picture * const pic = &s->current_picture; emms_c(); - get_qminmax(&qmin, &qmax, s, pict_type); + get_qminmax(&qmin, &qmax, m, pict_type); fps = get_fps(s->avctx); /* update predictors */ diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index 6ff0491a77..ce5baa754f 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -75,8 +75,8 @@ static av_cold int encode_init(AVCodecContext *avctx) mpv->avctx = avctx; mpv->bit_rate= avctx->bit_rate; - mpv->lmin = avctx->mb_lmin; - mpv->lmax = avctx->mb_lmax; + s->m.lmin = avctx->mb_lmin; + s->m.lmax = avctx->mb_lmax; mpv->mb_num = (avctx->width * avctx->height + 255) / 256; // For ratecontrol mpv->me.temp = @@ -1907,7 +1907,7 @@ static const AVOption options[] = { "defined in the section 'Expression Evaluation', the following functions are available: " "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", - OFFSET(m.common.rc_eq), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE }, + OFFSET(m.rc_eq), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE }, { NULL }, }; From patchwork Sun Jan 30 06:27: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: 33935 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1772075iov; Sat, 29 Jan 2022 22:33:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJxx9KfUA5JHYzvXC1FcJJ7l00D0sde6BNomg+RL8Au3N9Gycxk3oA8ttSqTvNpe8VC7TOaN X-Received: by 2002:a05:6402:387:: with SMTP id o7mr15133902edv.253.1643524425420; Sat, 29 Jan 2022 22:33:45 -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 qf17si5882554ejc.159.2022.01.29.22.33.45; Sat, 29 Jan 2022 22:33:45 -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=aqZw5sn+; 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 4844868B300; Sun, 30 Jan 2022 08:29:22 +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 F34E568B2E2 for ; Sun, 30 Jan 2022 08:29:19 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=of3DGbA0/j2NxgOufzz+OYG5xU3p1OAHsQuay6l+7EzUnIR0airIvBFROByDP9yGdOo/5jiObsfjWiSWUKeME7XE+niwm8KL8usEvob2X67M3vK453Mqq0KC1J3YACdWe8THucpB7htq/CENHrJ1YiXVxWAQKeA/KcbfybACYyi8GJiEEZxuwR6PRltOPVgNJ9CyJpx0v1nBYJ126mJlafiZl9mQcN3QpzqWuNV8CQ+VUFj+GzKlLZHNTOhEmzcVU54VUxS4Fsea4O7xomvY/HNei8exz8ZHw/qJxEijMPDWeyv3Nl+PY5jHTk6TtVyvuev5RTKJRZP0teYuieGVVA== 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=sZpQzrKKGEhPWVOrnNujLu+NmExGa1j3W5trSQ9Aw78=; b=G4QZmo0JIyFyrHLvDMitDbn6ymSve54iyUqhLmPLPpEZMBiVxkDqO7Lyd/OSeG94+v9zJQhoXfvmFDxAXIdjRQ58rUmmw0bg7IKAKUJSY/W/D6/NWRpLOn91mx7G27O/1nUqE8P6EkSGfvuCRLF4dkxqb8FVFj3QKklJhgByKx0e3QZEUlp08nqkuyNM88LMkLsYW1//0NiAMLQ+jJON8MKa4SDZ9xzlzkSdWrmbHuGgjx7om4+C4nFovfIIVOa/7pPmFozEgjzFlNhfRmN87X9Qg0pBqaMhKQvIckoW0LJnqRDIHotnuQ+mDf/h4FrsnurcTp0cxJi3IzBsVTAeDw== 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=sZpQzrKKGEhPWVOrnNujLu+NmExGa1j3W5trSQ9Aw78=; b=aqZw5sn+xDcq8wVQimH3BOt0p91zwXHl1pnm6l2VlWmZyYwcTSe90mc21ZFSdpMBccqMAQQ4NLLs6WOWklpDWKZHvzffYbxBoJTFQH7kQIhmIy+wJFvSpM1UN9UXlytxI4dvY9RgOI1TdnViUyIc6tSk0elV5aRMoFQcjfS+634DQ/YylS+Z0SUR50J+moM0EDbnOc+8meeUPiV/P6XZj8MWenYJ0SV0fYRGnpFJpnkWC3ZOY2FrdgzicOMs7eCe2zBV9KHHLuZe/sSTRQiKwy1rjRqirCx1oqLj6kbUVMbsPz1KZHT0Q9JyEAqTU4erJ7litn85hoOD8ZnNaRsihA== 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:15 +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:15 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:43 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [IRy6b8tX+m9oNYiTt+i5Pc7BdeYmW47z] 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-34-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5aaa006e-43ea-4ade-13ba-08d9e3b9d650 X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4BAiz7v1XD6Y3J8dTjRaLiQpcwuJzDUEmYKcHKmo09wk0RJAaikmvhSErmM4yh+Zb6bcYA9mimov9mTwxggPVtjOE0oGA61bZnocBjQh14IvlbenElhQKKZN67pSsBgboA5y8nmPswK5JACqwx3ArtMcQyFQCdlM0inQB2Pd+VT3dZkMDbyIlpUJ9K1O0TneE/uwkm6uQYcNMtKMNYxMxrrwCKdCWIAeMa9VOC6Bz67j0fAq9lXVFPtuZfkOP55XjzEmcAUfwoYhjvzaikTbg38uP2qjUPWwhqHtPCG7Tkyh/IoDjWHiHElWt48JB0FxZpZUp6GB0CdUf86OEztdVTjSEFjNBwyhoBmU/9+qjWNE/TsTE6yZfR361O0CMtvLxkjO0+zjb3Cyz9JNU4J2HyeJp6jDqupkW+L0ofV+K6uJLM/1Ga2BiXxNtJQulz1ltl7Yyx5KVrJ7dj65DvbJYaIE++6XDj77+Vl+65Ae1+weki8FyKb0BWpwaB+R3iwVXBQEZVeRKsyO5j22bCfMX2azwR0M7vqZ2xRENnrL6Rfi1k8fY1PGRcbBnN77Vhxx X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: JG1Qhn84jqdpqNOGOeXQ1M1xuVF/Lj4i0Zf2XDywjB9BfM0mVhgKat3dSDtqp9+3bujzVvnd+zQg+84RyHMKk1w2OjepPymwVYztByAqjBxN07jevGKwom4awsA0vkPll3AZOMT+LHpnzXGI/3ElzwNyFKdHEbhVbTHTEGQkuZpNTIBmIltYH2yVGPajkmZjWMg+kqjleN8e+4zM4/pY7eRsyprbXytO1aZe3MdRKOLVT6fq9CA61f5xLAyw+YZ/qegrFOHskvfNYXn/zE0VaQvbqjn4SboVvghA+KA/E4dEE6VTTa2NQARuazeFi7OhXyo77S9fTKlbIfMzfV/2roxyXxPy8B85Gd2CVlAT3/9Vmp7dMYP+jzmCuUMVla3ChGVI/ifAts18Wa7d5Ucjmpo0A/YwFNc3UofRUPpKd0mvQ0Qk9W0rdQYVjQH4CsGjf/DordInsoN6eJpy6NUU44Q3Vw1GIl9OJPq3BltwkeEEqBCJ9SeVUcbzS6e3nVC7HjivL5J7aoHQZ54QK40B5bC2GA/NN68YxQ6TjZ62UwjYzNZwk2BzECluKIakLiZe/imd4251mS1wQw1U6ZLewQ49lBkiphMutvBgKxX0Cdhp+StlA9dhKO4dnZriRJRZTaY6ckKKyv/5rVD9XPL/11QtDosL4Y3bEuBBL77sBk+UM72i/SUt6A6xLrWXHUjfNcSeZ4LkpEZRe70zIVHlRRom6IGI+RqFgexSd7wB92SKodiR0/l+f7l/8PdgJnbh0NJyUvBPmuZdb4PJTfpNBuaBHnP2iW5Xs1hmGxBJXyDWDmVnWa9YXIenqLkQhRqFWnIOWO8qJg9vnvXNBT7JKv5YpB3IfqQ4bFU2tU7wwhr/mbn6sM94RyN1bDSGiIBmEt7NvJ7dkLkPNupb35K5RnjPQPpBAjJVC8QW5F7xqvXbCJlbdKpEvMz3AGzORK0XYmwRPPq7T/BnG5sKMA692A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5aaa006e-43ea-4ade-13ba-08d9e3b9d650 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:15.4444 (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 35/41] avcodec/mpegvideo: Allocate encoder-only tables in mpegvideo_enc.c 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: GrsVKXbb4ZTE This commit moves the encoder-only allocations of the tables owned solely by the main encoder context to mpegvideo_enc.c. This avoids checks in mpegvideo.c for whether we are dealing with an encoder; it also improves modularity (if encoders are disabled, this code will no longer be included in the binary). And it also avoids having to reset these pointers at the beginning of ff_mpv_common_init() (in case the dst context is uninitialized, ff_mpeg_update_thread_context() simply copies the src context into dst which therefore may contain pointers not owned by it, but this does not happen for encoders at all). Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.c | 118 +++---------------------------------- libavcodec/mpegvideo_enc.c | 68 ++++++++++++++++++++- 2 files changed, 74 insertions(+), 112 deletions(-) diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 500f8af19d..9836000ad9 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -557,61 +557,13 @@ int ff_mpv_init_context_frame(MPVContext *s) s->mb_index2xy[s->mb_height * s->mb_width] = (s->mb_height - 1) * s->mb_stride + s->mb_width; // FIXME really needed? - if (s->encoding) { - /* Allocate MV tables */ - 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)) - 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; - - /* Allocate MB type table */ - 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)) - return AVERROR(ENOMEM); - -#define ALLOCZ_ARRAYS(p, mult, numb) ((p) = av_calloc(numb, mult * sizeof(*(p)))) - if (s->codec_id == AV_CODEC_ID_MPEG4 || - (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)) || - !(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); - - s->p_field_select_table[1] = s->p_field_select_table[0] + 2 * mv_table_size; - tmp1 += s->mb_stride + 1; - - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 2; j++) { - for (int k = 0; k < 2; k++) { - s->b_field_mv_table[i][j][k] = tmp1; - tmp1 += mv_table_size; - } - s->b_field_select_table[i][j] = tmp2; - tmp2 += 2 * mv_table_size; - } - } - } - } - if (s->codec_id == AV_CODEC_ID_MPEG4 || (s->avctx->flags & AV_CODEC_FLAG_INTERLACED_ME)) { - int16_t (*tmp)[2]; /* interlaced direct mode decoding tables */ - if (!(tmp = ALLOCZ_ARRAYS(s->p_field_mv_table_base, 4, mv_table_size))) + int16_t (*tmp)[2] = av_calloc(mv_table_size, 4 * sizeof(*tmp)); + if (!tmp) return AVERROR(ENOMEM); + s->p_field_mv_table_base = tmp; tmp += s->mb_stride + 1; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { @@ -654,8 +606,6 @@ int ff_mpv_init_context_frame(MPVContext *s) static void clear_context(MPVMainContext *s) { - int i, j, k; - memset(&s->next_picture, 0, sizeof(s->next_picture)); memset(&s->last_picture, 0, sizeof(s->last_picture)); memset(&s->current_picture, 0, sizeof(s->current_picture)); @@ -684,31 +634,10 @@ static void clear_context(MPVMainContext *s) s->bitstream_buffer = NULL; s->allocated_bitstream_buffer_size = 0; s->picture = NULL; - s->mb_type = NULL; - s->p_mv_table_base = NULL; - s->b_forw_mv_table_base = NULL; - s->b_back_mv_table_base = NULL; - s->b_bidir_forw_mv_table_base = NULL; - s->b_bidir_back_mv_table_base = NULL; - s->b_direct_mv_table_base = NULL; - s->p_mv_table = NULL; - s->b_forw_mv_table = NULL; - s->b_back_mv_table = NULL; - s->b_bidir_forw_mv_table = NULL; - s->b_bidir_back_mv_table = NULL; - s->b_direct_mv_table = NULL; - s->b_field_mv_table_base = NULL; s->p_field_mv_table_base = NULL; - for (i = 0; i < 2; i++) { - for (j = 0; j < 2; j++) { - for (k = 0; k < 2; k++) { - s->b_field_mv_table[i][j][k] = NULL; - } - s->b_field_select_table[i][j] = NULL; + for (int i = 0; i < 2; i++) + for (int j = 0; j < 2; j++) s->p_field_mv_table[i][j] = NULL; - } - s->p_field_select_table[i] = NULL; - } s->dc_val_base = NULL; s->coded_block_base = NULL; @@ -721,10 +650,6 @@ static void clear_context(MPVMainContext *s) s->er.error_status_table = NULL; s->er.er_temp_buffer = NULL; s->mb_index2xy = NULL; - s->lambda_table = NULL; - - s->cplx_tab = NULL; - s->bits_tab = NULL; } /** @@ -820,37 +745,12 @@ av_cold int ff_mpv_common_init(MPVMainContext *s) void ff_mpv_free_context_frame(MPVMainContext *s) { - int i, j, k; - free_duplicate_contexts(s); - av_freep(&s->mb_type); - 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); - s->p_mv_table = NULL; - s->b_forw_mv_table = NULL; - s->b_back_mv_table = NULL; - s->b_bidir_forw_mv_table = NULL; - s->b_bidir_back_mv_table = NULL; - s->b_direct_mv_table = NULL; - av_freep(&s->b_field_mv_table_base); - av_freep(&s->b_field_select_table[0][0]); av_freep(&s->p_field_mv_table_base); - av_freep(&s->p_field_select_table[0]); - for (i = 0; i < 2; i++) { - for (j = 0; j < 2; j++) { - for (k = 0; k < 2; k++) { - s->b_field_mv_table[i][j][k] = NULL; - } - s->b_field_select_table[i][j] = NULL; + for (int i = 0; i < 2; i++) + for (int j = 0; j < 2; j++) s->p_field_mv_table[i][j] = NULL; - } - s->p_field_select_table[i] = NULL; - } av_freep(&s->dc_val_base); av_freep(&s->coded_block_base); @@ -863,10 +763,6 @@ void ff_mpv_free_context_frame(MPVMainContext *s) av_freep(&s->er.error_status_table); av_freep(&s->er.er_temp_buffer); av_freep(&s->mb_index2xy); - av_freep(&s->lambda_table); - - av_freep(&s->cplx_tab); - av_freep(&s->bits_tab); s->linesize = s->uvlinesize = 0; } diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index fd82681869..0204b4dacd 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -317,7 +317,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) MPVMainEncContext *const m = avctx->priv_data; MPVMainContext *const s = &m->common; AVCPBProperties *cpb_props; - int i, ret; + int i, ret, mv_table_size, mb_array_size; mpv_encode_defaults(m); @@ -818,6 +818,56 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) ff_pixblockdsp_init(&s->pdsp, avctx); ff_qpeldsp_init(&s->qdsp); + /* 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)) + 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; + + /* 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)) + return AVERROR(ENOMEM); + +#define ALLOCZ_ARRAYS(p, mult, numb) ((p) = av_calloc(numb, mult * sizeof(*(p)))) + if (s->codec_id == AV_CODEC_ID_MPEG4 || + (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)) || + !(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); + + s->p_field_select_table[1] = s->p_field_select_table[0] + 2 * mv_table_size; + tmp1 += s->mb_stride + 1; + + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + for (int k = 0; k < 2; k++) { + s->b_field_mv_table[i][j][k] = tmp1; + tmp1 += mv_table_size; + } + s->b_field_select_table[i][j] = tmp2; + tmp2 += 2 * mv_table_size; + } + } + } + if (!(avctx->stats_out = av_mallocz(256)) || !FF_ALLOCZ_TYPED_ARRAY(s->q_intra_matrix, 32) || !FF_ALLOCZ_TYPED_ARRAY(s->q_chroma_intra_matrix, 32) || @@ -943,6 +993,22 @@ 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(&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); + 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); s->q_chroma_intra_matrix= NULL; 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; From patchwork Sun Jan 30 06:27:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33937 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1772181iov; Sat, 29 Jan 2022 22:34:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJzj2h1ikL9k/kG0ghvfTke1fmRuurmLcYCXdGxhbMfFPrbyrARNIaqGH9CCFyaq8AXbKxI3 X-Received: by 2002:a17:907:234f:: with SMTP id we15mr7703705ejb.235.1643524443821; Sat, 29 Jan 2022 22:34:03 -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 p5si5629066edq.250.2022.01.29.22.34.03; Sat, 29 Jan 2022 22:34:03 -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=UaOQxfxV; 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 E5A7F68B30F; 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 5220368B2EC 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=fYVXebbWqgUvoh9C8XOb/X/pp8o98DecPG8RWd1v0Gweel8zeRRH/8jJbr1+Sq4aK63kYVnxzqgvpiz5NxLT/BLLkPSKa8u/WQgE/pDM4FDXX1LpTYkwXZGHephKw1E0v+BBo2gtuvLEP5dI8pWAYb5E9WuvH8tmDwFlufrjYaFzrzrtMDDof2WnOJezr8v177rF9+70CC1r2JnXkkYM/xINtR5TpgdyHcR7FvxtMiATJJHwZ6e0TeZOjKg1iFAgqcwV1h1HP6VIc3uJIQPeS+6zbwMTYr36YtAOkrJyt7P+yyOWLANKG3XaVxw72dt453zHeRI+Lad4flaOBQNkaQ== 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=JM7wgpCJi4YBZNSneq90SiN5B2As+pkZfrtQPS2f4ds=; b=fcCHQMeaVDNXzvmVPGWa/ChbigGkGyn7QOzTpAjlwUb0B1UrYuYn9ZqKc71gYLozn67RQi0gQ4LoL6q5Ek3S2kjlNPVkvrA6qzUagjstCQAYHbMghUC58i4BHdIrWNPaVSf0exIuwSYebxxG98UJX6M6cXMfZuhmX7SwRFkYBgzbiYfLyrQueJDYzH+VJgX/3d8jQ0LEITCrngZj+ZMeWhf7OC4rDMyDU0fmcUff7ziDwlRBaMxKmXoqqO43XAlTEk5ixd+kfIy9EJcCCOAFgA3LzfyKcyspKEHTejMLtII3+uP1Xk9D+RTyrKM8Zrx+djkCt3A0cqEP4wFVgDq0wg== 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=JM7wgpCJi4YBZNSneq90SiN5B2As+pkZfrtQPS2f4ds=; b=UaOQxfxVL2rH26aiuLWVPyn9VDfqLa2+jJMZ9HCuWpR+opp8Hl5Rdoeyx+ebmai9RNmQA++DLKlA5RfpCjZ4MjhvFEJu19Cp3uGQeeGWiu8OWq0rX8USmIR7X/D9wIFQp4XTLr/Iop/9RCQ/EAJBsWCyekS9/dpWOHZ0QsDmDY/CMh4UoifZwtFhHas1jedwSGVsfLNQLFU9EGYGrshS3i1Sws0n7XgBd0m4PTp2KJEziWYYLrBLPYic6PjndjoQoTNIsPc+ZJpnfOK0kucWfcCz6niA0VU5Brmg4fzbeDDCiDEzApM763lTsttG0F+KAHUUZ26cj3Jv8TPfIAgn7Q== 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:18 +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:18 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:45 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [NFq+clwC+FQZFg9JtykIBSeGMIHcxNbq] 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-36-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f96cdb8a-cb41-4327-e514-08d9e3b9d7fc X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CNWcRhOnR+5onVr+jALNND6/lGx/xBGOto71yolEgXS/vU3z4/6R/fNl6sxd9c0fa606U32K2tMmearKNvT05Eb/MOY8q5EJy+Spb3rX9npXtr6NaobvuUKJgLgoWQ5ajMbcCrd0tzDBpxjgDTo3C2QrhGwVYRZ9rWA9Zx0FDV3t8oe0pOiYpVQz3nyPicDc4LZ/xdGEEW8MchuYppxvjXSwPhLK/0Irr7RJ3gs1G6QbCQd38oEAjXr/cHePH4hfe67mA3QZA8xD3qd0dHiSD0CtIkCrFr5bjq+NmddLaLehPlNz9dcMPzn1Fh3C+sqWbVxaY/sjQs637VSBnSH1j1lDdN9RZF2jsQ7SRMTwkHSTSd+M0Za6f17XRqrG/g5qxp9GKWN+HpszQVsQ6qfzI1/1uO9WV/rv9SbkpWaC1cxG0SG+9IDNqwu2l3LvX1QWBR3lW++J6N+txOpm9rEHEzKHJQKPhQnb/kPh9IR77AU+pFhhpxuvkl+FsSBpAM/5ZcpODthtORhJd17rG//eZGz3QvmgDI/fRSEW5g+BIA+FwctVbEj27ZbSMteo5sh5 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lA+JAMa/szPnN/k2hxH5tW/zsLlKbqP1Df3P/4VzR6NCLKDXBvasLE7WkZuSa0kphfZvOqs3o9eqJEspRXnuH/S98F1PGVaswKDXaKoecgYlg82whpvKdRv2R+AqWty6J/g3+5wfuJEHXH3Rnpy8RaRi+Mfor/T/hvG3wTGqToU1LXf9AigDXxWKodpvNgRMvnOpFLWUjjjndFmPKfpp7fwSl+IuofC4aD9neMHefEJgIzUR484OujZkR905oYygLnBvsMuN7NqJ9eg9StkoOy9eNJGD7cxKiEdqPcDRFZkW4qyMObzqPcMQYYra94EwJ2iccsPjfx8QIh2USViXAVC5wYKLGGb9wh5/BTkmP2OVZ0j2o7nPjcVeoqcBcpP4JLB5/j+G9UuB8l72ixSVWzR/4ZMNOVYO2NxXxJoXZHQVjLPOccjiO5JUs59siWLi8KpPiw0aVi/sAitxCohqevyPajhJ5xVNrLO4MrgTbns/Qg1eAiMAtIpQjB7livnwNAyrklP3E9C3CXudKJIqeKxIEyDeo7tZcz0uWUjsnCR7I45I/JvcrNaPrDmRQjxLXOMhuP/qGqkgZuMyOVn3AuyO9Q94M7VafrCnNuHmP+IMGD3WbjsvPTw2jmV5S/zbFjh7L8k3aIC9PTUPFSpcxjK31OOCdojk/3667GpwwhaLE8CbNEfMTylV4NtY3zOuEKEYGWLzw2KjG3Ym2sCPSUz2bqEDmAXYJi4k4FcCPSOeqJv9Ij8FNr61/29GsSEsPXAXsRRj+JlLqxwG/XQuRKgsqrbZ4Zb0MtHgrIdGcUJp1Wup59r4CohcCBxiZ784e3CKHZqoRfFP8AEEIo2LTBJbl6XabJQ6Yy4DBYZtnCaTp8OUZc3N5aw8L07tXXWEDaUXibKt88l53Adn9WACuLcxDQoY3z9tWXUGlaUMANiaEiK8WASsUL090MZMgEiHt5/19vQrpcsVubp6SAxnKg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f96cdb8a-cb41-4327-e514-08d9e3b9d7fc 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:18.2547 (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 37/41] avcodec/mpegvideo_enc: Initialize non-JPEG q-matrices only once 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: PSi0b8H70Zt9 Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_enc.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 892115b68f..7b55e9c17d 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -945,6 +945,10 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) ff_convert_matrix(s, s->q_inter_matrix, s->q_inter_matrix16, s->inter_matrix, s->inter_quant_bias, avctx->qmin, 31, 0); + av_freep(&s->q_chroma_intra_matrix); + av_freep(&s->q_chroma_intra_matrix16); + s->q_chroma_intra_matrix = s->q_intra_matrix; + s->q_chroma_intra_matrix16 = s->q_intra_matrix16; } if ((ret = ff_rate_control_init(m)) < 0) @@ -3597,13 +3601,6 @@ static int encode_picture(MPVMainEncContext *m, int picture_number) update_qscale(s); } - if (s->out_format != FMT_MJPEG) { - 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); - s->q_chroma_intra_matrix = s->q_intra_matrix; - s->q_chroma_intra_matrix16 = s->q_intra_matrix16; - } - s->mb_intra=0; //for the rate distortion & bit compare functions for(i=1; ithread_context[i], s); From patchwork Sun Jan 30 06:27:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33938 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1772238iov; Sat, 29 Jan 2022 22:34:12 -0800 (PST) X-Google-Smtp-Source: ABdhPJwSQDRJM6pNqa3RIe2+tR2F0aplTo7B+MRoBwNiwLFCSQ87/Ksb4MsVeH1RvKzEYrdjN6i/ X-Received: by 2002:a17:907:7b87:: with SMTP id ne7mr12909110ejc.556.1643524452708; Sat, 29 Jan 2022 22:34: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 hc17si5992270ejc.901.2022.01.29.22.34.12; Sat, 29 Jan 2022 22:34: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=fQcBFX8S; 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 C265168B2FC; Sun, 30 Jan 2022 08:29:24 +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 72F0168B2E2 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=Dk7XSestRmbkpWh55yYdGDl5p7d27k7yx0OF+aApicX58Th/kLSUOG+46dLGmEgCaqtofvmAfdfWfIH+pra8s4/o0up5AEQ0cG9WnP180vJVWp6FCBzFYbkPvHaEl5Ik8nco/OfFd1IGUQigPHeTjkpKd0S4B06bUgh9txx7//vi1jkOpuNW9TqhgQ2Isuo+9fgnsuWKgIqKveZ9UnTHNAxq7dw4IMeSWraz0vEDl2xokSfZe0wV/gnviR3U3gAgDNKCnUucceRkiMTbS9Y4ygQSfvq2QMHDlCMM7RieEiBp9TFb9//ax/uR83DRdQ2nhcZIHTCWxb3W+5JlTlEkpQ== 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=+7jEH1MDVCpEsTxi1Zsfk/nqzS6nu46LI02JNn8G8Vk=; b=K0N0l7mIV+YBr38/+u/uqde38aptC2cMMlayBrpUePjUN6faST1vgpJoCJthZNJTc60RJutjR66Nbz0nqiyYQUMXpTZOC+6dniTf2N52hV03oOqFwqy2XcswcEAkO5zmvCC8NERdN4iKMhjjXKh4UOOH+BmBgJFBimmPoIKRA3LrumFXnn0M9odSiHpO2NqiUlKx1dcVSrc5arTBv72EDDxhCtjFNPB/T4WOjyjTdocId7TE3NxHg0DnTsV+SWZmK1nqJwDJ++E9ZBLYswnMgku727fIpxpt8cYjDyfIimE1dOJ+wUkpNPb8VidV8nIwv2lzjT7muPKiLH2LsCDbhQ== 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=+7jEH1MDVCpEsTxi1Zsfk/nqzS6nu46LI02JNn8G8Vk=; b=fQcBFX8SpDRvog8+t/uO4PLXm0WKJGUX5ABOqPXQ4kIAniGPBeXuYPd2xerwXjcgGfDHVFUIXL9GYlTqrOwZUl9g8mN1v7v9J598vtXhU7tphWXcSthuzshdQxgl6ot+CntfKlbE3UTVnrDHwO5A7ljay/E+7VoVpXdlvSgWpktTilOCvPo7q0Qd8MAIknzxJIpC1ZgqM0cFSOEe90Jk61TYfbslFrKjCPYh8hEs+NoXAaTPWiPjBl0pGzo0vp4DUIgmN6MCaz7LFCcxtusZB9LBpV+aPXk+MJd9bk9eiLoP5XgOjVbTMyGlqX/VsJGY0zMKVWGQZPgZ8DlQbMT58A== 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:19 +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:19 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:46 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [qULY2bxnLSdNf6TWw/s4B1TITp3GUGkv] 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-37-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 606d7b74-f3e0-4792-112a-08d9e3b9d8a8 X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cmoxUbEsIlOuQR5Gfp63Wl9vGXDrGru5KrYvOq2Un4Qdd/VodjS8n6cTeSifNK2ri5sftXeblPnBzHM4+zW+/JT0zjzqcoTWgJEVw6zrljeGGNE4KcCY5DTaxaJiDL5htTyh9OnjrVLz+tDPSfhxp9tiNCkysDi5U+5klmKpgJKnxCD1m0dXssCEEZ1rwYdjAOBFVY6EdkwgbiL+h14CwJkgKaX4qdOMo4gO3IS6CVObvt69a8pJ7dTHXDuIn1+NazADzl38HjF+KPSo+Q82bWChkp4sO/Yq7XgZ2dFJfXguASAkJn+mC+Ldis4UjFvRy2+wA5Js8bKpHX3I3+DHRlPEOp5inZN//FSmQnktiUjGgVP3vJMbETkeSuZtn9RZ6Nq3knkBoS/N0sltkM4iTT4eJ5INoKoAN6+bgSG7ubzovouYkAZPPQNhSjiTDs+w+0GzWRziDthisdc9LRmAtrrNn+nvC1tmxbmJCzU9A4u/o0ZNHIKmyQumiIFz//xSN66HIq89cmLgVUimPfw+zjSqgkmdqF3q5TgF6FM8Xh0= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: FzACxBuc+/TJxiOHEjttCEv+tbeW+CE4uSdCtBhvdnO4dhsM6MW2k6tgX0W+H2UfKoZ+oGuJ7NxEkp/P+RPcq4nOfYQwlRx6MgbaQesjIsGrcqAzLc3PIn743+9Y9SotXqb5L1zsEUyLQKuI0c1xddxVauBiPsCbC75C29VIF+fVt/jIBAku0S8P8sMXYcefrbTQJVH22GnJlcmKooVSYkm5B6bThRripbAp30IPygzChEsw0fAcQHs8sjhn8onMTKY5frVtPxIEdYPXc3frOtCK00o4biCSWcR+UNIHEzaa66k6i5rVzVQHBhoVSovVaKVQ3dA4vAzYMT4IWmqAhkqpV0g6h1afBzE9NrTb/auonCsiFC+SzRCXjpwBYV9uq9EQF4/kDn8tyl/J+S3qSGhfojcDHca2PGeVjNjYX7UMhGyuS9v8aPhu8FfL5QQpkE41dmKd5v0S6kNgzgF7PWk95mhjHD/msZIxdL0EseTyb/+oy36wbARORtzrmQK6wzPo3+NP2OZqUkBVASS6KCpxoKHlNTVdyb7MUJCxsqn4CsgikfR2pS4KuxYQVUa0CwnHqBu2dDJlDpIO82gxusvYnkXMwg/uniJzIo5M1WzWCxiuGB2sYMHDJby+W7oW9uCEKCbYZ0Pl+BkxyvL5Wmzu5h8UvmrBapvbMWrB4m3fJ/IO9LwmeGW6RDufTv0UYi0K1QlmVhlCe4A1nKJMY/FPkfzu39RYbNN2xdy5s7NAtYQuCtPQRJMhkjSJk1xqZ9lpyQhP32tBknvpffbmPO5UkzgB37A1fpwEaD7UJdu6eCeqELu9HA9ITKu1IWC9JF4b3aX3UDPykMJ7uiBvPiZgZYqwNflpZeOX+XzK5tVG86aSc1nINsWX6tQen+n9GHKUgre1+G/ElhmgBwHsFWlJ5FPoWgIootXAWm10MIG2o2uj0Df7KZB+YoD3gvRxzhxY8WIFbkDBznqyFF7OIQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 606d7b74-f3e0-4792-112a-08d9e3b9d8a8 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:19.3764 (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 38/41] avcodec/mpegvideo_enc: Avoid allocations for q_int(er|ra)_matrix tables 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: U4CaFvGZ+vW1 Do this by making them part of an MPVMainEncContext; the MPVEncContexts still retain their pointers to access them. (These tables are quite big, so that putting them in the MpegEncContext would have been very wasteful for all the decoders using said structure. But this is no longer a problem: MPVMainEncContext is only used by encoders and allows to directly share the tables when slice-threading is in use.) Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_enc.c | 24 ++++++++---------------- libavcodec/mpegvideoenc.h | 7 +++++++ 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 7b55e9c17d..01ed41a2e7 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -869,12 +869,6 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) } if (!(avctx->stats_out = av_mallocz(256)) || - !FF_ALLOCZ_TYPED_ARRAY(s->q_intra_matrix, 32) || - !FF_ALLOCZ_TYPED_ARRAY(s->q_chroma_intra_matrix, 32) || - !FF_ALLOCZ_TYPED_ARRAY(s->q_inter_matrix, 32) || - !FF_ALLOCZ_TYPED_ARRAY(s->q_intra_matrix16, 32) || - !FF_ALLOCZ_TYPED_ARRAY(s->q_chroma_intra_matrix16, 32) || - !FF_ALLOCZ_TYPED_ARRAY(s->q_inter_matrix16, 32) || !FF_ALLOCZ_TYPED_ARRAY(s->reordered_input_picture, MAX_PICTURE_COUNT)) return AVERROR(ENOMEM); @@ -936,6 +930,11 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) s->inter_matrix[j] = avctx->inter_matrix[i]; } + s->q_inter_matrix = m->q_inter_matrix; + s->q_intra_matrix = m->q_intra_matrix; + s->q_inter_matrix16 = m->q_inter_matrix16; + s->q_intra_matrix16 = m->q_intra_matrix16; + /* precompute matrix */ /* for mjpeg, we do include qscale in the matrix */ if (s->out_format != FMT_MJPEG) { @@ -945,10 +944,11 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) ff_convert_matrix(s, s->q_inter_matrix, s->q_inter_matrix16, s->inter_matrix, s->inter_quant_bias, avctx->qmin, 31, 0); - av_freep(&s->q_chroma_intra_matrix); - av_freep(&s->q_chroma_intra_matrix16); s->q_chroma_intra_matrix = s->q_intra_matrix; s->q_chroma_intra_matrix16 = s->q_intra_matrix16; + } else { + s->q_chroma_intra_matrix = m->q_chroma_intra_matrix; + s->q_chroma_intra_matrix16 = m->q_chroma_intra_matrix16; } if ((ret = ff_rate_control_init(m)) < 0) @@ -1013,14 +1013,6 @@ av_cold int ff_mpv_encode_end(AVCodecContext *avctx) 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); - s->q_chroma_intra_matrix= NULL; - s->q_chroma_intra_matrix16= NULL; - av_freep(&s->q_intra_matrix); - av_freep(&s->q_inter_matrix); - av_freep(&s->q_intra_matrix16); - av_freep(&s->q_inter_matrix16); av_freep(&s->reordered_input_picture); av_freep(&s->dct_offset); diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 23381a31ca..bc69c6ea53 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -98,6 +98,13 @@ typedef struct MPVMainEncContext { 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]; + + int q_inter_matrix[32][64]; + int q_intra_matrix[32][64]; + int q_chroma_intra_matrix[32][64]; + uint16_t q_inter_matrix16[32][2][64]; + uint16_t q_intra_matrix16[32][2][64]; + uint16_t q_chroma_intra_matrix16[32][2][64]; } MPVMainEncContext; /* mpegvideo_enc common options */ From patchwork Sun Jan 30 06:27:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33939 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1772295iov; Sat, 29 Jan 2022 22:34:22 -0800 (PST) X-Google-Smtp-Source: ABdhPJwvlq4avBgHOHqLI9+UORFyuns05fuiHfqnaWW83ex/TQScHLGP643dQZm8EgM6hhp9prM4 X-Received: by 2002:a17:906:7948:: with SMTP id l8mr13040060ejo.752.1643524461977; Sat, 29 Jan 2022 22:34:21 -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 qb21si5806360ejc.343.2022.01.29.22.34.21; Sat, 29 Jan 2022 22:34:21 -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=ZYxeE4Pp; 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 A1D9668B2EE; Sun, 30 Jan 2022 08:29:27 +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-am6eur05olkn2034.outbound.protection.outlook.com [40.92.91.34]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E311F68B2FA for ; Sun, 30 Jan 2022 08:29:21 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ATFvPT7J9agqNlkLvy8Tx6LyfDa898N5a7JtuJmsV7/x+wM1nl2pPR7yJW7xla2W5M/DXkNoHQoDdtHTWOhwy770J1NVAoBt8y6oFRLUHALBqphhc/VeObgO/DfH4X85Hwo6zMWgJ4msCtdV7EV9gb2bKEY2aNyHbD7PDmrmvRlsUSRFss2J7D7M1DcvG4gY0LvXvabD7nm4w+mDFroSKISA3y5/VLYN72vqvwt79spPbb1JY+g0PXf4XoUFzA810BW/z1z5G0hI1yFH1tMH7Sm8fSAiUgyfx2koIAfFepvjoezlnN9P2ny1PrmX/dQTpoqH7Oca0nmUhu26GSJHIQ== 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=7LwSGbACJ9Pl6MAS+8SEitFdlRJ1yPa92D/gNHnyQZU=; b=MsQJBAFE0sTpfDtbX843oID1mXSY2iHJE6Nyok5qJnkdAwVl9FbU2jvCGf49qUYc825jiNtuKSRPEYTLkSIjss7C66w3E1O839H6ZRlaOf+pSrEby2LAp+5u29Etzijm6+H+UojAoroc5ETd17UUyXohgfZflA3MeTqiS7EY2lXGBw1H7nePVijiyZgcpsdkg/VaW8gVzuVCe6BsHClc2oZsmQL8LOhpYKyqrm9H3Z/+kOJY66ZWI84esbl3jZgSjtwf4YOsMvWotQu6unM7Ezy3E02HscyNZuAFSzyMHo/+cpqHPHBvh8sS2yV4zZfp08uLIgSLwMZPu2BOr5kstg== 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=7LwSGbACJ9Pl6MAS+8SEitFdlRJ1yPa92D/gNHnyQZU=; b=ZYxeE4PpQQJTVd5bJ0wmiWFaq6peTN3OEFWqCUgyBbLlnXGl3HIupjbTvgEfThrYqd98AUz+JSolz98vG+3GQn08ez8WsE+V7n10c1oAVj62DwA5ZUYs4pJNTlGHN+gflgCps68ynkw+RzSKuw3+/UHtcVrm0fygIeyGeT7fMx6IslC//65iJ81cKMUvO4YQs4roe98HtwPrFWA6bsl2CwN4ZZgtGpogTjo/dPpM6BhgUhdAs7tyHWN9xj+JhpkY5u5cFlV6rQ+JeVEKYrWii8zX/dBU+YczoMFM67dUCnM17VjQl/Fv1XSOXJPf+3zE6LW0ceN5/WP78wP6Q2Qk0A== 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:20 +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:20 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:47 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [wbScbRSmB5rq/ZbIRL2NzsNnlpJ9Q5yO] 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-38-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 73668fea-a79c-4b29-62df-08d9e3b9d964 X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zKKZPvhQnqQVwOE/iCCqmoiu7hvrHdOBmmeJjc8u+P2J2KK3OSo4GxfTipiwlSJuGGgZTSueAaBma4MoV5Kvsm8hOguWBShpo2wzOxBV1caDDYqL+nngKzJMfUnq5eFvhaO+hmcLSz52n4iP6Lh1jmHV0Po7pK31PKD2pbfCIRq3V+AhyEP2Su6zHir5ve1zRXikzQpu3qqDQmU0fvez1RyxnBIQBhp6sqtSwqobRoUf9JjBk/19kb9afndSGLlr08hdBjUGRjW0A6Rm9SFcT4CE7hQHR2xmzkePUXURxc4E9FK4uUurtVjibh6kcB0gVZUgW5uhDDQU4N3mj5NiY8ArX4igNRBgsxXxpMCjfrv3QoFn7xg5iDeVmV80661TqWViYWp2lx/aQz7OsY5Kmv9fxNLRjB1uCUPpG5sebX6PMPe70bDHtZQjUL/RnH4NF7TYL1oRGXWeRclX67l6Jdi8FYnGUbxJnXY8Qc3hrWgHaCqHL8oj1RcEKwm9lqyBOZQYtbGwq/xRasvR8oeqRHjeaMdfUxcdvaIHJEfuHWwktUquywpG2UNlSeIzMIFi X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 0o3T7oXn1MnhqyxXoW4Kjq4pJKgEe5l1AMjgY4bUzHG6kyy4GvOMxawy1oNwb/GHJKBgqCl8Rn//YzLNOnlIQj0YHGHI29AOsexjRs5oahMC8gdYtHoVif5bXhrk4Php5By635JRjRkoi7esCoaadcoLlHGjrLOMnUqegHpeviPDnlURrac0z039GC2w8EP41H7SRCaTFPHxj88WTwcRBY0J3fxRlIvaGFxNpg+ggQLkyJ2pt5HonPI2dT9v0DCLvRvxZvcfW9Fs2L31O6+QCVEEaDZc2sPl92fp1b3Sj20wrQpnyiByFT3PxQOacMFNAbyJWGmSiIZj6t8jT3p1lCHe1Ayci2qtYQCVCdJMFt65jKtMGgmeGVN99bTyOQnxjD017poub8U+oDge9siX0p51ld2LGF6b0mtj/XSx6lMk45TUVhUeFP9JlRsCk+ueIFUfYGFJYkhdMtBKYU6Jr9UtoaBoBFzJbbUXLNAw8nkpkAKl5gFCt/daPaIrRybYlW/PHIJcQo2bvemO06mswhsJ2dA8TWIr66MFZ8qdhIQL53ElPI915uRvBmHTG51fOKb8891yBhQyrKubgGmgTcWrp9dWLxIjcgwh043Y4rnPVYqsWnSDkrzs3YGxA2ZTQIoA1ofGQqMOyeggoqakxydjgqZQoaMVQYb+cKPbsqs+OeGXPKb24BxPAXS2dHOVhqnrXIbvS5TUJaqFzQOhjaeGhfZ84LpSC5MoPxSMRIp7LRsOnDG3JDjnQr4DAtMWCO9jW65IhIanpVzZdQdFVbmwTcvERzwyYvLWFmRFDbTkLZbKYnPUgkBd/0SzIjpj5MBjA7viO0DzR6Xn94Luog3u2/BE3qQroJ9Cpx6bZf++NtAu0rS66me/2lhfxeAuXi8/W94ML6tGI4fQh9fijjqGF8Kr6xTLFXvl/ihC/afZrvGQkAMJSvbS3VRrW295szy9WNWo/T1u5ux+85zyzA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 73668fea-a79c-4b29-62df-08d9e3b9d964 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:20.6106 (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 39/41] avcodec/mpegvideo: Move scenechange_threshold 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: 6N9524mdYCJp Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 1 - libavcodec/mpegvideo_enc.c | 4 ++-- libavcodec/mpegvideoenc.h | 4 +++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 201ca81621..5c7654230a 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -482,7 +482,6 @@ typedef struct MPVContext { int frame_skip_exp; int frame_skip_cmp; - int scenechange_threshold; int noise_reduction; int intra_penalty; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 01ed41a2e7..1a88e4fb93 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -572,7 +572,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) return AVERROR(EINVAL); } - if (s->scenechange_threshold < 1000000000 && + if (m->scenechange_threshold < 1000000000 && (avctx->flags & AV_CODEC_FLAG_CLOSED_GOP)) { av_log(avctx, AV_LOG_ERROR, "closed gop with scene change detection are not supported yet, " @@ -3632,7 +3632,7 @@ static int encode_picture(MPVMainEncContext *m, int picture_number) s->current_picture. mb_var_sum= s->current_picture_ptr-> mb_var_sum= s->me. mb_var_sum_temp; emms_c(); - if (s->me.scene_change_score > s->scenechange_threshold && + if (s->me.scene_change_score > m->scenechange_threshold && s->pict_type == AV_PICTURE_TYPE_P) { s->pict_type= AV_PICTURE_TYPE_I; for(i=0; imb_stride*s->mb_height; i++) diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index bc69c6ea53..662236c102 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -42,6 +42,8 @@ typedef struct MPVMainEncContext { int me_penalty_compensation; int me_pre; ///< prepass for motion estimation + int scenechange_threshold; + int gop_size; int picture_in_gop_number; ///< 0-> first pic in gop, ... @@ -177,7 +179,7 @@ FF_MPV_OPT_CMP_FUNC, \ {"skip_factor", "Frame skip factor", FF_MPV_OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"skip_exp", "Frame skip exponent", FF_MPV_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"skip_cmp", "Frame skip compare function", FF_MPV_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{"sc_threshold", "Scene change threshold", FF_MPV_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"sc_threshold", "Scene change threshold", FF_MPV_MAIN_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"noise_reduction", "Noise reduction", FF_MPV_OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"ps", "RTP payload size in bytes", FF_MPV_OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"mepc", "Motion estimation bitrate penalty compensation (1.0 = 256)", FF_MPV_MAIN_OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ From patchwork Sun Jan 30 06:27:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33940 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1772378iov; Sat, 29 Jan 2022 22:34:31 -0800 (PST) X-Google-Smtp-Source: ABdhPJxvwq9rwhPVYauhecPULoYOpKMkp9Fwt9jO5PKCh59wFW9R+QNikljrRv1GCMeBwZO6E5QQ X-Received: by 2002:a05:6402:278f:: with SMTP id b15mr15889136ede.103.1643524471707; Sat, 29 Jan 2022 22:34:31 -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 qf17si5883307ejc.159.2022.01.29.22.34.31; Sat, 29 Jan 2022 22:34:31 -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=XEbhTaZE; 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 8443868B31B; Sun, 30 Jan 2022 08:29:28 +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-am6eur05olkn2048.outbound.protection.outlook.com [40.92.91.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 14D2468B306 for ; Sun, 30 Jan 2022 08:29:22 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q8ZoPrrs68q/8Pls6Z4ncw6Te6m/pBCHozjJz5bIiEx4hcBXHlzcmuxR8XLE7KsGlqNkpVeoVNfbjJ6TGtauYYgkTS7kYbEVE325NcEMcNPDifX02IJPmas4UdxOS1UXmjKXnu+aGqhP1RJJASqgRwRD3p+AcFbhFeMi5u8E5lrG+63ez5T7RzD8N7e3qNYHtaUf50kg78ktqotgNSj5v9VlU0XbUKvR9uDAKTU8saAk7DxlgimbBG2eHUVt1vyEDp19cbD8NBLnSvjJiVLVIQsVDdMWV+/102Z8b9sHsgWq1TB6W/Xuu/E8A3BHsKS8BD8rEwLDrEi0i0nornfXvg== 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=K1hExUhx7LXMLqRf/sN4PUZdFpNOyQcyRLJDq6GEL40=; b=KrFtK4bM1XZ4rcbKA1IYMG4/zzRcUCVHloDHj6wB32AhdcbZz2kSFTPThwRUk48PNGl0Ci2AFTR1nMBPOAWfYbOlwRrDNHN/AmSm83tbZSYrMjHOsdQfLR86zEwHryZTIDwfk7EqPVhLG4KseZrr5G8huW68n3UHhzIPqtL7RHYtOOd97cNO06JoTxO2aorfH3IDoxKPXY0pDMVztni35Ecaa3wzjHMmZQ2ZL8sr2AuUTMqEGaPTed/cJXrRYvszJgUJ5zJMfmhSxVMNPLnAQam+Mo79s4A3u2CfBmIpg7h/QwziV7UhCPYBtuHk60cyhWwXZaG4xE0NAoLDkwDc/w== 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=K1hExUhx7LXMLqRf/sN4PUZdFpNOyQcyRLJDq6GEL40=; b=XEbhTaZEAj9hVBAgLt/bWih7brWLn53dWZJLs6qGvhqQMnrMX8NyLvAqig0UcHP4nmRW8QwaOIblzKahOIUx2NQqAOXikgfx+3COW6ktcWfL9mm52mSaGcwUJDosSPaXIjMtPHdzlwU7gFfPrJMh7nTGIZBiOrssX9RZB3+5FKgGh6iyg/zkh5LyKsbM/O0SvTtzlLvPUDlCYG/GC468TQskPg52zU4DZDUGk+X1/pml9xqcm8tJh6/yob9+Yfpu9JgMu4gITxJiTn1bxWjR0Ab2CCLKfvQlOCIVJXs2S0NBjlvvBFch91JtFqvaRK7Yr+XJzhvg9ZIl3ia8iMFZDw== 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:21 +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:21 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:48 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [Hj6ywXsQHBPoLCjO+6QcuwxzDJruC5SW] 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-39-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a083f3dd-fe7c-40d9-32b6-08d9e3b9da10 X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CrQPtYkiw6OnJZc+vQYelPH7zG6hcNzHNTU+Zv6eSDUjBc0sOgivYx+nOfSUtqI0U03SZjTVx6Qqul6Ie2yIyjT+ddyZcYZfryIR0w26GyCy0qOuNgFzp/MI/GBgp9Axg/wYzm/IBF6xwNPpiiNROhwS6wTOunaYJp6WrMK/UZWp1HTNzxA7y7v++7wEGKWRkkzjiEMnQW5f7orSa8fsFdfa7HCp/9M1qSwScUby4F6FQnbckSaG8k3WUwo8M8AWf9bgTsaF3N80qNoaNRt6aGhb7Yq32Dt33+UhAsoGWlLm6btjViaIobs0ZW/ttGeG5Hk54ryNm3KiQRzPhNc1NsfuH3m+GgC6tvr5/k2XjG/LGdzRjcwprrXVp+THEaqEKV2hAKHfDpVVSu5dSxZh5kOje1Emczk5J68r3gTRnw9k3oAVAg9v7Yfc3NRdnDKWfcnEmrMwijMzI9TyeOoSD6Lt42JnxX7Gs9ScPLZGvuYcbuf62sVdAYvre7T1UmwNxEsQ5tJA8+0G72w5gJHhioY41WHKkfc/30QOe25VC/PDp8u5c6ubNapBnynIhk+a X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xNEebb4nxbWQCPM+uamRHoML37+25H8DglJgJw4yBmyl+5k/SgVih0rA4BuucCkurXozQHIj+Q9Nj34g3o+B31ZL3ltJQAoJ9sctfbLJoEF4Uf52WHYoKsPKVxox1lr+dka46O8PlwVJbBX81eufhFhgibx3Yj1UqcD4TF2ntqasmcvmiq49CkCLyNNIGYq/ppG/l1WDZWgCpFNR+iOeikgrUAzkcrMWesNehZYs5UFWOyD+XMRYYOuu1VJMJ08EkO1WNcMv46+cBo99R6gp9+oAGaUPsjTcAljW9XKvlfw+cYwIHvJlK9wiYxQ5QX/fPhAFZ0TFkMGWFZPGId/aDHD2s/kEsNeDU/QYF0vqRFgnIuFE+/xPkUMe/FUT9j/6cSAWpqrC0rqjBojlCXu7dm98Bgf+0EEaHW22Do++QHZuC64mkqH2yyuaLJKkMJfvOX+6M+TeWFCO+i0Z3FyvMrnnALfh41UoRWDxSU5OS1VnvQTNQUxbCEmY16qj48PdzoFBhDqdQF0FkbzxExGH9zDWI0mcd6CRSRkZnwi3n3c4QTkzQ9Yo5Kk1vLeaHZzhiMbahN20o8JbEc8ynUx77OqnQXD8G+1iSV5Co2v4XO7Wb/HEqpFvtK8Lq+YLlebZewru8xhkk859PgspPRBLfOMFxs9f1lWKb41BUiP5H50vAeu53std0i8iQciPje8hlBCNDRo+6TdvhFlj0A0OYYWbTMfgd84GZyRy40zOIeH1cvD9MTlxLz+eSuIoce337oXSWnX0u9ur+tAFLEzhlFFcG32s6CI6mfwGN7LXWW0ZU1sWC23UVNqiVtXdiII67HSiFPXD9LwQc2ea/aHonTYsDS3MsyQF0BD3zSJZyPrRf5wbB4CacBJLaXp/3dqLUNsvL4n5J5kR/cHExudeKNy0M0U2xMwjHzYt1njTUvx9wAJ9009MuOZfoTqaq7lv7hP1qwdMAvN6TD34DoUdsQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a083f3dd-fe7c-40d9-32b6-08d9e3b9da10 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:21.7343 (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 40/41] avcodec/mpegvideo: Move dummy dst for depr. opts 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: tTlzoTzTn2Cz Signed-off-by: Andreas Rheinhardt --- libavcodec/mjpegenc.c | 2 +- libavcodec/mpegvideo.h | 4 ---- libavcodec/mpegvideoenc.h | 8 ++++++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index a8efe72231..064562e6c5 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -631,7 +631,7 @@ static int amv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, static const AVOption options[] = { FF_MPV_COMMON_OPTS #if FF_API_MJPEG_PRED -{ "pred", "Deprecated, does nothing", FF_MPV_OFFSET(dummy), AV_OPT_TYPE_INT, { .i64 = 1 }, 1, 3, VE, "pred" }, +{ "pred", "Deprecated, does nothing", FF_MPV_MAIN_OFFSET(dummy), AV_OPT_TYPE_INT, { .i64 = 1 }, 1, 3, VE, "pred" }, { "left", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "pred" }, { "plane", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, INT_MIN, INT_MAX, VE, "pred" }, { "median", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 3 }, INT_MIN, INT_MAX, VE, "pred" }, diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 5c7654230a..bf71d6242b 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -485,10 +485,6 @@ typedef struct MPVContext { int noise_reduction; int intra_penalty; - -#if FF_API_MPEGVIDEO_OPTS || FF_API_MJPEG_PRED - int dummy; ///< used as target for deprecated options -#endif } MPVContext; typedef MPVContext MPVDecContext; diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 662236c102..ad55448363 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -107,6 +107,10 @@ typedef struct MPVMainEncContext { uint16_t q_inter_matrix16[32][2][64]; uint16_t q_intra_matrix16[32][2][64]; uint16_t q_chroma_intra_matrix16[32][2][64]; + +#if FF_API_MPEGVIDEO_OPTS || FF_API_MJPEG_PRED + int dummy; ///< used as target for deprecated options +#endif } MPVMainEncContext; /* mpegvideo_enc common options */ @@ -195,9 +199,9 @@ FF_MPV_OPT_CMP_FUNC, \ #define FF_MPV_DEPRECATED_MPEG_QUANT_OPT \ { "mpeg_quant", "Deprecated, does nothing", FF_MPV_OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 0, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, #define FF_MPV_DEPRECATED_A53_CC_OPT \ - { "a53cc", "Deprecated, does nothing", FF_MPV_OFFSET(dummy), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, + { "a53cc", "Deprecated, does nothing", FF_MPV_MAIN_OFFSET(dummy), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, #define FF_MPV_DEPRECATED_MATRIX_OPT \ - { "force_duplicated_matrix", "Deprecated, does nothing", FF_MPV_OFFSET(dummy), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, + { "force_duplicated_matrix", "Deprecated, does nothing", FF_MPV_MAIN_OFFSET(dummy), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, #define FF_MPV_DEPRECATED_BFRAME_OPTS \ { "b_strategy", "Deprecated, does nothing", FF_MPV_MAIN_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ { "b_sensitivity", "Deprecated, does nothing", FF_MPV_MAIN_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, { .i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ From patchwork Sun Jan 30 06:27:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33941 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1772411iov; Sat, 29 Jan 2022 22:34:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJwDcD0iXF4VOOqCjJNOR+TjhdYScEiErwnhAR1G9YRFFPEXmwZ4XBSAJMjjgCGIKGmLA4PQ X-Received: by 2002:a05:6402:50d4:: with SMTP id h20mr15299143edb.90.1643524480438; Sat, 29 Jan 2022 22:34:40 -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 sd3si3771029ejc.915.2022.01.29.22.34.39; Sat, 29 Jan 2022 22:34:40 -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=RW8+2W41; 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 A1BB568B321; Sun, 30 Jan 2022 08:30:00 +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-am6eur05olkn2061.outbound.protection.outlook.com [40.92.91.61]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E18D468B140 for ; Sun, 30 Jan 2022 08:29:53 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Izm2/bMLoECRd67a7eZAyjFAoBI3IfhQzgfKstLawKcPsWGLGc+ZcUlH0DoYozgqXoo3oO/P8PgJGoIHamx+yfFNZJIOjRV30XithOf2YshwWL0IX0IUONcvuamH+aJIBap0NQBe/4rw11ZcJqJHqOXiNePBrd1k59BSWsB7CQYnegO51+Rvc8anqPHmJj0soCH/UJBimgNfbt0jQftFMDjt556PsE/eRIRfJzpwvhhiFKrxtqdTtwdyeLPdHnJSdd9ZP2dTln1EsTaYubW9xRJlhskIA1VbmFlrnbcSikStHcYSQwxXqK5u6RHE8t97O9EsdjMU5I86GQadq6Y8Aw== 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=xtpQaXWRcVHes1H3lP6enwcEzLkyPQiBOCJwmVl5wKw=; b=jpHdw0dnNrWMpeBo9u4dCt9oemJqhiSwN14L4B4/WHHgREGzhfocOdFZHjeZAHfQi3YBlK81A9UGGXO0v/BBQeF+6sQ/JEBM46iqRYBzwPWAuqRthP5VxHSiqU999/2F6GDBLjDLmaTB4cwI+WnHt8wEAP2voXdnUTqCMAr2yIeHXb5JMT+FIYtlok1TfaguCQNarwA5dM/yTQe+ZdR+jb/W5XxqrkZNU57B+pG72Edcu85G9BjUsesrW/9ycfq4JwoVHd4Db/7wspaecBvnN+cljyNcacEJkVFykRprmank0czdHmAw2g7zMohw0XgxCpYeCduQDwg22Omtfh1gDg== 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=xtpQaXWRcVHes1H3lP6enwcEzLkyPQiBOCJwmVl5wKw=; b=RW8+2W414VjQ7/bUClLWnWpgkoJAox8+FpsH2qg9k5kqCNK4lIdVZ4SLfbEP9DlQQoDsYS6eEseuwdGx6j9XLdB/KxCSsmY/fpDUOsfe7pAdXtfSxNP+B9+BetGe6f7WrDTLgRGLAPset4n86PTNO5m7RwIIsITzSKKdlKpQ9hj285b490maZft6XzKKOyhPjljfMzfWfUWOxx6uFPeInpSLVo1WbJcFh/nW0a8dE8th7+z53hNPFw+bvzhIjn4Eet7vXPGhbE7GurV4o2J3swwfs4QypFNMFDb5vorYw40tWJSnVCN/pl+8So1AkLOIYtiek8NC2LICP2/q2dZraw== 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:52 +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:52 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:49 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [Z0HgFJrDGJ4eo5jjqrT3ZbwOFSpQrBK/] 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-40-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 29f49970-7114-49bd-c987-08d9e3b9dab2 X-MS-TrafficTypeDiagnostic: VI1PR03MB6239:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 99eiYkFItyZ+gwyGfrDJPSeWXlECc6V59x5yD9sYF6UUpSLYDgbU+w6ODmOWm35UW00XWcgh971Fmu8vQifqrmht7Cupohmt8iKT1tm6sO+RgXB/NMIwosUexrqT1uBzJ/uYGnAiCWGDhzvvK1/dBZpUdCy5S3lO1/ilWDFTN+YMcNdaJAJ+DHoQZQ7e3BqVX+RgTfCgBp1wIb41QOd4r26DjUnbrpsdl9DIZiswLr/kEagU/9o6KH906xLNHNNKmRosRLs3Rx4kQMzZvOam1GHYejOaOGXqNVrz2QIgMCRK/eJCggCIo2WbtDObTE9EXRpiCFmxGgyZJXOCHbjMcyLm4aMycM+OCgwVlWeZIwcnxg2RP/rTmq1e/k1O9tEn3R9ErT4LImOTONS1XC3WiGim8hqSl18NFv4OxFTZP3AQKzVOp6MQBTvocrq6CgEr0UkvQcxtCnH+lySl++Hrx1ed5wzwYzZt7CTTXrUVtR3fg63INtOxQp6IAMdE6xV9MifBxpD534CuwVjKylWHK8XPG/zbNdFpT7l1GO9jFiA= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: S6yEM0ckjnwGJC1OV2jbdYfmGcC8PUIxbZRrlgjtnJ2e/QmUHxucI3HrFiHdb7XFe8XPfkcqVToQj2fZDCaQAIr3vTNBXeEBNDyea7TgAlGz0ATUXbePMV87Vn8c1Kdm75qo1Y5kNxP+7+iAwcBhFBcOjKhgnBXZJH19/iXECJk5PJqwnAlEjXszopXIBew3kozo/XB4Fj2H2YOQ9svPBu/0Skwisb3cN6xShquoRQnDg0svA6CG3Zvbx/JbjrxluAjf4UZWiVPx4PljW0FTT/UF+WrwOoSblhHnW1KGiaj4ml0Dq+Qn4uW/X446dh+oT662aA4oyI4K2lYMbL9Wv8MUxoTiEnYW68QG+3PZDmGwY/buoKlWZI6CNgLqL/XHZDb5Iyay287KRG0s7qYs2N05mDuR+S/OtAHYG3remVDncz5mUg/eEaDPlixNAKxfQ3VARWB5CguXiFCKEZoXBgWB/pqylnANgsPvn5F8aT5DIYbRxRvWIhZy7/gGTwn3Cy44fpGqJNurfEFJzFpsfSnG/rldbqzIYJ9tU1AKEvheeadEYzoBoGngFDOhG598jjW40StS1uIVe4XTmb3Ua1R5W0RPoPc0VDvMeeVE3IwkFlCyb+iRJr/v8HqDGu79v49U3XuVRGf7kjBXYk65P8RprJYjlVbmeMe3q6ho4Ee54U6TYo3Stbh1KaQxAAt189gUniX3D8mR0pdZa3HnXIm4HhwsFxTKHdAYrcGcKNufphwq1x10Ko4TqxjC0eB2bcqGQiwQKLCQIonpattnwzZ8XpNdyIkUWksNGrmD+LhnJIU3rFI6d+p94DSQQSwQSPYgytHdXhLUPfVR5/nDu0rVPuabYfBahBRVNmJlmAafGeDUeQHWDhty2h5WCyk/R+p/FykrFYFn1+hEyZDrd0YyZBOtwFkNHrTsuBLPb+11TZG/d2wR1O0Ov/bSRAiwsDPtY5RQLwZXVsr6YcDuKw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 29f49970-7114-49bd-c987-08d9e3b9dab2 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:22.8178 (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 41/41] avcodec/mpegvideo: Move frame_skip_(exp|cmp) 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: nxvZA8hAhrJH Only used by the main encoding thread. Signed-off-by: Andreas Rheinhardt --- frame_skip_factor/threshold are used by slice threads; they (and several other fields) could be moved by adding a pointer to the const MPVMainContext. I intend to do this in the future. libavcodec/mpegvideo.h | 2 -- libavcodec/mpegvideo_enc.c | 8 ++++---- libavcodec/mpegvideoenc.h | 7 +++++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index bf71d6242b..fc271991fd 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -479,8 +479,6 @@ typedef struct MPVContext { /* frame skip options for encoding */ int frame_skip_threshold; int frame_skip_factor; - int frame_skip_exp; - int frame_skip_cmp; int noise_reduction; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 1a88e4fb93..8c369a94ec 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -892,7 +892,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) s->quant_precision = 5; ff_set_cmp(&s->mecc, s->mecc.ildct_cmp, avctx->ildct_cmp); - ff_set_cmp(&s->mecc, s->mecc.frame_skip_cmp, s->frame_skip_cmp); + ff_set_cmp(&s->mecc, s->mecc.frame_skip_cmp, m->frame_skip_cmp); if (CONFIG_H261_ENCODER && s->out_format == FMT_H261) { ff_h261_encode_init(m); @@ -1234,7 +1234,7 @@ static int skip_check(MPVMainEncContext *m, Picture *p, Picture *ref) uint8_t *rptr = ref->f->data[plane] + 8 * (x + y * stride); int v = s->mecc.frame_skip_cmp[1](s, dptr, rptr, stride, 8); - switch (FFABS(s->frame_skip_exp)) { + switch (FFABS(m->frame_skip_exp)) { case 0: score = FFMAX(score, v); break; case 1: score += FFABS(v); break; case 2: score64 += v * (int64_t)v; break; @@ -1248,9 +1248,9 @@ static int skip_check(MPVMainEncContext *m, Picture *p, Picture *ref) if (score) score64 = score; - if (s->frame_skip_exp < 0) + if (m->frame_skip_exp < 0) score64 = pow(score64 / (double)(s->mb_width * s->mb_height), - -1.0/s->frame_skip_exp); + -1.0/m->frame_skip_exp); if (score64 < s->frame_skip_threshold) return 1; diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index ad55448363..f18463c2bb 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -87,6 +87,9 @@ typedef struct MPVMainEncContext { /* temp buffers for rate control */ float *cplx_tab, *bits_tab; + int frame_skip_exp; + int frame_skip_cmp; + /* temporary frames used by b_frame_strategy == 2 */ AVFrame *tmp_frames[MAX_B_FRAMES + 2]; int b_frame_strategy; @@ -181,8 +184,8 @@ FF_MPV_OPT_CMP_FUNC, \ { "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ {"skip_threshold", "Frame skip threshold", FF_MPV_OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"skip_factor", "Frame skip factor", FF_MPV_OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"skip_exp", "Frame skip exponent", FF_MPV_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"skip_cmp", "Frame skip compare function", FF_MPV_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{"skip_exp", "Frame skip exponent", FF_MPV_MAIN_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"skip_cmp", "Frame skip compare function", FF_MPV_MAIN_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ {"sc_threshold", "Scene change threshold", FF_MPV_MAIN_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"noise_reduction", "Noise reduction", FF_MPV_OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"ps", "RTP payload size in bytes", FF_MPV_OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \