From patchwork Thu Aug 4 17:36:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 37138 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1649:b0:8b:613a:194d with SMTP id no9csp537091pzb; Thu, 4 Aug 2022 10:38:24 -0700 (PDT) X-Google-Smtp-Source: AA6agR4+gGlxPzzm55d+9w81+Pg0m2O6P4Z8KtjS9VTw+/jIbBdkq+GTL2dVZeAzuG3NrM9bS7ja X-Received: by 2002:a05:6402:518b:b0:43e:70be:97cd with SMTP id q11-20020a056402518b00b0043e70be97cdmr3159734edd.388.1659634704240; Thu, 04 Aug 2022 10:38:24 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id dz18-20020a0564021d5200b0043bd659930dsi1779595edb.523.2022.08.04.10.38.23; Thu, 04 Aug 2022 10:38:24 -0700 (PDT) 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=V1ykru1X; 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 0AAC868BA55; Thu, 4 Aug 2022 20:37:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-oln040092073091.outbound.protection.outlook.com [40.92.73.91]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E92E368B9F8 for ; Thu, 4 Aug 2022 20:37:28 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=M8bz0gbikfSKloBEZAIs3/9IssBQf/c6mBlsTo0ntOucO8bwNg82Z5WMLKVRmyHvPFAJlmeXCPSwkizAqUYE1uNOBDsGR2r6wpkTwW85GGS8+cPdLywW9arM21/KFEHXUoLCZmxh5N1K64poqzfMnLRy0e/MYWJMtgejtW0bNvNnbnhoX/lljDP0OQa/dCxkOr4jKQy57TnJ/rjKAv73WZt32J7wXxlzzo5Q3p0GLNU0AsS796O7f3tpmXeVjxjSwTmXYTfmVwXzDhl4aNTdLN56xYj/t0g2T7AK2uaL/K4tbshPGX5/YCs1TtY42El7xdijQCYkDcp8MEheEpOJZQ== 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=K3Cvor1mp/VhrrmONO1u0r+ZIozE8/BN8Q5rIQzZZvo=; b=cbLpZ0axc5Wa2oeQkZ/lzMk99RtG2DR7Q2VqqWO2byToUHSvoKqpfoMsrHWKlLETIB4b2Qsq/wQuQcy/kp3hDWZrTqn2z1+9BdAoYUcpyx4KAUgCYHy87K1pdpR7bQOkq5NBavIIiNIWCTy8qrJIssKHIt8ACvvUb9ryEkK4i/HYQvxDxiioFwmqKqdK02Gfchs95n18T1dppFO0KIse6jC9FGxMvKoPFs3tgNN8xxbnyYcdZiSKddes90Ap2xtw+zomNawIhyN8FDSINY8EyX5URPKBpjpta998DMjZLMFVkfFI13VlutiVnFtZoDVoEqZpjidbrE7drk8NJvZgzw== 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=K3Cvor1mp/VhrrmONO1u0r+ZIozE8/BN8Q5rIQzZZvo=; b=V1ykru1Xm8YkndyCvXkojiFVMsai7oePZZaMDzYc7UEKKqw8ogrgO41e2n58eLLGr1hkb07W5j3DtB/CaWrMHck4dJt58wxvwouSn0kU4P/HgdoNhxDVfrhZCQr0SNg2eEn16aTw27y1zyETR84y5QcS1r8VMgVY+gTxz6O8DdgnNphdclA/zJIrB46cM6smYnp5LlrHUizSQN7Twax3W13E+suoAedcLyXq/jhGtReZSGWQ5H3WdlZ6W+J3xT8Gkp8nONsNWVU+FHqFHjA02QEDHdAqMhpOMKsYt8y2VZJ79h3hyp4pVgcHBAhFZ+VVhhQNoAOaL4vN0235EolVmQ== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by DB8PR01MB6503.eurprd01.prod.exchangelabs.com (2603:10a6:10:154::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.14; Thu, 4 Aug 2022 17:37:18 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46%11]) with mapi id 15.20.5482.016; Thu, 4 Aug 2022 17:37:18 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Aug 2022 19:36:53 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [wxcXohokA1b7b2xfFPuqUDx5ZpeEANNC] X-ClientProxiedBy: AM5PR0201CA0018.eurprd02.prod.outlook.com (2603:10a6:203:3d::28) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220804173655.1561196-6-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bca11b5f-12da-4f6b-a09a-08da763ffa66 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNVBLZe6CjjWHQcN+6fAcwmpZHZmCAsfuk2arYV+5D+55OXQJTmsznIt6nVN6eMv92H+7XqTRglcyU917KwujXFaZr2vXm/eSXt5TKIa69L2n0oSyOnaX1TbuBNFWKzSP/6IlvLkecuDvwy69nKTleWw0LpP7fnaz4u58HZGhb4n+zEq82/Yr1OGrntcv4jshTAxOSclcPHF4AWXM7NOX2HitBvFwLPSdUQNgdFmZxjPZBWkbFLFLHQR9C+J9XzX0yLVRtV+ij2M8x7aozcPyFZwzJJtOjG13TlRMLpGj0og2FJCZ9uXMRFvw8+74ZKju3iqHphrR7nanMNiEd5sHA2xczDlqz4UNmZz6i4icHvzzmf/i/veRlJa2Dbaq9By0pykCZj9AxoFZjn2eHOZc3MuerDJIfJkcK7+uEeIcQ991QcsKiSRyAJ/2Q4kKA9MyS1pnpWcCWZ1zVz4qOdmk1liz2oYT3HH9qTtM3W8ssHlWtg2xYYinYlJS6lhLqREEU4GZSOx3aF3fR030pMKUqeD9ve3DPFHiCn7jarJZfhRl46ZoV58dmYC95I0nLiibmsk4u41uqo/ivN5nhU5I3HpZj5H71uxXRefyHw7wtZY4+b2uBzFLR5o5p4EO5GtDghEiHoyFlTSWGsSl5/Z3JNBzfLXvPDQbICNz6yoRH3u83S3Beb9bsVJFP68NUC+jMN4hbxpy4SzXhaPghwFFCwWomVsx+Cer7k= X-MS-TrafficTypeDiagnostic: DB8PR01MB6503:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JokuPVeaBNfXML+GXFcIRU/p5lqCgvVFIZCDTVFd0tgF9vzVhX5x1SX/UkhEwySSPZh/bDyJir/Bld3RQg5eDYKfPEBVQ7XrbEFy7GJyu+lp7ctR9m1tgb0NrXAonB2nGr4VjA736jbIk4HmxZtFz8j9HqwT7APlDgQ/xj3663nX8YVxVx33vIUU3fVeMwmGrE8wgXlHcdp0oXKvUbKzCkQinifgZ8x9sK1/hJqYc5dYQvEh5WzTfjEym3KptmcjS9AcxucG8OSiPl5KuN0ZF59CK1Q8fMKtB7RmtGT7T545JMhurf+oHeOC2kyLKZ3/9a3CsydYGui/ZZacBEzoifrAS1pNJYEXE8WQtYeegf7ab4/j/mSROZ3gze6LuvEJoh0fQSSvFmt3+Y6GVkonBic8PJ/Po5yz83R50EkydGAe2YfAFqQYOFnpVc+5pBQ2GwgT+8xYilWoiS23emiGjJXHRIHJuiQ6mfhLP2cMrcwpuBQrMPMfYj1fWipmFLQGDEAfJubsi8ZO4uiaMQDPSIHuLO568aD2T8YLNVBdkfBjdLtxitp2pwm9nMm4GqXK88vOwpGFAAf5/7hzP3vsCwNvJCck8u/yQiE4DZkhgQunNJ4uJ6/IJvSw7xU+6Hw2DZcghbULVN9rqfPmfebXCA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: c2hypbVXfSy0S5lxM/cCESPjB66H9ZxMevcw4Bv2CY5RpHdIhhPnZj2P07pYtrSxZ1uKp9kiyjviKG2cZtnfCaz0OR2mig/OAgZ70mR5fD2KeDPcy4tOAdlZSy0/xluzhXvkQWT2fde0Y6+kQM5SXd10ev2Xy7nWP/VgraqYgjXpkpgbNbD7FLxftUfiyTErDn9pFxPbE36DsFi233uAcWSpvgBiyi+qC8FO2SUgvI2chc6usQeawKlAvIwhQXXQnZlqvCrJ4q9VLiwjWVkb8fxFFWA7NJXbENyevH25AJM0+AUApPuikGn+HIVhpQPO5FB3AFfXLLKNVhCfKyPVFg2zcNMaGSOe5xzpuSKRFhASVGi4bEFa7L+SW3jaHwBmcOKOnt8Qt46NDinn25iXcVS//OU5WWI2M7qgB0LTnhK5bfCEB9TfYjRnnr5bzKoKzR+Yup4MFPuu/UUy/tp+S+kBR7lfXnRifp4aKeocI3xbCnHfArqamVxf+0dwjLAVIvACfuHymkkXMtjkWkV3KMhqbCh0bj/HX5b2Ex3YzEEFwDFOHxJi6f66VIJVq073AgDdqtv9KotcsOL77FLoQPWpC6r9NgJ6CNCpGR7W6CqCvwgXMlC8YqBso3w+2PkMzSSBmZ+hUaFH3e7prkooZjWIrnNuRZbMJCIiO5NrHUXlFAoM+OcfR3D7t6VViBwuv4T9S4Y2HAMhglzb7gqKm/IuE7yCwWzeUc4c5yG12aXrq9KEViS8DX8sXZXOQitaxXXGULa1jL0dnL1HFDW6WXx5WOobZHxOcaKy2n3lVS5heIbAiKZoPcxwX2du+j8bb8FCvqxBCnk9EAtN6woNdZF3xJjrkpczXQskl1RqfH9JZcChb1a6WmDhDcjcA3Ti4pVS0CvCLDaOorw00omEXaR8lm0tjG4RmwwDf91w+jlH6/nFQmdDIBJDtrfLTh0o9tWdisdpHe3b/Xd37EyZapN7lfqOj1IbnFJsHm9fMpozIrZSEhBAXhReyC/pp/tPVtgc0uhUMn91QwBzlkuBblRrG7c/SZ+XHMft1nzTa4bWpyrzAq2P1wDAorfsWtqturvb0rCHCfCFKawzN+RMg5GRkSJJ9/jTk7KMzMisxKWUE32umqRDubsblMolEWrfEVuHiKYDI3h2bt2qJ+Z0iMaaobMEJnd5pq1hFQewN33BfUnhlCtF5aVQ6uSyqs3sItXbqvANAfnSg7o/brGL4yz8bYvB0zThYj5pJaK/OJNWTxImu6PYvJ/yJB4KrgLplzCwO2aNCCB8vjZvCnxWmhvUm+ddZ6w7QijaYbMoZYs= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bca11b5f-12da-4f6b-a09a-08da763ffa66 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Aug 2022 17:37:18.4737 (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: DB8PR01MB6503 Subject: [FFmpeg-devel] [PATCH 7/9] avcodec/cbs_jpeg: Use table-based alloc/free 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: S/4OSsiXRKlQ cbs_jpeg was the last user of CBS that didn't use CodedBitstreamUnitTypeDescriptors. Signed-off-by: Andreas Rheinhardt --- libavcodec/cbs_internal.h | 7 ++++ libavcodec/cbs_jpeg.c | 76 ++++++++++++++------------------------- 2 files changed, 34 insertions(+), 49 deletions(-) diff --git a/libavcodec/cbs_internal.h b/libavcodec/cbs_internal.h index 4030b76f1c..5ccba3c901 100644 --- a/libavcodec/cbs_internal.h +++ b/libavcodec/cbs_internal.h @@ -197,6 +197,13 @@ int ff_cbs_write_signed(CodedBitstreamContext *ctx, PutBitContext *pbc, .content_type = CBS_CONTENT_TYPE_POD, \ .content_size = sizeof(structure), \ } +#define CBS_UNIT_RANGE_POD(range_start, range_end, structure) { \ + .nb_unit_types = CBS_UNIT_TYPE_RANGE, \ + .unit_type.range.start = range_start, \ + .unit_type.range.end = range_end, \ + .content_type = CBS_CONTENT_TYPE_POD, \ + .content_size = sizeof(structure), \ + } #define CBS_UNIT_TYPES_INTERNAL_REF(types, structure, ref_field) { \ .nb_unit_types = FF_ARRAY_ELEMS((CodedBitstreamUnitType[])TYPE_LIST types), \ diff --git a/libavcodec/cbs_jpeg.c b/libavcodec/cbs_jpeg.c index da7ee808cf..2afeecfa79 100644 --- a/libavcodec/cbs_jpeg.c +++ b/libavcodec/cbs_jpeg.c @@ -82,27 +82,6 @@ #undef xu -static void cbs_jpeg_free_application_data(void *opaque, uint8_t *content) -{ - JPEGRawApplicationData *ad = (JPEGRawApplicationData*)content; - av_buffer_unref(&ad->Ap_ref); - av_freep(&content); -} - -static void cbs_jpeg_free_comment(void *opaque, uint8_t *content) -{ - JPEGRawComment *comment = (JPEGRawComment*)content; - av_buffer_unref(&comment->Cm_ref); - av_freep(&content); -} - -static void cbs_jpeg_free_scan(void *opaque, uint8_t *content) -{ - JPEGRawScan *scan = (JPEGRawScan*)content; - av_buffer_unref(&scan->data_ref); - av_freep(&content); -} - static int cbs_jpeg_split_fragment(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, int header) @@ -248,41 +227,26 @@ static int cbs_jpeg_read_unit(CodedBitstreamContext *ctx, if (err < 0) return err; + err = ff_cbs_alloc_unit_content2(ctx, unit); + if (err < 0) + return err; + if (unit->type >= JPEG_MARKER_SOF0 && unit->type <= JPEG_MARKER_SOF3) { - err = ff_cbs_alloc_unit_content(unit, - sizeof(JPEGRawFrameHeader), - NULL); - if (err < 0) - return err; - err = cbs_jpeg_read_frame_header(ctx, &gbc, unit->content); if (err < 0) return err; } else if (unit->type >= JPEG_MARKER_APPN && unit->type <= JPEG_MARKER_APPN + 15) { - err = ff_cbs_alloc_unit_content(unit, - sizeof(JPEGRawApplicationData), - &cbs_jpeg_free_application_data); - if (err < 0) - return err; - err = cbs_jpeg_read_application_data(ctx, &gbc, unit->content); if (err < 0) return err; } else if (unit->type == JPEG_MARKER_SOS) { - JPEGRawScan *scan; + JPEGRawScan *scan = unit->content; int pos; - err = ff_cbs_alloc_unit_content(unit, - sizeof(JPEGRawScan), - &cbs_jpeg_free_scan); - if (err < 0) - return err; - scan = unit->content; - err = cbs_jpeg_read_scan_header(ctx, &gbc, &scan->header); if (err < 0) return err; @@ -299,21 +263,17 @@ static int cbs_jpeg_read_unit(CodedBitstreamContext *ctx, } else { switch (unit->type) { -#define SEGMENT(marker, type, func, free) \ +#define SEGMENT(marker, func) \ case JPEG_MARKER_ ## marker: \ { \ - err = ff_cbs_alloc_unit_content(unit, \ - sizeof(type), free); \ - if (err < 0) \ - return err; \ err = cbs_jpeg_read_ ## func(ctx, &gbc, unit->content); \ if (err < 0) \ return err; \ } \ break - SEGMENT(DQT, JPEGRawQuantisationTableSpecification, dqt, NULL); - SEGMENT(DHT, JPEGRawHuffmanTableSpecification, dht, NULL); - SEGMENT(COM, JPEGRawComment, comment, &cbs_jpeg_free_comment); + SEGMENT(DQT, dqt); + SEGMENT(DHT, dht); + SEGMENT(COM, comment); #undef SEGMENT default: return AVERROR(ENOSYS); @@ -456,9 +416,27 @@ static int cbs_jpeg_assemble_fragment(CodedBitstreamContext *ctx, return 0; } +static const CodedBitstreamUnitTypeDescriptor cbs_jpeg_unit_types[] = { + CBS_UNIT_RANGE_POD(JPEG_MARKER_SOF0, JPEG_MARKER_SOF3, JPEGRawFrameHeader), + + CBS_UNIT_RANGE_INTERNAL_REF(JPEG_MARKER_APPN, JPEG_MARKER_APPN + 15, + JPEGRawApplicationData, Ap), + + CBS_UNIT_TYPE_INTERNAL_REF(JPEG_MARKER_SOS, JPEGRawScan, data), + + CBS_UNIT_TYPE_POD(JPEG_MARKER_DQT, JPEGRawQuantisationTableSpecification), + CBS_UNIT_TYPE_POD(JPEG_MARKER_DHT, JPEGRawHuffmanTableSpecification), + + CBS_UNIT_TYPE_INTERNAL_REF(JPEG_MARKER_COM, JPEGRawComment, Cm), + + CBS_UNIT_TYPE_END_OF_LIST +}; + const CodedBitstreamType ff_cbs_type_jpeg = { .codec_id = AV_CODEC_ID_MJPEG, + .unit_types = cbs_jpeg_unit_types, + .split_fragment = &cbs_jpeg_split_fragment, .read_unit = &cbs_jpeg_read_unit, .write_unit = &cbs_jpeg_write_unit,