From patchwork Thu Oct 17 12:35:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 15815 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 763784473E6 for ; Thu, 17 Oct 2019 15:35:28 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4C14C68A988; Thu, 17 Oct 2019 15:35:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9E95B68A6D2 for ; Thu, 17 Oct 2019 15:35:22 +0300 (EEST) Received: by mail-wm1-f67.google.com with SMTP id v17so2353980wml.4 for ; Thu, 17 Oct 2019 05:35:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=JuuYk3AsQSgcFfUq1QtIXqzIPtw3zZO081OKM1xc39A=; b=Adc96ti1LwMiNZH9H/xIFaBS0JxduEdmjdM2NdUmCC+AVEqTjSWxoZrYrmkB2w9BIg Q02/5EjBMPhcTCzSSdlQGh1jtxu3PPFIq2q2RIS0kByRvjv061+dTel7r++3OHmP1E+D we2CPSnxrn0Jgl0q94O3tFJInoDCZxHF+WdjZF+6nisUanXMQaETVy6Zwg98SHoMOnLU QEEXhwY2SGfiZuNA0fTNOvyourv7zihSqhUXP7eXt5opCOhSm141zEnmwhDOhDNeNCkB 4HRFWk2lVRJ59p/HiU35CGiEzbCjycF4vSNTelZxUxYLnRwSXnr2JHNNXtOFm2A/bwZR cW9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=JuuYk3AsQSgcFfUq1QtIXqzIPtw3zZO081OKM1xc39A=; b=MFKQfaeYwbdvywspTDnkdbEfHZA4jmjgK/8qvx8e+owslV380fq1QWpSXxQB2KMZoF 1y8NOo/FtaVByJQVfiHHtlH0pGUXeAMbj/dn34/QxgSpNZxPXM5DHNc2DWMrCvBv81lc urkOnqeP978GtXI4IexSCNFJ3Hl3wsevSqaueoRGPnxYkBDkGlR8GrZ3PoUJDNB60zJI PUgoSo7AmZwLGti7XsdX+wDFVsE6y2YczVmE3FIQ4HX79HphfLaLgRfkuK2nrCPgR8SL PsBe1WS1Xb9AViiGsAo4i+zEhLQrB2KYItxovM/7YmN0h1UQkEozpCotRsB88B5x4AQ4 A1gg== X-Gm-Message-State: APjAAAVNgOC9Wx3gW8rmmrhwYtpa/8Bw2bjwwMTYyeso0HvrIcc4jjGt OxMegzMXXS7AxD2+nAUK8Mlx2/nm X-Google-Smtp-Source: APXvYqy0u7QbW7AHtx4rt1Fat2USQLpUwkJaesVFgFnR4tGQ1n5tdEzMJT8zaFBP/vNG8CmBRIusWA== X-Received: by 2002:a7b:cd87:: with SMTP id y7mr2801443wmj.93.1571315721748; Thu, 17 Oct 2019 05:35:21 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc08937.dynamic.kabel-deutschland.de. [188.192.137.55]) by smtp.gmail.com with ESMTPSA id v7sm2014572wrr.4.2019.10.17.05.35.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Oct 2019 05:35:20 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 17 Oct 2019 14:35:14 +0200 Message-Id: <20191017123514.18890-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/zmbv: Call decode_intra directly X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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" zmbv has only one function for decoding intra frames, namely decode_intra; and yet up until now it has been called via a function pointer. This has been changed. This also removes spec-incompliant conversions between function pointers and pointers of type void * and thereby fixes the warning "ISO C forbids assignment between function pointer and ‘void *’" that GCC emits with the -pedantic option. Signed-off-by: Andreas Rheinhardt --- This patch replaces [1] according to a suggestion by Tomas. [1]: https://ffmpeg.org/pipermail/ffmpeg-devel/2019-October/251083.html libavcodec/zmbv.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/libavcodec/zmbv.c b/libavcodec/zmbv.c index 99e735cfd9..02599bf03d 100644 --- a/libavcodec/zmbv.c +++ b/libavcodec/zmbv.c @@ -69,8 +69,8 @@ typedef struct ZmbvContext { int stride; int bw, bh, bx, by; int decomp_len; + int got_keyframe; z_stream zstream; - int (*decode_intra)(struct ZmbvContext *c); int (*decode_xor)(struct ZmbvContext *c); } ZmbvContext; @@ -425,8 +425,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac c->flags = buf[0]; buf++; len--; if (c->flags & ZMBV_KEYFRAME) { - void *decode_intra = NULL; - c->decode_intra= NULL; + c->got_keyframe = 0; if (len < 6) return AVERROR_INVALIDDATA; @@ -436,7 +435,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac c->fmt = buf[3]; c->bw = buf[4]; c->bh = buf[5]; - c->decode_intra = NULL; c->decode_xor = NULL; buf += 6; @@ -460,7 +458,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac switch (c->fmt) { case ZMBV_FMT_8BPP: c->bpp = 8; - decode_intra = zmbv_decode_intra; c->decode_xor = zmbv_decode_xor_8; avctx->pix_fmt = AV_PIX_FMT_PAL8; c->stride = c->width; @@ -468,7 +465,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac case ZMBV_FMT_15BPP: case ZMBV_FMT_16BPP: c->bpp = 16; - decode_intra = zmbv_decode_intra; c->decode_xor = zmbv_decode_xor_16; if (c->fmt == ZMBV_FMT_15BPP) avctx->pix_fmt = AV_PIX_FMT_RGB555LE; @@ -479,7 +475,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac #ifdef ZMBV_ENABLE_24BPP case ZMBV_FMT_24BPP: c->bpp = 24; - decode_intra = zmbv_decode_intra; c->decode_xor = zmbv_decode_xor_24; avctx->pix_fmt = AV_PIX_FMT_BGR24; c->stride = c->width * 3; @@ -487,7 +482,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac #endif //ZMBV_ENABLE_24BPP case ZMBV_FMT_32BPP: c->bpp = 32; - decode_intra = zmbv_decode_intra; c->decode_xor = zmbv_decode_xor_32; avctx->pix_fmt = AV_PIX_FMT_BGR0; c->stride = c->width * 4; @@ -517,7 +511,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac } memset(c->cur, 0, avctx->width * avctx->height * (c->bpp / 8)); memset(c->prev, 0, avctx->width * avctx->height * (c->bpp / 8)); - c->decode_intra= decode_intra; + c->got_keyframe = 1; } if (c->flags & ZMBV_KEYFRAME) { expected_size = avctx->width * avctx->height * (c->bpp / 8); @@ -528,7 +522,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac (c->flags & (ZMBV_DELTAPAL | ZMBV_KEYFRAME))) expected_size += 768; - if (!c->decode_intra) { + if (!c->got_keyframe) { av_log(avctx, AV_LOG_ERROR, "Error! Got no format or no keyframe!\n"); return AVERROR_INVALIDDATA; } @@ -564,7 +558,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac if (c->flags & ZMBV_KEYFRAME) { frame->key_frame = 1; frame->pict_type = AV_PICTURE_TYPE_I; - c->decode_intra(c); + zmbv_decode_intra(c); } else { frame->key_frame = 0; frame->pict_type = AV_PICTURE_TYPE_P;