From patchwork Tue Mar 15 20:06:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 34773 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:3486:0:0:0:0 with SMTP id ek6csp3314644nkb; Tue, 15 Mar 2022 13:07:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxF9HJ12Zk+mqjJVMx9j8fuMQ+qmpKsP+QD/Vxv9tVovrUbG3mVCXO3l53eYLB5RfHfekV9 X-Received: by 2002:a17:907:94ca:b0:6da:b785:f067 with SMTP id dn10-20020a17090794ca00b006dab785f067mr23667643ejc.654.1647374871946; Tue, 15 Mar 2022 13:07:51 -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 z13-20020a1709060acd00b006d6e5846a2csi11048425ejf.740.2022.03.15.13.07.51; Tue, 15 Mar 2022 13:07:51 -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=O7IePCQm; 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 CA8B068B02F; Tue, 15 Mar 2022 22:06:41 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-oln040092065019.outbound.protection.outlook.com [40.92.65.19]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4F92E68AFB7 for ; Tue, 15 Mar 2022 22:06:38 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NcFlDmhYbkzi5AShAp+AU1vMcER9Ma56hlqMSWwR6kFSLIE+1R8Qz4dKzC6zs+kq6GwzfoLyEQb7EX77t9vYeP4+14yiYIUjFFAPYV8Fo+RMOhXyKYNxlvt1rk8XRgMdUN9ytFPezZ0W5WBcJjpxEUnBlEBkHcXZZoxMjYbXZDoIH959L75jbV2AX5s455YpibEvbKhUQEkUAipxYAutRA74psUf5sC4irSPTdrsoZoo7iRSs3CJAyNvzscdy99c6bHpyUL1xKRft4moyk5CnrSDHAwyyKToKoCBGyjzvLR5xkZxljXa3Q6hfq7RMq6+1kIKKDOt0zsD4OvYOuuIug== 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=Tovf29PZH54bRGDSHGop79i/wLQOXEZvc629gxw79ks=; b=Q611fS68A1WHQSborotvI+8wMBbzVR+dhZE7av8xz9HhdFNqgp414h9N74kEYVrUEhqpqVUAGcRi4p+dVFMseIRC6xKA8pJq5UjcS0Mg8ldP90anWbBDtWlOBv4W0oNeEGxKyw7bJToge3iOe+SUpv8tERKk0rTTo0z1V2gbdJFGjwlj2YPJsqiGaPGnkKWlPSiemLsocjgKq5YNiF69dbgj9iNP/6g9LRrhCVzW+RjGmLpjhMdTQZmTCgu27u6vKCLONvufLmQlOm6ttna3zJplngiIiVdbzYet8irGDbY7XiepX7p8DJ+RdrmKRmRrdBdCYpM5KPw1BDsA/bYpsw== 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=Tovf29PZH54bRGDSHGop79i/wLQOXEZvc629gxw79ks=; b=O7IePCQmBdNRkKQzmxNRO1KuYlPer3rt21bHHDRIzfqiI8pbOOOT4E12Z8yipuiUJOTp0LxRlHNMwLNmXm9yaS5WkhKlvH8kvbM2Tybbppf/gtIeGbTpg0FQbCCNiUwo/0O0LGkpoIx/ejJX6buyiKaJi0Z6XuRnAihf2omNO0XCuKyv4LHjMSfghYzwydL8WjumE2aW5CmWy6yFuD5Fcl74pzqRw27NeE2juJ4xL48RdVLUlF68KSpVDifkSYR1yYXdEAzMUuv7M56c0Z4oa6hMnZFx4Mx9wMX5+HvsrBEYceHtLhDfY4rlveFs1l/Oci5FeCCotarNCzOq2aU7rw== Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) by PR3PR01MB7035.eurprd01.prod.exchangelabs.com (2603:10a6:102:7b::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.14; Tue, 15 Mar 2022 20:06:37 +0000 Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8]) by AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8%4]) with mapi id 15.20.5061.028; Tue, 15 Mar 2022 20:06:37 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 15 Mar 2022 21:06:01 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [ke6S28SpEWVtCqpzQguvANjfoJEDe6ux] X-ClientProxiedBy: AM5PR0202CA0004.eurprd02.prod.outlook.com (2603:10a6:203:69::14) To AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) X-Microsoft-Original-Message-ID: <20220315200611.553534-10-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d83e1fe9-7c8a-4646-42ad-08da06bf4f80 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQIK6GOv6I/5+ncmNhpuEjVYEcJTRMIz9km4xOIWgzTGWQ37twoh0LGbgZXQMmynEfCcc+8+3cHxLtTqy1VgmXNSnRUk/sC/Ld/CfpSI9oqPp5774Yf79L7apEXkvlqliecXBiJDSMc5Io4x7ebGYpWNFBy58FpXCqu/UNr7q4m7qKZA8Dv18KpU/JbzljMcgEq92UIqiOlzQ/pgjUKrdvShrXTmItZNxxk0B8QJezCH0TT01frp5g6YHPCnxpLqSOSqgsHQNKjIzKoXRBT7NT5DEfRyaNJgBQAcHOTBRlvq1q0bfNXsm86GJxeLLcgUw16i9xnNmnBc7HLRxwq1LzfSz4MtCfjYCQT6A/N2Uu5MunKgClKAVIEG7Ir+GbyBXXV+FmWGhxqQew2Z+Fb1tItcr0/QC3lWHNMmJ92oacWjBhZq2gLuXdYmNUownmpZ64Rstw+jn/I4lxzKN8yuFKyWPcIJHWZ6eLkEV61PM9HUnupElcsUi2BdwfdYVyLQ1calme3gHTwlWRuQsAjY10JOdOBRNIxCbK9r3n+gkev+DZbKy45ZNcxp3DK9G6zLxz7hs0KuVB0G3ylEdIzapZxsvCjo5hdVLVe583oyaSewpty9dJY75aFijq2ANMpEC/z0Qusp3oW/ip4L98WdUMMeeJjZc5d13HI7FIZBoPs79qetdurdgS/AcrY910FNwXRT9qMATStkw9wRRtvy3rU1cfv4JfGBV+58+bv1a9F37ynJZfkFf9APl3Y91Bzyz4= X-MS-TrafficTypeDiagnostic: PR3PR01MB7035:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: skeuz32kV6HzcH9eoX1JwrsSASDho3wzmiuQmjyUWreZte8uqK/JrxOZGzn4+vIIPrKMkkU1mZlj+GPywn0JnjoLHhVsss37dwvVnNwUgTkCVVuQ/kgRiQ6cNGlVvZqI+WdlmDiOiGTh1liB9E0sJ8FUPWETLKJAhH27j4EmACdQ6GGlRWHa3OJB8E9YRP4gWabhPO1GjzlxbEvgVZgeBAKJi6vkuaVI0eL8WkbmsmBoEyxrqZGKc0F5eK314ihhvnf3O3Vz3PbY6Rqvz43RAXKeHgLL2t1nUdAM+4dGoMmxBM+A1MzOBzQOqqJAov9ImRJDW+vJRCojZt+rRxkFvPEQmY33E/tJrbbyNILQ5uluDlPrSsn1o3DP0AH+5FZMVzRp1w1xBG0X1ucl/kisWv1K3KxkC9KiNFBFpFmU5mm+1LU7ey3Ugsx9AybMPr/uf6cMO2sRozGvGaR8wQmgUs2pGzasrTXMws0UpfgHQNfw+aKiznpdK8yXw6y6LASeXZ0oY8tndAVxFUmeH3zFn6483dsPEqilflw9E/Yll+skQw9kzGoAoQ/w6zq5ULvM/MH4c97TqfKq5/LP7swCng== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xyIA75W1Y1E8i1dZpUPPDZKSEzuPhoDLQIF52Rb586z3UxUJFz5Tma8sW62LWC1jM1aTgUAH3CrCTSx6vcNKrn3ik+J0/IH8uDGCjoF6BOXDq0ChzgM9K/Bt9ZEyA5GQQFVoKVLHbFNXel8i4jbHU/tEkwRJCk0ZlW5566OlNyL6QLzAal7djMZY+Upx67mtXDprrbwhJVIBnd+LBH5fJkDBVhFgZzZ13kE829SJK/GEs4n6cg1Xz2u8k1O0AVQmJOpLBilJOhGGkAdf6fDH+t91Aw+jhTdrXypMFRpZMGLSOI6UQ2dJVKwJJjRmAv3oh+InTHkTgd4qDnTRZbrNpF+piNAQwDIgIWpYrH8lNG8Cf0VModRR7T/FF8gJ8hcbdaw7YDUdhQp+Hyuv4755UKZp1q8qAgITPcZKVbPuGoFkM5McURQrULMLhRvbQaeQdly/dLB7phXOiCiNtKX/rwFQ77gDAlQ15mcfz/tro0CZiHZuD80kgP9EgCkByV69x+GLnQ7kFmkYSOILRHLliah0v+PqMZXUyPGNHxXnS/D4OMoaqShlbPEqXbZPOyEwfmRQXj5jlHiEayZMz5PlGKYhGVEzpXKdoTt+ngKCbhCsaBpbJblFrUuBrcQfeYjmpzBaULY6y0nz8OYISVqDl0eduysJd1qcBXW4xASps+n/WEweW2gdojAMyqz4fMXqj+2eBl8xtsn266RdbOyDvT4r7UV5TqDIAdrfXZolZAWi+Ok3+0gxrpbwMqAUcELbvXcjt2OVsBA+qq2t3ItaQ1crByoruCDB9HD9Eymw8Bojt3IFEFAIxigrvoYg4J3Cff+hOezSBjsw1vtgY2P3zCa9FDUClNldzl7MFix06poq6PQxrh108bKdPQQRe6K6yNGJxsxSdpIms48GthvqeRuFGVN5u1NHg30yQwVI/UPvfoViJ8bdJd5Y2XkUjyKtOS1En8WeFWKDAl14MS6l5kH6vemJZ8UxmaWxlJNepjeBgZn4S5zE59EjIFi7MhhMavHKXjfOlkPE9NpifJy3puzR79BaHLXCuJzqwJZtZ6yawOZFP8tq5qEcUnMfNfaCYfq/InIplVxRDGZgNwNFpOfOz/GspPjby1K/IwYy/poXl8CS7WTb3pCuLf4xIlsyERwRJe2MM41pXGwt9pz8rUYuqFG9BVItORE4EjJP3go= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d83e1fe9-7c8a-4646-42ad-08da06bf4f80 X-MS-Exchange-CrossTenant-AuthSource: AS1PR01MB9564.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Mar 2022 20:06:37.3214 (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: PR3PR01MB7035 Subject: [FFmpeg-devel] [PATCH 11/21] avcodec/lcldec: Use ff_inflate_init/end(), cleanup generically 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: 3t1NsreL5WD4 Returns better error messages in case of error and deduplicates the inflateInit() code and also allows to cleanup generically in case of errors as it is save to call ff_inflate_end() if ff_inflate_init() has not been called successfully. Signed-off-by: Andreas Rheinhardt --- configure | 2 +- libavcodec/lcldec.c | 43 +++++++++++++++++-------------------------- 2 files changed, 18 insertions(+), 27 deletions(-) diff --git a/configure b/configure index c79908c1bd..c56b7ba85b 100755 --- a/configure +++ b/configure @@ -2990,7 +2990,7 @@ xma1_decoder_select="wmapro_decoder" xma2_decoder_select="wmapro_decoder" ylc_decoder_select="bswapdsp" zerocodec_decoder_select="inflate_wrapper" -zlib_decoder_deps="zlib" +zlib_decoder_select="inflate_wrapper" zlib_encoder_deps="zlib" zmbv_decoder_select="inflate_wrapper" zmbv_encoder_deps="zlib" diff --git a/libavcodec/lcldec.c b/libavcodec/lcldec.c index f3b7a8ac1b..8a66065800 100644 --- a/libavcodec/lcldec.c +++ b/libavcodec/lcldec.c @@ -49,6 +49,7 @@ #include "thread.h" #if CONFIG_ZLIB_DECODER +#include "zlib_wrapper.h" #include #endif @@ -64,7 +65,7 @@ typedef struct LclDecContext { // Decompression buffer unsigned char* decomp_buf; #if CONFIG_ZLIB_DECODER - z_stream zstream; + FFZStream zstream; #endif } LclDecContext; @@ -131,26 +132,27 @@ static unsigned int mszh_decomp(const unsigned char * srcptr, int srclen, unsign static int zlib_decomp(AVCodecContext *avctx, const uint8_t *src, int src_len, int offset, int expected) { LclDecContext *c = avctx->priv_data; - int zret = inflateReset(&c->zstream); + z_stream *const zstream = &c->zstream.zstream; + int zret = inflateReset(zstream); if (zret != Z_OK) { av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", zret); return AVERROR_UNKNOWN; } - c->zstream.next_in = src; - c->zstream.avail_in = src_len; - c->zstream.next_out = c->decomp_buf + offset; - c->zstream.avail_out = c->decomp_size - offset; - zret = inflate(&c->zstream, Z_FINISH); + zstream->next_in = src; + zstream->avail_in = src_len; + zstream->next_out = c->decomp_buf + offset; + zstream->avail_out = c->decomp_size - offset; + zret = inflate(zstream, Z_FINISH); if (zret != Z_OK && zret != Z_STREAM_END) { av_log(avctx, AV_LOG_ERROR, "Inflate error: %d\n", zret); return AVERROR_UNKNOWN; } - if (expected != (unsigned int)c->zstream.total_out) { + if (expected != (unsigned int)zstream->total_out) { av_log(avctx, AV_LOG_ERROR, "Decoded size differs (%d != %lu)\n", - expected, c->zstream.total_out); + expected, zstream->total_out); return AVERROR_UNKNOWN; } - return c->zstream.total_out; + return zstream->total_out; } #endif @@ -606,18 +608,8 @@ static av_cold int decode_init(AVCodecContext *avctx) /* If needed init zlib */ #if CONFIG_ZLIB_DECODER - if (avctx->codec_id == AV_CODEC_ID_ZLIB) { - int zret; - c->zstream.zalloc = Z_NULL; - c->zstream.zfree = Z_NULL; - c->zstream.opaque = Z_NULL; - zret = inflateInit(&c->zstream); - if (zret != Z_OK) { - av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret); - av_freep(&c->decomp_buf); - return AVERROR_UNKNOWN; - } - } + if (avctx->codec_id == AV_CODEC_ID_ZLIB) + return ff_inflate_init(&c->zstream, avctx); #endif return 0; @@ -629,8 +621,7 @@ static av_cold int decode_end(AVCodecContext *avctx) av_freep(&c->decomp_buf); #if CONFIG_ZLIB_DECODER - if (avctx->codec_id == AV_CODEC_ID_ZLIB) - inflateEnd(&c->zstream); + ff_inflate_end(&c->zstream); #endif return 0; @@ -647,7 +638,7 @@ const AVCodec ff_mszh_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, - .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, }; #endif @@ -662,6 +653,6 @@ const AVCodec ff_zlib_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, - .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, }; #endif