[FFmpeg-devel] [PATCH] avcodec/zmbv: Call decode_intra directly
Paul B Mahol
onemda at gmail.com
Sat Oct 19 17:25:07 EEST 2019
LGTM
On 10/17/19, Andreas Rheinhardt <andreas.rheinhardt at gmail.com> wrote:
> 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 <andreas.rheinhardt at gmail.com>
> ---
> 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;
> --
> 2.20.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list