From patchwork Wed Dec 22 03:25:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 32819 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp6022153iog; Tue, 21 Dec 2021 19:25:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJzbyK6uTq3+WDyUNyH2PX8gDVNcWjGHap/3Q0ECMbLevw4Lt8mtC8455MSmiPnQg+Llie2J X-Received: by 2002:a17:906:2f97:: with SMTP id w23mr905937eji.739.1640143535034; Tue, 21 Dec 2021 19:25:35 -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 y16si441967edq.249.2021.12.21.19.25.34; Tue, 21 Dec 2021 19:25:35 -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=Ser5CU5C; 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 C54A968AF6D; Wed, 22 Dec 2021 05:25:31 +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-oln040092074084.outbound.protection.outlook.com [40.92.74.84]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 89F4D68AF6D for ; Wed, 22 Dec 2021 05:25:24 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LTepN7kZ+DTP1GMtlBF3g+mFF2gDd49oh7suoOBd4klrDWT9lxoqx77pF1X/tri/gYEqdNuX6GAClazeRYKkMwQCF3WXmrcVOAWrCVo4FXIYdy2HG66JskiDCq12X4x72PTmIqlEdQ7k0kPx9sOy1inqF1mEChMdWGDjl95erHsQNYDxAhPoYoIV1rlrrC6on8g0IE5vOKNCYCgU/dQ/FuSETeG/Wwr3baZnd8JOI/fpU7p308q3tStH0YvVmVI/1TLeUKTRn/OurzQ9jecPMT5GkppFyqkFu2L4QiOFwCodHQkgFE7rCga1UZAVV1qJgU2HLED6h6Ok06lRFs65cg== 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=jbzTyFf1R71viIcmlv7Oy2iz8/u5tfj5xfk2kbNEK5I=; b=hOLTjndX1ryheqaefkS12sM0FLHGtfOLE0JLiCQhxha5ZPSOawFOYgIbeHYOvRCrQyELmEIRkXsLUAa87B4kpDon49wz1WRZ8f7CallolOAOwLWnLfkjgcWBU7bcOki9JrI2keUgJ4bOiP5SfUPKFFre12sejoD6G7X8ZdcK9cXKxsI2n6JNzUnw7pBEb/2XoC8BQGyw6eagBiXDOOXhDzG2opYfHY7vz+l1nsk4wq+eEAukOA0HvbnSXUoabZkCYc0hffhnBy76Yr7/lcLizeNgp9ACQq9+jEobjHvNWXBwOmrqbRObjrYzCIzOWcFXzbEi3mdGJuGT9opTcJJD5Q== 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=jbzTyFf1R71viIcmlv7Oy2iz8/u5tfj5xfk2kbNEK5I=; b=Ser5CU5C+YBgFOlRieiIxmRcqNDkmaNlp9HI2l3WfOYuKZd4Z+525wcV0hmkTxFGYpazP0lorYcg1AmzyuBV9b+LumSwDysCfQXBTxkNWvmouOKsnSZ4IM1DACGiR2xJ8rZ/gqpbRI55zYea5vbw0wS8sZ+nkbaGDRHe305xFU4MBFD7bnhroySVIHzT05ZmmR+4EicwA7rGP/SOr7DXfJSlgrSaBqcj/N0G3vidgTueQBbXlub5ybq8+HXhzvo76WMXxIeYKOx2l3fprnaIh18+9HlgoWAZQsSxzPqt3hsTna6UMnBk/vyzV3Xy1r9qHr/JkPrKuIPAhhxmUh/FeA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4104.eurprd03.prod.outlook.com (2603:10a6:20b:18::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.15; Wed, 22 Dec 2021 03:25:22 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca%6]) with mapi id 15.20.4801.022; Wed, 22 Dec 2021 03:25:22 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 Dec 2021 04:25:02 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [D0ddSuwbZDT46bzIrkUcu3kFTlt7gdhk] X-ClientProxiedBy: AS9PR06CA0323.eurprd06.prod.outlook.com (2603:10a6:20b:45b::19) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20211222032514.896794-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 23dd3b7e-cbfa-4ded-4f4a-08d9c4faaff9 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiR3EehW4kxQzdNcP2D/mG1JNSEUkFwt1up3zXu68uMqLy4pcFXAr5zZkpamQOO3qmvf0JY24H0tbkmofEqiGFPDpk9RpvBFsZ5MKK2azFvabovvtJyhW7NPGpKYiCumt+oZR1qgEKnlwmM8s97cUR7mhr/8CCMh4RRfDnEncYZgTrDrTzydAXtdnaxwg8bo9olkyqSPrNAYmnXHrWmxgmLAYmtd/kwpvyqQ10HkHOZXvAjzM2lKxCXyhEsOWkaSVG9aQIOh28CXOpDK9S5VTcaDskCajMNSsx++ZvpPD8KwiJc+Qaw4xaFPMCos1Vkv5GIfM8HGhQ3w7LPln6CFFI11Qog4q5TAbaLh39ITg35opqr5TnKaSGZD0Wk+sl3G8DO+tYUjAgYfdOo5e6bRKKsYSjM1Fnlu/wOEIPMiF6qYbmpP2SAfz4vbwNTABRnBpyljqalOTAKKbmzgS4suAkm1LoRvl7LGx8Oca3hAgHmPjD4aOAdF4Vr679KcQw99P03YjRSPVzaJ1XKzaWSw96CDAhhfW7k8KVPtm+eubdnPSxGvLGHyijNQU24kffPq8vkT1esfkuHByom4eTlrBPA/ZyGd2FNGLPfb/852+FU5d39BGSStpy2OQFJUvBpISPKQ8lpAuE8sRMXvLY3y1VBB2SpOhLavh+Kdy6qSyaBI9m38Sc6J9yWMJGqB1Z7vvfwn7DB3Y8wLtwgyttPw9hMqjEzTuMSbT21ufDWVVbvQVIuX6cFppLes5e+UeeF2eyM= X-MS-TrafficTypeDiagnostic: AM6PR03MB4104:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ZSpAwNazeb5yDkHRScfgsOafH0U8rJa66jMjWKnkq0Y5B8dmSRY2qbb22eIPFeNwpjqLNO1bUMcwU72XPtITrjb1WWZ2ppPsFH4yC2G90Si2ciD2tkVZSIZ3peOU230+Q1DaYubEb6Ww1djaF+V1IuMvo08N329PtKVoduwdW+UsaeEK9FBbL65fzpEG+TH/ioMZPvgUWQFAlLhLNttMWn79jvCxRwWGnHU07vyjNCF+QqRK+BoVNpWKGCOoRGxvA1kct2+cB9dMZ2tK2xkWR+JThHaercJrD7W/1ZiuVWi6cB04EBkjp/UHuMCb42NIUjbxIfhJrR4XuRVPsoKfz9D7fLGh5Nx8lHjhYf7pvmYdOy0nhZvwosYFzhFRoRZ3XLcSOiN9iSsJwZ17ACe45SPXJNYsByBIgMW4iCwWCsJifnjhC8drqdQIz111/Sf1NO0P+W3fUdcXkmxchuXEyA0bkAx7rQhvJ+ieRYBoZxozBHZKMXTB6VVhC3d+jXPnoD0GgrzTOJAG7Gulp+DwPtLyay/54RvtxM8wRkdqxSqguHQB+Rn5bNZR5QYXobryoDtETz7tBDptoHpOP4YJEg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 5oJq1DIv8OdOQsRZqSrUswsPAyQkEnqcY2PnpxfkpZX50l1GnfM+a1ZjAHswH0McQwl23LPraEeVSL0N8Mnlz21whmm5TXe409DSBMykYTPPCmWG3Y0No9Uy4yS/ARIJhxiKfEJmTB+GAUy/5Sz88LS95Qe/lLxShkukrODFeUXz1MonC31rRBUn44uqmcQwIQnlIqiAzxi46pSp6ePuEGdORJLeRfuqOPe3irt6wl2q8gCLqq2t/4+uNODkvjTcXSmFaDfJIhyBP+gsZGdtcPov7Mgw9lY8VMZ/luIrcmiXb5VBnLXvF7W2HRI+zP9fiVuTJWh1aMv31YpU8X3lCDHAEMXckyv+qFK6rcV9uoTRdslfLZ0h9+Jkt5IXiW3K28hSdFtjsAQ9Pk0ucbEw6L+Y6bBoNHmC2D6egBdpvFhDluHlnkGtJR/i4YTAd6aWKPBUbmACuTL/aILfJWjoacEAvbusWr3WRHorghPWcfPPAvotxHxltmEnzbzlJbFwdm17T6k2uRQ+tiAzzcR4xgTBeCGgEfbeTqAN/8iEG8uhO+redQ2SHhIdgGUkhBAUuvI3OgxroVyMn6icygIrIdSJnw+3F3Vw7Qu6QwcgZglVdQyadgDhK2mHj7bEbLxTF5Z3Rz5R9Ay+UpAygH7zNTGcPsptFFVHJ5xIACT+keViWRVTZoN1VotBUoHIL6qRH+SeTQPUnH7L4K64RU5Om7frYuYWUUtnvACZEMUP9Krqn8zFubrnViOi9IBz18DB0dWAH4D9iJgpKvDixIfmcqRPIDUhlHM/k+wMG7oLHDc7HTOddngBo1xqFfCUGnol48Txif9lBuy06951mE3hxEdzwzy848oFYi7gsf6WkiXcMk4v4Zkw8kZg4Adp9UDiQD73ySEdwqubg/HZsjjmLxjVLmQF6VOkAes1gH35VDrtC48XO+lExtyeW7B7D3noMQzPIWeRML2h9KdRgGcL1w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23dd3b7e-cbfa-4ded-4f4a-08d9c4faaff9 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 03:25:22.5053 (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: AM6PR03MB4104 Subject: [FFmpeg-devel] [PATCH 02/14] avcodec/mjpegenc: Avoid allocation of MJpegContext 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: x1pmI15gjhvh This is possible by allocating it together with the MpegEncContext. Signed-off-by: Andreas Rheinhardt --- libavcodec/mjpegenc.c | 31 +++++++++++++++++-------------- libavcodec/mjpegenc_common.c | 2 +- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 5bd25b4f3b..1652087948 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -41,6 +41,15 @@ #include "mjpegenc.h" #include "profiles.h" +/* 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. */ +typedef struct MJPEGEncContext { + MpegEncContext mpeg; + MJpegContext mjpeg; +} MJPEGEncContext; + static av_cold void init_uni_ac_vlc(const uint8_t huff_size_ac[256], uint8_t *uni_ac_vlc_len) { @@ -260,9 +269,11 @@ static int alloc_huffman(MpegEncContext *s) av_cold int ff_mjpeg_encode_init(MpegEncContext *s) { - MJpegContext *m; + MJpegContext *const m = &((MJPEGEncContext*)s)->mjpeg; int ret; + s->mjpeg_ctx = m; + av_assert0(s->slice_context_count == 1); /* The following check is automatically true for AMV, @@ -276,10 +287,6 @@ av_cold int ff_mjpeg_encode_init(MpegEncContext *s) return AVERROR(EINVAL); } - m = av_mallocz(sizeof(MJpegContext)); - if (!m) - return AVERROR(ENOMEM); - s->min_qcoeff=-1023; s->max_qcoeff= 1023; @@ -312,7 +319,6 @@ av_cold int ff_mjpeg_encode_init(MpegEncContext *s) // Buffers start out empty. m->huff_ncode = 0; - s->mjpeg_ctx = m; if(s->huffman == HUFFMAN_TABLE_OPTIMAL) return alloc_huffman(s); @@ -322,11 +328,8 @@ av_cold int ff_mjpeg_encode_init(MpegEncContext *s) static av_cold int mjpeg_encode_close(AVCodecContext *avctx) { - MpegEncContext *const s = avctx->priv_data; - if (s->mjpeg_ctx) { - av_freep(&s->mjpeg_ctx->huff_buffer); - av_freep(&s->mjpeg_ctx); - } + MJPEGEncContext *const mjpeg = avctx->priv_data; + av_freep(&mjpeg->mjpeg.huff_buffer); ff_mpv_encode_end(avctx); return 0; } @@ -377,7 +380,7 @@ 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 MJpegEncContext that contains the JPEG buffer. + * @param s The MpegEncContext that contains the JPEG buffer. * @param block The block. * @param n The block's index or number. */ @@ -618,7 +621,7 @@ const AVCodec ff_mjpeg_encoder = { .long_name = NULL_IF_CONFIG_SMALL("MJPEG (Motion JPEG)"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_MJPEG, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MJPEGEncContext), .init = ff_mpv_encode_init, .encode2 = ff_mpv_encode_picture, .close = mjpeg_encode_close, @@ -647,7 +650,7 @@ const AVCodec ff_amv_encoder = { .long_name = NULL_IF_CONFIG_SMALL("AMV Video"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_AMV, - .priv_data_size = sizeof(MpegEncContext), + .priv_data_size = sizeof(MJPEGEncContext), .init = ff_mpv_encode_init, .encode2 = amv_encode_picture, .close = mjpeg_encode_close, diff --git a/libavcodec/mjpegenc_common.c b/libavcodec/mjpegenc_common.c index c1b842d547..0c6a98c394 100644 --- a/libavcodec/mjpegenc_common.c +++ b/libavcodec/mjpegenc_common.c @@ -323,7 +323,7 @@ void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, end: if (!lossless) { MpegEncContext *s = avctx->priv_data; - av_assert0(avctx->codec->priv_data_size == sizeof(MpegEncContext)); + av_assert0(avctx->codec->priv_data_size > sizeof(MpegEncContext)); s->esc_pos = put_bytes_count(pb, 0); for(i=1; islice_context_count; i++)