From patchwork Thu Apr 29 23:56:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 27532 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:49c5:0:0:0:0:0 with SMTP id w188csp1903159yba; Thu, 29 Apr 2021 17:01:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyzBnW8KlBcGNJQ9C+Bh/3LOIx4D0fMg22YLAYPhUJFboF7HyTI0+5b/8m89lcmi1OvaYGt X-Received: by 2002:a17:906:a44d:: with SMTP id cb13mr334824ejb.107.1619740872770; Thu, 29 Apr 2021 17:01:12 -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 bz20si1682087ejc.70.2021.04.29.17.01.12; Thu, 29 Apr 2021 17:01:12 -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=aMvHMqqh; 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 550FA68A3AF; Fri, 30 Apr 2021 02:59:31 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR06-DB8-obe.outbound.protection.outlook.com (mail-db8eur06olkn2047.outbound.protection.outlook.com [40.92.51.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 657D168A375 for ; Fri, 30 Apr 2021 02:59:29 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N22FR3NzPws9niVVsVh6K9zrXUPmT0q9Im8X/6KNHgUIFzF6POBXQdo0+U4ow7TCH2xITwdlGl68DSyh75GZgLA5kdqaMOCbZ6XOAYC2BIMJFHokcCQ7UP8vmj2JbO41vpltpZm7I/g84eKprjBKzaihxKa6zQgeaNksY93rterX3Kr2UPg5eYrOOIxTB6vJRS5zrrP5QqrY3j5leJ6k+q7wV2XaVFs9LYghMI2V3mEZwh2r3TD50I5cGihr6paY+xPjgiSum237CIlNbGi3HLo2zBJPXlfo4DVNf18++bqbbZIWliDTK4rd3j5yOwcbTy0MwcD/USv5ONVzv4OGhg== 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-SenderADCheck; bh=R+OQCXB/VcVWCr/h/5zRjstrPxyYNNZZW1Qm1GX7R9Y=; b=WuYigZW8qI21KqZAYCKOVtAjoVH1ZG+Zzz63RpqQOU4TWtDre8StW44yFKieSlWsqk8/EnpKkcHLAkiYamYmJsMA5XeMnkraleYL4yrX/LZkwpZi5nczIYfWc5guAJ/9M2SUnTvbudx+OkNWWwok4ylUs2+TzBy3DrTQkX6adB1lBBHnN9K/PqlnEu8igZ/CiBuVk95/T4+ADInXNmjK4a+HHYN6hlS5FgscgAkAyahTI+CwiZDaT0yZM8DcQwv13MQCSShJa4J89xoB0+vWn6J5h4pAGiUAXpvXhD/LHRSUp1i+Ucv3dMkjmvBZCTk+njQuIT0fK1/ZWINy9SYVlw== 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=R+OQCXB/VcVWCr/h/5zRjstrPxyYNNZZW1Qm1GX7R9Y=; b=aMvHMqqhXHPs3EV68lg2sYzLabARATgyN9voMDQaaGFGPJXmIATGJzIhrHr32BnGKtcs5IUVPk+3jdhJmCf4tkqITiLNNrnxUONFf5/sA4zl08Tr2NhdTFaS6Z2iKhEm89dTu7rqBCIs0XVfcG5ujqh9Ho4MUFuOzi4i4nkZUnn5C/PkDq8cXo9u9KzUHcCY5l+QEvzXD7VUv69bSajuLWlr1B9IelPvcxZ0Dq37J6lQS5HtfIsTsXMzq76LciyjTieysHrx5guE1Rt6hJtcuyLzDzgRehBn+UeXSJamVy6AYd+8tM7mJPHh7WcGlD2EP7/mvh6X/5yT+mblImnHnQ== Received: from AM7EUR06FT055.eop-eur06.prod.protection.outlook.com (2a01:111:e400:fc36::45) by AM7EUR06HT063.eop-eur06.prod.protection.outlook.com (2a01:111:e400:fc36::222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.27; Thu, 29 Apr 2021 23:59:27 +0000 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com (2a01:111:e400:fc36::49) by AM7EUR06FT055.mail.protection.outlook.com (2a01:111:e400:fc36::61) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.27 via Frontend Transport; Thu, 29 Apr 2021 23:59:27 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:D73A943C8B7A0A971DB78EA395A51C5D8170CFDCB1DEB0EB654172828B262BD4; UpperCasedChecksum:832A6348A59F8A065CBD89213522F8DDEF0180BEFE293577506EE0C356A6CA39; SizeAsReceived:7602; Count:48 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::45bb:c44f:2b75:23b7]) by HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::45bb:c44f:2b75:23b7%5]) with mapi id 15.20.4065.027; Thu, 29 Apr 2021 23:59:27 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Apr 2021 01:56:54 +0200 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: X-TMN: [U0BnAxd+iLTQhCM7W3MbxInrY7NAunv4] X-ClientProxiedBy: ZR0P278CA0088.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:22::21) To HE1PR0301MB2154.eurprd03.prod.outlook.com (2603:10a6:3:2a::22) X-Microsoft-Original-Message-ID: <20210429235717.2067041-22-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.193.248.86) by ZR0P278CA0088.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:22::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.27 via Frontend Transport; Thu, 29 Apr 2021 23:59:27 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: f5585974-7aa6-49d6-6c5a-08d90b6ad273 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQnJqnaHo6w7XTEhYoMxTOU4wGPKUbhM4L2f118KPBbUMjOWbMTs6yGjuMugXcBQ74e734UH27wzxmo0IHFcgzqyJlGJMf84v2hgoHhY/vnbMpQRDpfKRqAseQr49ImwPib0nfgREre1PbIFUn2z9YqOMgwo8k73kKBoQYvr8GiJUuoKTUPnmz2ILROrXDs2rjOJ8fG89Ix/QzO7qVsMyFxC7NV2UEufstvey/SKBYgn1N5Efk/Z3g+xNOtQIjnr4XZQ/Kkk+byNqhacXH9NLPpCG1XIw4+gJEpFcK9z1wZhr0X/RT/pQwq+xeYURNijI59cJBOygsQuwi7wUZMml0LTehUhn8+yeWU1H0vLLbOsu1tkJthLTEgEyHIzNL5z/C+Cagp7g+FFuJZt5ruTH41lyr/K57lNbtbGkDcSITdhsNiMTuydMz6MLRH0ij0rp4NIUumf05jZc+XjkEd6zoviw/3z9EO/iAOI5ABxqVA7K1MB/kv/9B1FVLXfa8f4Pp4RWQIQwRllAaRCZ5Q+m1gjIRG8D8mFq0t+orpg3OCmjx25GCgKjaNxXTmtDm/kE6SLmZdxueAUnWWks5GX9jknl5tptme73Wx5OdkEVn1gLBuMrG6kxHTvku2ioyimWjBRySbPdJRIT9TKwW/uf/hS0g5yEz8qD6Knbz4Bd8nUNqrbPt81vuqP0zxD46omAhL5TPeZN64PWZ9Q7orsW2R+dwllvGqMikH2ftUJmjHwP2WI75sXl6XszQiffIydmY= X-MS-TrafficTypeDiagnostic: AM7EUR06HT063: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2tpNPmYV5ai3gpoS/Qh+7sKcS8ilw7ScSLbLu29okQpjvK72CVQMMCNJRAUEjAQaqWwgVzRFxMs5NP/rq3QNSZQvC2BmClKXJSHeYCid5hcmVEVejxBn4h2UPddLvHmKl/Ee7RZlvsMEzUtWeYlokfsrPb6SIvnPgdztfRc81gguDyhYpVMk5v1ZwGE5N/P7/P4MGiA3NxvL1xGb6cGnkPGDn8V93BfdV15UJPSQXNPPVSdru1c4RqB+5dT2F+qH+0+fqkDPqv4Hw8diawqmEuE+Z1GMKKHaUo4K3f4NJYJMYaKx1msYxlWQZPe25Je4g4Q98YVpBNTnfvG8/meYpM0sx5iuboveVBruGKV9X9QOSb12qhT+6jDW06ykVDQMolcxteY1A8BuLPsU/EQ9Gw== X-MS-Exchange-AntiSpam-MessageData: l7cevu9PZU4BgOrTEDWln2tlIIu+JIMtJo29yCYhR860y3huwTw0DpHC0UHLZ72Bf41v0EpEBym5CthG0EOwbr3/MjEXo1jHMZTl7O+8cX/i2RgP7s1tro+mk457XzZYzt+eCr5x12YZO3LEkZ4Sfw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f5585974-7aa6-49d6-6c5a-08d90b6ad273 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Apr 2021 23:59:27.6413 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: AM7EUR06FT055.eop-eur06.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7EUR06HT063 Subject: [FFmpeg-devel] [PATCH 23/46] avcodec/jpeglsenc: Allocate buffer with fixed size 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: aDVaQi/WaIrC Content-Length: 3505 Signed-off-by: Andreas Rheinhardt --- libavcodec/jpeglsenc.c | 46 ++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/libavcodec/jpeglsenc.c b/libavcodec/jpeglsenc.c index 15d9204b1d..17d46c0449 100644 --- a/libavcodec/jpeglsenc.c +++ b/libavcodec/jpeglsenc.c @@ -40,6 +40,10 @@ typedef struct JPEGLSContext { AVClass *class; int pred; + int comps; + + size_t size; + uint8_t *buf; } JPEGLSContext; static inline void put_marker_byteu(PutByteContext *pb, enum JpegMarker code) @@ -282,25 +286,18 @@ static int encode_picture_ls(AVCodecContext *avctx, AVPacket *pkt, int i, size, ret; int comps; - if (avctx->pix_fmt == AV_PIX_FMT_GRAY8 || - avctx->pix_fmt == AV_PIX_FMT_GRAY16) - comps = 1; - else - comps = 3; - - if ((ret = ff_alloc_packet2(avctx, pkt, avctx->width *avctx->height * comps * 4 + - AV_INPUT_BUFFER_MIN_SIZE, 0)) < 0) + if ((ret = ff_alloc_packet2(avctx, pkt, ctx->size, 0)) < 0) return ret; - last = av_malloc((unsigned)pkt->size + FFABS(p->linesize[0])); + last = av_mallocz(FFABS(p->linesize[0])); if (!last) return AVERROR(ENOMEM); - memset(last, 0, FFABS(p->linesize[0])); bytestream2_init_writer(&pb, pkt->data, pkt->size); - init_put_bits(&pb2, last + FFABS(p->linesize[0]), pkt->size); + init_put_bits(&pb2, ctx->buf, ctx->size); /* write our own JPEG header, can't use mjpeg_picture_header */ + comps = ctx->comps; put_marker_byteu(&pb, SOI); put_marker_byteu(&pb, SOF48); bytestream2_put_be16u(&pb, 8 + comps * 3); // header size depends on components @@ -415,10 +412,36 @@ static int encode_picture_ls(AVCodecContext *avctx, AVPacket *pkt, static av_cold int encode_jpegls_init(AVCodecContext *avctx) { + JPEGLSContext *ctx = avctx->priv_data; + size_t size; + if ((avctx->width | avctx->height) > UINT16_MAX) { av_log(avctx, AV_LOG_ERROR, "Dimensions exceeding 65535x65535\n"); return AVERROR(EINVAL); } + if (avctx->pix_fmt == AV_PIX_FMT_GRAY8 || + avctx->pix_fmt == AV_PIX_FMT_GRAY16) + ctx->comps = 1; + else + ctx->comps = 3; + size = AV_INPUT_BUFFER_MIN_SIZE; + /* INT_MAX due to PutBit-API. */ + if (avctx->width * (unsigned)avctx->height > (INT_MAX - size) / 4 / ctx->comps) + return AVERROR(ERANGE); + size += 4 * ctx->comps * avctx->width * avctx->height; + ctx->size = size; + ctx->buf = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!ctx->buf) + return AVERROR(ENOMEM); + + return 0; +} + +static av_cold int encode_jpegls_close(AVCodecContext *avctx) +{ + JPEGLSContext *ctx = avctx->priv_data; + + av_freep(&ctx->buf); return 0; } @@ -450,6 +473,7 @@ const AVCodec ff_jpegls_encoder = { .capabilities = AV_CODEC_CAP_FRAME_THREADS, .init = encode_jpegls_init, .encode2 = encode_picture_ls, + .close = encode_jpegls_close, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_BGR24, AV_PIX_FMT_RGB24, AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY16,