From patchwork Tue Mar 15 20:05:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 34774 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:3486:0:0:0:0 with SMTP id ek6csp3314742nkb; Tue, 15 Mar 2022 13:08:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyjv7IZqTviH+k2ZqlKkCuL+OJPmt1aOfccaNXzO6moCKrqfOZbm6Mh9nVB68SVu8HAceDE X-Received: by 2002:a17:907:6e17:b0:6da:83a3:c27a with SMTP id sd23-20020a1709076e1700b006da83a3c27amr23406535ejc.415.1647374881740; Tue, 15 Mar 2022 13:08:01 -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 t13-20020a056402524d00b004166306f239si32670edd.198.2022.03.15.13.08.01; Tue, 15 Mar 2022 13:08:01 -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=gXj3XgSh; 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 BE38E68B0A2; Tue, 15 Mar 2022 22:06:42 +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 1D88E68B083 for ; Tue, 15 Mar 2022 22:06:35 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fClM+99NBx4MH/D6v5fEt7W49GTj/k1HgJuIA2VYjaAu4i/Y1XjfXQT/kYt0vJf+94bk13rFsSN1YfF0M8ie8xSEwNoykBloNM8EX9DebNuqXLgqh7zeCP7Yd5xTA/ymNRVz0mOMYdAWp0ciLbdx0sNlZgkZUVFuhFjCmuH+eamw1G48u9lOkohHV7RwoMj7JV5H8JpP4VzUs9PsAYHKEhlI/GZPN7mplL+GpNVDRIxfTtekm9vRwKHfEhpENZRH9pLJSIBu4ILNdHLMf5yiumzk/Reix8KXZj5rUq1Y9GR9nfEikyIzJrZE1zYjILF+rzGBF577iQjH4tVYZ3dgHA== 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=ijZfBTcmr04M8xvmJKQUFl66/2mDRH3C1G2C+DGpfDU=; b=jiE2v8bFVg/puvvs2Jor5GA3yeoXBwHHMEKX3BZS7aRNCdNEk3HL9ONsUuKsv6/Q46NL/2FvjFzsVC4tN52mtVDu2agiub1J/RTKdv0XexR0Bi5vRnXCxopKYPriQxV4zX88r4OjOLacwWb+/ihTGV9uM6ir/lGWfg9TDvdnrDSnEVsYQExGEo55MZ+sqg6bOovNH/KcVuDzqzCVps7GIqFvrx3nJfO3DnHCuwU1HsibDJTy0qjhZStRzBw8AFeDiLnZWlgfYyUgB5iHj7ccmg9ByXAw1464NBo2CRNoqavvCMQnxFeSHQoUt3mP0SWvil0yW36AUy4bJSMxriWezg== 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=ijZfBTcmr04M8xvmJKQUFl66/2mDRH3C1G2C+DGpfDU=; b=gXj3XgShIXSBK+9DyawbDv+7+DuwP7VMDFUCsX15cfWSom5nPeHapuanmiiyZa3YEhYIH59NX3DR4uFB1Urxpp2a+Y1NtzaOHoeP9GunH4cFQJCJENYZPWgW+bdQgFCMWmjJDA67odZb0cByE5pQaCJTZ2NQzNEYFPdIpWcFSXwhF6DJcQm0ZDV+uadWZitYZ4Od7rvHjQWpzJUujBSYP3NymtdtHl2rDqL1WX1pkLvTkhJXVdOeiTjyuB6Vz22tDpFl/mETSkQ1J9rqWzX48W02YFHagdXqNn5zP+SZvUTt+FBJnAq0UMCY6vxWbu32VHbt7Mk9Zo9ejFG+neJ+Cg== Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) by PA4PR01MB8947.eurprd01.prod.exchangelabs.com (2603:10a6:102:2a6::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5061.26; Tue, 15 Mar 2022 20:06:28 +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:28 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 15 Mar 2022 21:05:55 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [fYt+sNyJmdIHEkZNOrNgmMTO6hFgOaAO] 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-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1ff06bb8-80e4-4397-c1ca-08da06bf4a35 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQIK6GOv6I/5+ncmNhpuEjVDy4rDU/3HqsNTIAxbwtq2AAc6GgdaCnwdnRbaRK7MnBLrMYUtg5BnFRo9fNs3jcy6SIvfv5CTs6iBzX/TFI44kcyrF4NR3aEQJTZDUQvfEvQBJx9RlPSV/G3ynTsjXh9phncmFw0+kZaGkkvA2u7aNpI3tiqYEpsbW/L6Y6w1y9/jMLenRG7fOblHCTd5kCIkC5cLyU1uUP+Sn/PARhnA7gU8opoZLRQw7tE8RnChP0LdsFDadQ7y1pT//XUwr20tAstHn0qP9bXD4yVVNeUw2eliEjvTSRX/Y/89x1JNlOX/dZTuqssQPKl73wvTXyTS+zIktUoIj8rp0kDw1Ynx8DdJDuf6v8pPryEJFJPkOdiSMW9cIYTaRP/y/wiHDBRIVEkOc0bu9f+W7up29Sh+U6mFg+iWH1Q+zNudewRb0Tr4qeDpG2OEEeDBV92BdbYyxrlGrjR07Xgsi87LpwW2ryGeh+Bo0vAsAQHOptcF+aQlPBmtJYcgo6dmcUzhtB7nx9zqqfIokGsMAX0MsqBvOLLTShr1susQwhiCes9qF3T5LtsZFLbV0vbVVB0WiWn9xX+NmIAqbKfa0Oqyx0MCSuzyAszwF7OZgglfWSdS9PL0F+rPyAXwFbfzcXUkPg1ytAcyIA679zA2wGhUBzO+x7jaZylOhGG/OWIwlUJUxhAXkTJTEVn8k2i9U6DF3RL7Yms9Wwy2lvOrFfdC+NswZ9VimrshwC6mFmkoIH4so8= X-MS-TrafficTypeDiagnostic: PA4PR01MB8947:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4BV4IJnAlg2dNz9YUogHyrVYXpQBeB3jNDWB3gg6zzA59TR2w7zygBnPhaf0eoIK3onZ4P4sE3pZPN6N3RvC/A2SfDhToQeOfWqz4iT8e1I/yvRJv3q6G80DiGXxMGzTQpsLXtpO27Y0TITuGYHw+lFxdWH9DCy5sb4XRFrgx1dXo1dcie+/NvrC88K2X3jdxcEKb9gJB6SHzlUyckmQtBfHMR/R0f4SyPmY0rpmgxR8/+M6RkKhXpOp6ypzUX1UFBdWdcUa684k7B8E+4guL6pHm0lgEki7paDLfLV9BD17OYFzzzNpgNxMq6h2Z59g/aZEjnIiJq9eEc5KDhi6VdWa2IorOhI6ajYy+vxTz38+HVv95Fx+NSfAFhD/cElhmNQwiRDrjTR80tEH5GLBCiIhs14m17TONwTqtNrBvXHT6C89JpAANAaiD5lwoIk0jTYSZP4F37sWjjU/Us958a3GXOFTzYarqF1fGdqJNBsOfpWSdONg/i6Oh04B7NChyv/Px2LW39iCbdBztI7tjupp23khGY1IdT+Hc84CrWX5zNKPHzMLblGMCKgEK1NMtJmsKq8PdA+hhtD5SPCeFA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8KfXTC8Qa9NKy3IcRKep79shdNYpV0tiOd9egUKC2fW9eBwQqGJGOw6fzZ4ANL7Ef9O36spmMC9hssGUXXv8bOwti+IyaD682A9FbMfkCYOvCdx9L1/z7PU9bY217vkbZ+izG4vC2bItOKt5KZEID7U+lWn7LDWCXMXcwhCvOPu1PTEtqbQ4akvOsiG838roJHKcS5A4YUPGktDJOCkFY+sl7eu5l7teTUttuwAxGLGYDtCTzGW0fQxCKuDRHEb7Bah94qlVNnGnomYQbMOFXptPwb/6/9CFYAdRC12rMyuUcYz7z/1yNeAzbfG9rSrpZB8h6Uods2ghNkkk4iN3m0VHX2gb4QI5xtLb+BmA0PuoCf64qawpGGYJvcPdKgBYsypoIVfIUeEAqi89iVObBcr7QS2evapmkybSxN/G/HxfQrzxVPimA0tEoDtkmfcnlLxnb13lArhWrZuYFS5TswVU5ViTGHHEm26zSkmnYzjXhBoDFL7ePi5vx1vF3qa6P/oQO1q5MyK5s/kok4gj+danM3e/hRf+mzfIbh7uaJEo6aSkmAzqX1oE4uC+EKwzE0juLruzNuUOhvIsiA499SdUTDHdXCI0cKggeCy3p9haQ4q7RRZcocogRNs1Xu82EJmzOw0a6SDXdotv+FWxE1vx5RcKl3Srrgllb6H44ZXDpW4FvkBjRB8nwYvSmgDqx11ii4Bv9webNKVP31ppl2l0T/mRMWsAHzYERTkrRA0ugLNK5KHC2m1qExU17RfmTeZzSkGTtuiIGIOxG2rtvk8P/xQN8KqEyxsDWNtOVoXdrjgactH5BYce9rkStAmAnPusL0AtCaGl5yCPrzK3SMHicfGUc1undSAMxbpUhATdBvYs1Y0Sbk5W6yO2/6IGDigw9rYwivHeHEMBG/xhZu4ziNkoRp+MjLbEuX5L5OBLCVP/IvZoTtE3YOBlGno8HB43xFEwuv7w+JNE60gNM/s9YIEji2uoiPYOM5Q0BqZ8XjNk7KltbcFn3NrmsRdJSX7FcNL3UAYkv1L2xxI1Obsx6GirtudpphtNqUyOF0YgR8kFXBUEjdcSeTLshKQ9SoJcprLPfCUzLZpsjCN0jJ9TBnYFPYhNPMLqAu0dbH4vqv0296V2Fj7vr1ym9hJ4KN+fV9fnqdQhC7IA8ItB0DgbXdMHbePii0KyR0ixpkE= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ff06bb8-80e4-4397-c1ca-08da06bf4a35 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:28.1934 (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: PA4PR01MB8947 Subject: [FFmpeg-devel] [PATCH 05/21] avcodec/wcmv: Use ff_inflate_init/end() 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: DfF0GXVAq7j4 This fixes the problem of potentially closing a z_stream that has never been successfully initialized. Signed-off-by: Andreas Rheinhardt --- configure | 2 +- libavcodec/wcmv.c | 46 +++++++++++++++++++--------------------------- 2 files changed, 20 insertions(+), 28 deletions(-) diff --git a/configure b/configure index 7c87548359..fdc3f3d28c 100755 --- a/configure +++ b/configure @@ -2972,7 +2972,7 @@ vp6f_decoder_select="vp6_decoder" vp7_decoder_select="h264pred videodsp vp8dsp" vp8_decoder_select="h264pred videodsp vp8dsp" vp9_decoder_select="videodsp vp9_parser vp9_superframe_split_bsf" -wcmv_decoder_deps="zlib" +wcmv_decoder_select="inflate_wrapper" webp_decoder_select="vp8_decoder exif" wmalossless_decoder_select="llauddsp" wmapro_decoder_select="mdct sinewin wma_freqs" diff --git a/libavcodec/wcmv.c b/libavcodec/wcmv.c index 04c597e767..d98d2d52cf 100644 --- a/libavcodec/wcmv.c +++ b/libavcodec/wcmv.c @@ -29,12 +29,13 @@ #include "avcodec.h" #include "bytestream.h" #include "internal.h" +#include "zlib_wrapper.h" #include typedef struct WCMVContext { int bpp; - z_stream zstream; + FFZStream zstream; AVFrame *prev_frame; uint8_t block_data[65536*8]; } WCMVContext; @@ -44,12 +45,13 @@ static int decode_frame(AVCodecContext *avctx, AVPacket *avpkt) { WCMVContext *s = avctx->priv_data; + z_stream *const zstream = &s->zstream.zstream; AVFrame *frame = data; int skip, blocks, zret, ret, intra = 0, flags = 0, bpp = s->bpp; GetByteContext gb; uint8_t *dst; - ret = inflateReset(&s->zstream); + ret = inflateReset(zstream); if (ret != Z_OK) { av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", ret); return AVERROR_EXTERNAL; @@ -78,19 +80,19 @@ static int decode_frame(AVCodecContext *avctx, if (size > avpkt->size - skip) return AVERROR_INVALIDDATA; - s->zstream.next_in = avpkt->data + skip; - s->zstream.avail_in = size; - s->zstream.next_out = s->block_data; - s->zstream.avail_out = sizeof(s->block_data); + zstream->next_in = avpkt->data + skip; + zstream->avail_in = size; + zstream->next_out = s->block_data; + zstream->avail_out = sizeof(s->block_data); - zret = inflate(&s->zstream, Z_FINISH); + zret = inflate(zstream, Z_FINISH); if (zret != Z_STREAM_END) { av_log(avctx, AV_LOG_ERROR, "Inflate failed with return code: %d.\n", zret); return AVERROR_INVALIDDATA; } - ret = inflateReset(&s->zstream); + ret = inflateReset(zstream); if (ret != Z_OK) { av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", ret); return AVERROR_EXTERNAL; @@ -119,8 +121,8 @@ static int decode_frame(AVCodecContext *avctx, skip = bytestream2_tell(&gb); - s->zstream.next_in = avpkt->data + skip; - s->zstream.avail_in = avpkt->size - skip; + zstream->next_in = avpkt->data + skip; + zstream->avail_in = avpkt->size - skip; bytestream2_init(&gb, s->block_data, blocks * 8); } else if (blocks) { @@ -148,8 +150,8 @@ static int decode_frame(AVCodecContext *avctx, skip = bytestream2_tell(&gb); - s->zstream.next_in = avpkt->data + skip; - s->zstream.avail_in = avpkt->size - skip; + zstream->next_in = avpkt->data + skip; + zstream->avail_in = avpkt->size - skip; bytestream2_seek(&gb, 2, SEEK_SET); } @@ -182,10 +184,10 @@ static int decode_frame(AVCodecContext *avctx, dst = s->prev_frame->data[0] + (avctx->height - y - 1) * s->prev_frame->linesize[0] + x * bpp; for (int i = 0; i < h; i++) { - s->zstream.next_out = dst; - s->zstream.avail_out = w * bpp; + zstream->next_out = dst; + zstream->avail_out = w * bpp; - zret = inflate(&s->zstream, Z_SYNC_FLUSH); + zret = inflate(zstream, Z_SYNC_FLUSH); if (zret != Z_OK && zret != Z_STREAM_END) { av_log(avctx, AV_LOG_ERROR, "Inflate failed with return code: %d.\n", zret); @@ -210,7 +212,6 @@ static int decode_frame(AVCodecContext *avctx, static av_cold int decode_init(AVCodecContext *avctx) { WCMVContext *s = avctx->priv_data; - int zret; switch (avctx->bits_per_coded_sample) { case 16: avctx->pix_fmt = AV_PIX_FMT_RGB565LE; break; @@ -223,20 +224,11 @@ static av_cold int decode_init(AVCodecContext *avctx) s->bpp = avctx->bits_per_coded_sample >> 3; - s->zstream.zalloc = Z_NULL; - s->zstream.zfree = Z_NULL; - s->zstream.opaque = Z_NULL; - zret = inflateInit(&s->zstream); - if (zret != Z_OK) { - av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret); - return AVERROR_EXTERNAL; - } - s->prev_frame = av_frame_alloc(); if (!s->prev_frame) return AVERROR(ENOMEM); - return 0; + return ff_inflate_init(&s->zstream, avctx); } static av_cold int decode_close(AVCodecContext *avctx) @@ -244,7 +236,7 @@ static av_cold int decode_close(AVCodecContext *avctx) WCMVContext *s = avctx->priv_data; av_frame_free(&s->prev_frame); - inflateEnd(&s->zstream); + ff_inflate_end(&s->zstream); return 0; }