From patchwork Tue Apr 11 20:38:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 41090 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a17:907:3203:b0:94c:9d7a:e065 with SMTP id xg3csp1106758ejb; Tue, 11 Apr 2023 13:41:26 -0700 (PDT) X-Google-Smtp-Source: AKy350aD9b6ffFYJCfXAxNbvRJhO99am4IGqAC0DsDGsjO+6jpz18NduB4nAH/u8X++6G+9cgV8f X-Received: by 2002:a05:6402:344f:b0:504:8173:6240 with SMTP id l15-20020a056402344f00b0050481736240mr8856157edc.37.1681245566238; Tue, 11 Apr 2023 13:39:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681245566; cv=none; d=google.com; s=arc-20160816; b=vOsDGI1N0+sYTonIbDg0sbT2cEmhl2Su6AiTFRwQsTq/Km3LZKQiq1777qDakqWyOe XaFEVROzBhV8x31S2rEt5UyZU+kcgaHio+rerVfD6XOPWHxyoGH43owJToBSqoGCdOjH 1FlDQxvSUViILhIwGe4/uh8dLZR5QAPRmbHHwybogHAItPOfRZZp+TWseNoNQN+dbfh/ tv0Az+3mfjkRXPJ08ynt+GVl4K7iwS9I0q2IChV/Ji2BXW5t94Z9Bb+KFj955+Z7ObPc DIOXaseaRADA+mY9iUyjiRtTRuxf4H5BE0g/ET1pYHOcFIo+ndXCncwe0+UHyEc/efQk xgiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=mIBg7hNEF7TxfEKaCgTujEz6ym6MiobwkNZXI8UIUL4=; b=ZtZiD8LtFhGzihjNw9h1aTlqmfHKHYT6AspwlXjYs+s/wbvp2KpF8RoE0kmrTFmzBt 6nRPQkL5YfketyUewmehHKONv+2NCL7T+PLKv33r3J+o0a7rK4R5P8AjejKnAIbUk6OD m7WBuyGuRuCGP9BPd1V7f++IK6I0OWWLLVEwc/sYmJUcHB7LMxv17PhBw1Zkf+7W6b4x 0EkgdY+IALsZ6KQW+I0HZxYbcass6WyID+RigrrAoPeSZntbqNfku2pUr4FN5cldT/m/ buT1bU1/NdqPdAXxg7te/TOTycQPdl0u8tVx3nMGSIA5eVVwgYQXT7inT7Tv8iARBQfH UQcg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=fPre2w1m; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id c12-20020aa7c98c000000b005047c3159c6si10264446edt.583.2023.04.11.13.39.25; Tue, 11 Apr 2023 13:39:26 -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=@gmail.com header.s=20221208 header.b=fPre2w1m; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6269668BAA5; Tue, 11 Apr 2023 23:39:16 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f41.google.com (mail-ot1-f41.google.com [209.85.210.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CA15668924F for ; Tue, 11 Apr 2023 23:39:09 +0300 (EEST) Received: by mail-ot1-f41.google.com with SMTP id i15-20020a9d610f000000b006a11f365d13so3761433otj.0 for ; Tue, 11 Apr 2023 13:39:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681245548; x=1683837548; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=0NZLH2jMrMKcXcoZ6Jzb/zpeqL30R9tFfOajIdYkeA4=; b=fPre2w1m73XU4Kp5OJr85LCOZRuUDim/Z0kkWJc2nYOWJOwgOQrgC2pZJTnE435wZF 69sicX7p6BlvL/aXs3Zwe272/Xby/kx2bTTDov0FaGU6zrN/WcLN8tjn8PdmP+DG9Beo MpYa3hOpf+yYV1WdHw2J+ejXRFBjn0flRapH8RQXmfCyX06HF1HJEd1dvYgrFovW82Ex MKWcocCNjVWCTt8NGZHED6Cl5oofSDXC8kyi7zZQ2WR9Rnbd2SZcgbxSC4siGUXSCEJU 5/X7T7MvGtT4t4fs4fcSeBXER//97GaEp5/B7W9E4C3c7UdJNyhGJ2k3r6gwg9BP1/N8 89vA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1681245548; x=1683837548; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0NZLH2jMrMKcXcoZ6Jzb/zpeqL30R9tFfOajIdYkeA4=; b=ABV8Hnf31HFaAH43EsUNNai78eybWpRNdnkCl/4UA4hlz7h8Ee49FpeYZUQqy0ojpv 0mYswpUVcxrky+2ogL7scFAYBWKw+XYp8HwQsPWlGNKko63hqkv8BkvRTkLRDcJXiBy4 qvXhfYzuyxi7+yqiR1f9K9wMazuBSK5AxiKn5RlrESNlZyhO5loQ2swc7ffvyjF2RQhw JSUtoblfJB2fyhVO/YEuuzifiNG0ZlJPex+kiXsdnFf3BEtMeOhCZu4qqgoTzqdljN1k iSsB8ecAlEySTO45bkWmIV1medRnKgKqUb5vB1DypjVahpqEcvt+BFiwslnJGDvt7IWg QghQ== X-Gm-Message-State: AAQBX9dakKjbqwFGHxN9mw1xLRaWsFXxTSbUmniGwo/Wm4WHqcilVqIA zmkEvPMcMLA3p3cE8d+7xmalgF+OHbo= X-Received: by 2002:a9d:61c5:0:b0:694:38e2:c5f8 with SMTP id h5-20020a9d61c5000000b0069438e2c5f8mr5272961otk.30.1681245547551; Tue, 11 Apr 2023 13:39:07 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id d23-20020a9d4f17000000b006a3df644d31sm3857534otl.37.2023.04.11.13.39.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Apr 2023 13:39:07 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 11 Apr 2023 17:38:50 -0300 Message-Id: <20230411203851.65044-2-jamrial@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230411203851.65044-1-jamrial@gmail.com> References: <20230411203851.65044-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] avcodec: use the new event flags field instead of setting AVFrame.palette_has_changed 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: iZ7ez5QX7jwq Signed-off-by: James Almer --- doc/APIchanges | 1 + libavcodec/8bps.c | 2 +- libavcodec/ansi.c | 4 ++-- libavcodec/avcodec.h | 5 +++++ libavcodec/bethsoftvideo.c | 9 +++++---- libavcodec/bfi.c | 3 +-- libavcodec/bintext.c | 2 +- libavcodec/bmvvideo.c | 2 +- libavcodec/brenderpix.c | 4 ++-- libavcodec/c93.c | 2 +- libavcodec/cdgraphics.c | 4 +++- libavcodec/cdtoons.c | 2 +- libavcodec/cinepak.c | 2 +- libavcodec/dds.c | 4 ++-- libavcodec/decode.c | 1 + libavcodec/dfa.c | 2 +- libavcodec/dsicinvideo.c | 2 +- libavcodec/dxa.c | 2 +- libavcodec/flicvideo.c | 2 +- libavcodec/gemdec.c | 2 +- libavcodec/idcinvideo.c | 2 +- libavcodec/imx.c | 3 +-- libavcodec/interplayvideo.c | 2 +- libavcodec/jvdec.c | 2 +- libavcodec/kmvc.c | 6 +++--- libavcodec/mscc.c | 2 +- libavcodec/msrle.c | 2 +- libavcodec/mss1.c | 2 +- libavcodec/msvideo1.c | 2 +- libavcodec/pafvideo.c | 2 +- libavcodec/pictordec.c | 2 +- libavcodec/psd.c | 2 +- libavcodec/pthread_frame.c | 2 ++ libavcodec/qdrw.c | 2 +- libavcodec/qpeg.c | 2 +- libavcodec/qtrle.c | 2 +- libavcodec/rawdec.c | 4 ++-- libavcodec/rscc.c | 2 +- libavcodec/sga.c | 2 +- libavcodec/smacker.c | 2 +- libavcodec/smc.c | 2 +- libavcodec/targa.c | 2 +- libavcodec/tiertexseqv.c | 7 ++++--- libavcodec/tmv.c | 2 +- libavcodec/tscc.c | 2 +- libavcodec/vb.c | 2 +- libavcodec/vqavideo.c | 2 +- libavcodec/yop.c | 2 +- 48 files changed, 68 insertions(+), 57 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 59216231f9..85060768b3 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -4,6 +4,7 @@ API changes, most recent first: 2023-04-11 - xxxxxxxxxx - lavc 60.10.100 - avcodec.h Add event_flags to AVCodecContext. + Add AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED. 2023-04-04 - xxxxxxxxxx - lavu 58.6.100 - hdr_dynamic_metadata.h Add AV_HDR_PLUS_MAX_PAYLOAD_SIZE. diff --git a/libavcodec/8bps.c b/libavcodec/8bps.c index 90d6c96fd1..c6709e9569 100644 --- a/libavcodec/8bps.c +++ b/libavcodec/8bps.c @@ -123,7 +123,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, } if (avctx->bits_per_coded_sample <= 8) { - frame->palette_has_changed = ff_copy_palette(c->pal, avpkt, avctx); + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * ff_copy_palette(c->pal, avpkt, avctx); memcpy (frame->data[1], c->pal, AVPALETTE_SIZE); } diff --git a/libavcodec/ansi.c b/libavcodec/ansi.c index c1e31266ec..0e65591470 100644 --- a/libavcodec/ansi.c +++ b/libavcodec/ansi.c @@ -262,7 +262,7 @@ static int execute_code(AVCodecContext * avctx, int c) AV_GET_BUFFER_FLAG_REF)) < 0) return ret; s->frame->pict_type = AV_PICTURE_TYPE_I; - s->frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; set_palette((uint32_t *)s->frame->data[1]); erase_screen(avctx); } else if (c == 'l') { @@ -371,7 +371,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, } s->frame->pict_type = AV_PICTURE_TYPE_I; - s->frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; set_palette((uint32_t *)s->frame->data[1]); if (!s->first_frame) { erase_screen(avctx); diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 6cc54edab9..7083fb704a 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2103,6 +2103,11 @@ typedef struct AVCodecContext { int event_flags; } AVCodecContext; +/** + * - decoding: the palette has changed in between returned frames. + */ +#define AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED (1 << 0) + /** * @defgroup lavc_hwaccel AVHWAccel * diff --git a/libavcodec/bethsoftvideo.c b/libavcodec/bethsoftvideo.c index e095d04fa5..d54aa7a5d1 100644 --- a/libavcodec/bethsoftvideo.c +++ b/libavcodec/bethsoftvideo.c @@ -51,8 +51,9 @@ static av_cold int bethsoftvid_decode_init(AVCodecContext *avctx) return 0; } -static int set_palette(BethsoftvidContext *ctx, GetByteContext *g) +static int set_palette(AVCodecContext *avctx, GetByteContext *g) { + BethsoftvidContext *ctx = avctx->priv_data; uint32_t *palette = (uint32_t *)ctx->frame->data[1]; int a; @@ -63,7 +64,7 @@ static int set_palette(BethsoftvidContext *ctx, GetByteContext *g) palette[a] = 0xFFU << 24 | bytestream2_get_be24u(g) * 4; palette[a] |= palette[a] >> 6 & 0x30303; } - ctx->frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; return 0; } @@ -93,7 +94,7 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx, AVFrame *rframe, GetByteContext g; bytestream2_init(&g, avpkt->side_data[0].data, avpkt->side_data[0].size); - if ((ret = set_palette(vid, &g)) < 0) + if ((ret = set_palette(avctx, &g)) < 0) return ret; } @@ -103,7 +104,7 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx, AVFrame *rframe, switch(block_type){ case PALETTE_BLOCK: { *got_frame = 0; - if ((ret = set_palette(vid, &vid->g)) < 0) { + if ((ret = set_palette(avctx, &vid->g)) < 0) { av_log(avctx, AV_LOG_ERROR, "error reading palette\n"); return ret; } diff --git a/libavcodec/bfi.c b/libavcodec/bfi.c index c268272451..0aa1bb3954 100644 --- a/libavcodec/bfi.c +++ b/libavcodec/bfi.c @@ -84,11 +84,10 @@ static int bfi_decode_frame(AVCodecContext *avctx, AVFrame *frame, pal++; } memcpy(bfi->pal, frame->data[1], sizeof(bfi->pal)); - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } else { frame->pict_type = AV_PICTURE_TYPE_P; frame->key_frame = 0; - frame->palette_has_changed = 0; memcpy(frame->data[1], bfi->pal, sizeof(bfi->pal)); } diff --git a/libavcodec/bintext.c b/libavcodec/bintext.c index ce814f7693..e0dc7bfa66 100644 --- a/libavcodec/bintext.c +++ b/libavcodec/bintext.c @@ -157,7 +157,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, if ((ret = ff_get_buffer(avctx, s->frame, 0)) < 0) return ret; s->frame->pict_type = AV_PICTURE_TYPE_I; - s->frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; memcpy(s->frame->data[1], s->palette, 16 * 4); if (avctx->codec_id == AV_CODEC_ID_XBIN) { diff --git a/libavcodec/bmvvideo.c b/libavcodec/bmvvideo.c index 92ce41c836..ee394886d5 100644 --- a/libavcodec/bmvvideo.c +++ b/libavcodec/bmvvideo.c @@ -251,7 +251,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, } memcpy(frame->data[1], c->pal, AVPALETTE_SIZE); - frame->palette_has_changed = type & BMV_PALETTE; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * (type & BMV_PALETTE); outptr = frame->data[0]; srcptr = c->frame; diff --git a/libavcodec/brenderpix.c b/libavcodec/brenderpix.c index e95ab3d4af..da436fb4c9 100644 --- a/libavcodec/brenderpix.c +++ b/libavcodec/brenderpix.c @@ -245,7 +245,7 @@ static int pix_decode_frame(AVCodecContext *avctx, AVFrame *frame, *pal_out++ = (0xFFU << 24) | bytestream2_get_be32u(&gb); bytestream2_skip(&gb, 8); - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; chunk_type = bytestream2_get_be32(&gb); } else if (avctx->pix_fmt == AV_PIX_FMT_PAL8) { @@ -257,7 +257,7 @@ static int pix_decode_frame(AVCodecContext *avctx, AVFrame *frame, "Using default palette, colors might be off.\n"); memcpy(pal_out, std_pal_table, sizeof(uint32_t) * 256); - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } data_len = bytestream2_get_be32(&gb); diff --git a/libavcodec/c93.c b/libavcodec/c93.c index bfcbc7c150..c229910daa 100644 --- a/libavcodec/c93.c +++ b/libavcodec/c93.c @@ -246,7 +246,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, for (i = 0; i < 256; i++) { palette[i] = 0xFFU << 24 | bytestream2_get_be24(&gb); } - newpic->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } else { if (oldpic->data[1]) memcpy(newpic->data[1], oldpic->data[1], 256 * 4); diff --git a/libavcodec/cdgraphics.c b/libavcodec/cdgraphics.c index 431e99cd76..9c5dbcb5e0 100644 --- a/libavcodec/cdgraphics.c +++ b/libavcodec/cdgraphics.c @@ -66,6 +66,7 @@ #define CDG_PALETTE_SIZE 16 typedef struct CDGraphicsContext { + AVCodecContext *avctx; AVFrame *frame; int hscroll; int vscroll; @@ -77,6 +78,7 @@ static av_cold int cdg_decode_init(AVCodecContext *avctx) { CDGraphicsContext *cc = avctx->priv_data; + cc->avctx = avctx; cc->frame = av_frame_alloc(); if (!cc->frame) return AVERROR(ENOMEM); @@ -125,7 +127,7 @@ static void cdg_load_palette(CDGraphicsContext *cc, uint8_t *data, int low) b = ((color ) & 0x000F) * 17; palette[i + array_offset] = (uint32_t)cc->alpha[i + array_offset] << 24 | r << 16 | g << 8 | b; } - cc->frame->palette_has_changed = 1; + cc->avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } static int cdg_tile_block(CDGraphicsContext *cc, uint8_t *data, int b) diff --git a/libavcodec/cdtoons.c b/libavcodec/cdtoons.c index 3ebed2267c..3a28bd8a72 100644 --- a/libavcodec/cdtoons.c +++ b/libavcodec/cdtoons.c @@ -384,7 +384,7 @@ static int cdtoons_decode_frame(AVCodecContext *avctx, AVFrame *rframe, } /* first palette entry indicates transparency */ c->pal[0] = 0; - c->frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } } diff --git a/libavcodec/cinepak.c b/libavcodec/cinepak.c index 282614fd1d..c37587e8ee 100644 --- a/libavcodec/cinepak.c +++ b/libavcodec/cinepak.c @@ -476,7 +476,7 @@ static int cinepak_decode_frame(AVCodecContext *avctx, AVFrame *rframe, return ret; if (s->palette_video) { - s->frame->palette_has_changed = ff_copy_palette(s->pal, avpkt, avctx); + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * ff_copy_palette(s->pal, avpkt, avctx); } if ((ret = cinepak_decode(s)) < 0) { diff --git a/libavcodec/dds.c b/libavcodec/dds.c index 4bb425dbb3..b742998191 100644 --- a/libavcodec/dds.c +++ b/libavcodec/dds.c @@ -651,7 +651,7 @@ static int dds_decode(AVCodecContext *avctx, AVFrame *frame, ((unsigned)frame->data[1][3+i*4]<<24) ); } - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; if (bytestream2_get_bytes_left(gbc) < frame->height * frame->width / 2) { av_log(avctx, AV_LOG_ERROR, "Buffer is too small (%d < %d).\n", @@ -682,7 +682,7 @@ static int dds_decode(AVCodecContext *avctx, AVFrame *frame, ((unsigned)frame->data[1][3+i*4]<<24) ); - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } if (bytestream2_get_bytes_left(gbc) < frame->height * linesize) { diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 40f5a3ba59..e3d803da3b 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -570,6 +570,7 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) } if (!ret) { + frame->palette_has_changed = !!(avctx->event_flags & AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED); frame->best_effort_timestamp = guess_correct_pts(avctx, frame->pts, frame->pkt_dts); diff --git a/libavcodec/dfa.c b/libavcodec/dfa.c index 114c803f32..8177aa46b5 100644 --- a/libavcodec/dfa.c +++ b/libavcodec/dfa.c @@ -367,7 +367,7 @@ static int dfa_decode_frame(AVCodecContext *avctx, AVFrame *frame, s->pal[i] = bytestream2_get_be24(&gb) << 2; s->pal[i] |= 0xFFU << 24 | (s->pal[i] >> 6) & 0x30303; } - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } else if (chunk_type <= 9) { if (decoder[chunk_type - 2](&gb, s->frame_buf, avctx->width, avctx->height)) { av_log(avctx, AV_LOG_ERROR, "Error decoding %s chunk\n", diff --git a/libavcodec/dsicinvideo.c b/libavcodec/dsicinvideo.c index 222044d125..4beea39cd5 100644 --- a/libavcodec/dsicinvideo.c +++ b/libavcodec/dsicinvideo.c @@ -293,7 +293,7 @@ static int cinvideo_decode_frame(AVCodecContext *avctx, AVFrame *rframe, return res; memcpy(cin->frame->data[1], cin->palette, sizeof(cin->palette)); - cin->frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; for (y = 0; y < cin->avctx->height; ++y) memcpy(cin->frame->data[0] + (cin->avctx->height - 1 - y) * cin->frame->linesize[0], cin->bitmap_table[CIN_CUR_BMP] + y * cin->avctx->width, diff --git a/libavcodec/dxa.c b/libavcodec/dxa.c index 8d2d2d771b..a1b4224eba 100644 --- a/libavcodec/dxa.c +++ b/libavcodec/dxa.c @@ -230,7 +230,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, if ((ret = ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF)) < 0) return ret; memcpy(frame->data[1], c->pal, AVPALETTE_SIZE); - frame->palette_has_changed = pc; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * pc; outptr = frame->data[0]; srcptr = c->decomp_buf; diff --git a/libavcodec/flicvideo.c b/libavcodec/flicvideo.c index 228f652775..1d27cc6bbd 100644 --- a/libavcodec/flicvideo.c +++ b/libavcodec/flicvideo.c @@ -473,7 +473,7 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx, /* make the palette available on the way out */ memcpy(s->frame->data[1], s->palette, AVPALETTE_SIZE); if (s->new_palette) { - s->frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; s->new_palette = 0; } diff --git a/libavcodec/gemdec.c b/libavcodec/gemdec.c index c8fd8dcdcd..96c0afaf34 100644 --- a/libavcodec/gemdec.c +++ b/libavcodec/gemdec.c @@ -181,7 +181,7 @@ static int gem_decode_frame(AVCodecContext *avctx, AVFrame *p, p->pict_type = AV_PICTURE_TYPE_I; p->key_frame = 1; - p->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; palette = (uint32_t *)p->data[1]; if (tag == AV_RB32("STTT")) { diff --git a/libavcodec/idcinvideo.c b/libavcodec/idcinvideo.c index f6b8b3cd69..1f1ad09f96 100644 --- a/libavcodec/idcinvideo.c +++ b/libavcodec/idcinvideo.c @@ -224,7 +224,7 @@ static int idcin_decode_frame(AVCodecContext *avctx, AVFrame *frame, if (idcin_decode_vlcs(s, frame)) return AVERROR_INVALIDDATA; - frame->palette_has_changed = ff_copy_palette(s->pal, avpkt, avctx); + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * ff_copy_palette(s->pal, avpkt, avctx); /* make the palette available on the way out */ memcpy(frame->data[1], s->pal, AVPALETTE_SIZE); diff --git a/libavcodec/imx.c b/libavcodec/imx.c index 44bab23c27..e11239c28c 100644 --- a/libavcodec/imx.c +++ b/libavcodec/imx.c @@ -58,11 +58,10 @@ static int imx_decode_frame(AVCodecContext *avctx, AVFrame *rframe, return ret; if (ff_copy_palette(imx->pal, avpkt, avctx)) { - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; frame->key_frame = 1; } else { frame->key_frame = 0; - frame->palette_has_changed = 0; } bytestream2_init(&gb, avpkt->data, avpkt->size); diff --git a/libavcodec/interplayvideo.c b/libavcodec/interplayvideo.c index 1a3461bf10..6c9ec3f7a2 100644 --- a/libavcodec/interplayvideo.c +++ b/libavcodec/interplayvideo.c @@ -1315,7 +1315,7 @@ static int ipvideo_decode_frame(AVCodecContext *avctx, AVFrame *frame, return ret; if (!s->is_16bpp) { - frame->palette_has_changed = ff_copy_palette(s->pal, avpkt, avctx); + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * ff_copy_palette(s->pal, avpkt, avctx); } switch (frame_format) { diff --git a/libavcodec/jvdec.c b/libavcodec/jvdec.c index e0287a9cb9..72ac78f87a 100644 --- a/libavcodec/jvdec.c +++ b/libavcodec/jvdec.c @@ -213,7 +213,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, if (video_size) { s->frame->key_frame = 1; s->frame->pict_type = AV_PICTURE_TYPE_I; - s->frame->palette_has_changed = s->palette_has_changed; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * s->palette_has_changed; s->palette_has_changed = 0; memcpy(s->frame->data[1], s->palette, AVPALETTE_SIZE); diff --git a/libavcodec/kmvc.c b/libavcodec/kmvc.c index 153cea03b9..a9645c608e 100644 --- a/libavcodec/kmvc.c +++ b/libavcodec/kmvc.c @@ -273,7 +273,7 @@ static int decode_frame(AVCodecContext * avctx, AVFrame *frame, if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) return ret; - frame->palette_has_changed = ff_copy_palette(ctx->pal, avpkt, avctx); + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * ff_copy_palette(ctx->pal, avpkt, avctx); header = bytestream2_get_byte(&ctx->g); @@ -296,7 +296,7 @@ static int decode_frame(AVCodecContext * avctx, AVFrame *frame, } if (header & KMVC_PALETTE) { - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; // palette starts from index 1 and has 127 entries for (i = 1; i <= ctx->palsize; i++) { ctx->pal[i] = 0xFFU << 24 | bytestream2_get_be24(&ctx->g); @@ -305,7 +305,7 @@ static int decode_frame(AVCodecContext * avctx, AVFrame *frame, if (ctx->setpal) { ctx->setpal = 0; - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } /* make the palette available on the way out */ diff --git a/libavcodec/mscc.c b/libavcodec/mscc.c index e8406aa268..b70e43e4ad 100644 --- a/libavcodec/mscc.c +++ b/libavcodec/mscc.c @@ -150,7 +150,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, &size); if (pal && size == AVPALETTE_SIZE) { - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; for (j = 0; j < 256; j++) s->pal[j] = 0xFF000000 | AV_RL32(pal + j * 4); } else if (pal) { diff --git a/libavcodec/msrle.c b/libavcodec/msrle.c index b6fa7f7abb..803db81012 100644 --- a/libavcodec/msrle.c +++ b/libavcodec/msrle.c @@ -95,7 +95,7 @@ static int msrle_decode_frame(AVCodecContext *avctx, AVFrame *rframe, return ret; if (avctx->bits_per_coded_sample > 1 && avctx->bits_per_coded_sample <= 8) { - s->frame->palette_has_changed = ff_copy_palette(s->pal, avpkt, avctx); + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * ff_copy_palette(s->pal, avpkt, avctx); /* make the palette available */ memcpy(s->frame->data[1], s->pal, AVPALETTE_SIZE); diff --git a/libavcodec/mss1.c b/libavcodec/mss1.c index 775852102a..ae2459cc00 100644 --- a/libavcodec/mss1.c +++ b/libavcodec/mss1.c @@ -178,7 +178,7 @@ static int mss1_decode_frame(AVCodecContext *avctx, AVFrame *rframe, if (c->corrupted) return AVERROR_INVALIDDATA; memcpy(ctx->pic->data[1], c->pal, AVPALETTE_SIZE); - ctx->pic->palette_has_changed = pal_changed; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * pal_changed; if ((ret = av_frame_ref(rframe, ctx->pic)) < 0) return ret; diff --git a/libavcodec/msvideo1.c b/libavcodec/msvideo1.c index 9903ff36a7..b92fa40e8b 100644 --- a/libavcodec/msvideo1.c +++ b/libavcodec/msvideo1.c @@ -312,7 +312,7 @@ static int msvideo1_decode_frame(AVCodecContext *avctx, AVFrame *rframe, return ret; if (s->mode_8bit) { - s->frame->palette_has_changed = ff_copy_palette(s->pal, avpkt, avctx); + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * ff_copy_palette(s->pal, avpkt, avctx); } if (s->mode_8bit) diff --git a/libavcodec/pafvideo.c b/libavcodec/pafvideo.c index 458fe9ff47..3f0468e847 100644 --- a/libavcodec/pafvideo.c +++ b/libavcodec/pafvideo.c @@ -327,7 +327,7 @@ static int paf_video_decode(AVCodecContext *avctx, AVFrame *rframe, b = b << 2 | b >> 4; *out++ = (0xFFU << 24) | (r << 16) | (g << 8) | b; } - c->pic->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } c->dirty[c->current_frame] = 1; diff --git a/libavcodec/pictordec.c b/libavcodec/pictordec.c index aef3d3de76..7b406a0347 100644 --- a/libavcodec/pictordec.c +++ b/libavcodec/pictordec.c @@ -191,7 +191,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, return ret; memset(frame->data[0], 0, s->height * frame->linesize[0]); frame->pict_type = AV_PICTURE_TYPE_I; - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; pos_after_pal = bytestream2_tell(&s->g) + esize; palette = (uint32_t*)frame->data[1]; diff --git a/libavcodec/psd.c b/libavcodec/psd.c index ee96bd1237..389363677c 100644 --- a/libavcodec/psd.c +++ b/libavcodec/psd.c @@ -532,7 +532,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *picture, } if (s->color_mode == PSD_INDEXED) { - picture->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; memcpy(picture->data[1], s->palette, AVPALETTE_SIZE); } diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c index 74864e19c5..e1cb0109fb 100644 --- a/libavcodec/pthread_frame.c +++ b/libavcodec/pthread_frame.c @@ -324,6 +324,8 @@ FF_ENABLE_DEPRECATION_WARNINGS return err; } + dst->event_flags |= src->event_flags; + if (for_user) { if (codec->update_thread_context_for_user) err = codec->update_thread_context_for_user(dst, src); diff --git a/libavcodec/qdrw.c b/libavcodec/qdrw.c index e41451e9a7..277777e638 100644 --- a/libavcodec/qdrw.c +++ b/libavcodec/qdrw.c @@ -384,7 +384,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, ret = parse_palette(avctx, &gbc, (uint32_t *)p->data[1], colors, flags & 0x8000); if (ret < 0) return ret; - p->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; /* jump to image data */ bytestream2_skip(&gbc, 18); diff --git a/libavcodec/qpeg.c b/libavcodec/qpeg.c index 5bca338acf..a3b821971d 100644 --- a/libavcodec/qpeg.c +++ b/libavcodec/qpeg.c @@ -297,7 +297,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, } /* make the palette available on the way out */ - p->palette_has_changed = ff_copy_palette(a->pal, avpkt, avctx); + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * ff_copy_palette(a->pal, avpkt, avctx); memcpy(p->data[1], a->pal, AVPALETTE_SIZE); av_frame_unref(ref); diff --git a/libavcodec/qtrle.c b/libavcodec/qtrle.c index 5cb18c86c2..1e2bf705ec 100644 --- a/libavcodec/qtrle.c +++ b/libavcodec/qtrle.c @@ -537,7 +537,7 @@ static int qtrle_decode_frame(AVCodecContext *avctx, AVFrame *rframe, } if(has_palette) { - s->frame->palette_has_changed = ff_copy_palette(s->pal, avpkt, avctx); + s->avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * ff_copy_palette(s->pal, avpkt, avctx); /* make the palette available on the way out */ memcpy(s->frame->data[1], s->pal, AVPALETTE_SIZE); diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c index c20c317fed..afd6a19514 100644 --- a/libavcodec/rawdec.c +++ b/libavcodec/rawdec.c @@ -372,7 +372,7 @@ static int raw_decode(AVCodecContext *avctx, AVFrame *frame, } if (ff_copy_palette(context->palette->data, avpkt, avctx)) { - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } else if (context->is_nut_pal8) { int vid_size = avctx->width * avctx->height; int pal_size = avpkt->size - vid_size; @@ -380,7 +380,7 @@ static int raw_decode(AVCodecContext *avctx, AVFrame *frame, if (avpkt->size > vid_size && pal_size <= AVPALETTE_SIZE) { const uint8_t *pal = avpkt->data + vid_size; memcpy(context->palette->data, pal, pal_size); - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } } } diff --git a/libavcodec/rscc.c b/libavcodec/rscc.c index 61a25df382..68cf957990 100644 --- a/libavcodec/rscc.c +++ b/libavcodec/rscc.c @@ -346,7 +346,7 @@ static int rscc_decode_frame(AVCodecContext *avctx, AVFrame *frame, /* Palette handling */ if (avctx->pix_fmt == AV_PIX_FMT_PAL8) { - frame->palette_has_changed = ff_copy_palette(ctx->palette, avpkt, avctx); + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * ff_copy_palette(ctx->palette, avpkt, avctx); memcpy(frame->data[1], ctx->palette, AVPALETTE_SIZE); } // We only return a picture when enough of it is undamaged, this avoids copying nearly broken frames around diff --git a/libavcodec/sga.c b/libavcodec/sga.c index d3f4924298..7fceb34406 100644 --- a/libavcodec/sga.c +++ b/libavcodec/sga.c @@ -497,7 +497,7 @@ static int sga_decode_frame(AVCodecContext *avctx, AVFrame *frame, } memcpy(frame->data[1], s->pal, AVPALETTE_SIZE); - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; frame->pict_type = AV_PICTURE_TYPE_I; frame->key_frame = 1; diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c index ecc27e9b67..c7c4d5ac15 100644 --- a/libavcodec/smacker.c +++ b/libavcodec/smacker.c @@ -392,7 +392,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, pal = (uint32_t*)smk->pic->data[1]; bytestream2_init(&gb2, avpkt->data, avpkt->size); flags = bytestream2_get_byteu(&gb2); - smk->pic->palette_has_changed = flags & 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * !!(flags & 1); smk->pic->key_frame = !!(flags & 2); if (smk->pic->key_frame) smk->pic->pict_type = AV_PICTURE_TYPE_I; diff --git a/libavcodec/smc.c b/libavcodec/smc.c index 2b10e74386..9f9b6570a3 100644 --- a/libavcodec/smc.c +++ b/libavcodec/smc.c @@ -437,7 +437,7 @@ static int smc_decode_frame(AVCodecContext *avctx, AVFrame *rframe, if ((ret = ff_reget_buffer(avctx, s->frame, 0)) < 0) return ret; - s->frame->palette_has_changed = ff_copy_palette(s->pal, avpkt, avctx); + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * ff_copy_palette(s->pal, avpkt, avctx); bytestream2_init(&gb, buf, buf_size); ret = smc_decode_stream(s, &gb); diff --git a/libavcodec/targa.c b/libavcodec/targa.c index 07005f2be6..f8286990a7 100644 --- a/libavcodec/targa.c +++ b/libavcodec/targa.c @@ -249,7 +249,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, } break; } - p->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } } diff --git a/libavcodec/tiertexseqv.c b/libavcodec/tiertexseqv.c index 19c0671bf6..d1998194e5 100644 --- a/libavcodec/tiertexseqv.c +++ b/libavcodec/tiertexseqv.c @@ -162,8 +162,9 @@ static const unsigned char *seq_decode_op3(SeqVideoContext *seq, return src; } -static int seqvideo_decode(SeqVideoContext *seq, const unsigned char *data, int data_size) +static int seqvideo_decode(AVCodecContext *avctx, const unsigned char *data, int data_size) { + SeqVideoContext *seq = avctx->priv_data; const unsigned char *data_end = data + data_size; GetBitContext gb; int flags, i, j, x, y, op; @@ -182,7 +183,7 @@ static int seqvideo_decode(SeqVideoContext *seq, const unsigned char *data, int c[j] = (*data << 2) | (*data >> 4); palette[i] = 0xFFU << 24 | AV_RB24(c); } - seq->frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } if (flags & 2) { @@ -242,7 +243,7 @@ static int seqvideo_decode_frame(AVCodecContext *avctx, AVFrame *rframe, if ((ret = ff_reget_buffer(avctx, seq->frame, 0)) < 0) return ret; - if (seqvideo_decode(seq, buf, buf_size)) + if (seqvideo_decode(avctx, buf, buf_size)) return AVERROR_INVALIDDATA; if ((ret = av_frame_ref(rframe, seq->frame)) < 0) diff --git a/libavcodec/tmv.c b/libavcodec/tmv.c index cdb83452e5..97f007a3bd 100644 --- a/libavcodec/tmv.c +++ b/libavcodec/tmv.c @@ -60,7 +60,7 @@ static int tmv_decode_frame(AVCodecContext *avctx, AVFrame *frame, frame->key_frame = 1; dst = frame->data[0]; - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; memcpy(frame->data[1], ff_cga_palette, 16 * 4); memset(frame->data[1] + 16 * 4, 0, AVPALETTE_SIZE - 16 * 4); diff --git a/libavcodec/tscc.c b/libavcodec/tscc.c index 0ebe641ab1..639f2b53b2 100644 --- a/libavcodec/tscc.c +++ b/libavcodec/tscc.c @@ -106,7 +106,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, /* make the palette available on the way out */ if (c->avctx->pix_fmt == AV_PIX_FMT_PAL8) { - frame->palette_has_changed = palette_has_changed; + c->avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * palette_has_changed; memcpy(frame->data[1], c->pal, AVPALETTE_SIZE); } diff --git a/libavcodec/vb.c b/libavcodec/vb.c index 8b0e216473..42b048870a 100644 --- a/libavcodec/vb.c +++ b/libavcodec/vb.c @@ -230,7 +230,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, } memcpy(frame->data[1], c->pal, AVPALETTE_SIZE); - frame->palette_has_changed = flags & VB_HAS_PALETTE; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED * !!(flags & VB_HAS_PALETTE); outptr = frame->data[0]; srcptr = c->frame; diff --git a/libavcodec/vqavideo.c b/libavcodec/vqavideo.c index 0573696d94..9a82106566 100644 --- a/libavcodec/vqavideo.c +++ b/libavcodec/vqavideo.c @@ -809,7 +809,7 @@ static int vqa_decode_frame(AVCodecContext *avctx, AVFrame *rframe, /* make the palette available on the way out */ memcpy(s->frame->data[1], s->palette, PALETTE_COUNT * 4); - s->frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; } else if (avctx->pix_fmt == AV_PIX_FMT_RGB555LE) { if ((res = vqa_decode_frame_hicolor(s, s->frame)) < 0) return res; diff --git a/libavcodec/yop.c b/libavcodec/yop.c index 14244c942a..51fb07bddc 100644 --- a/libavcodec/yop.c +++ b/libavcodec/yop.c @@ -232,7 +232,7 @@ static int yop_decode_frame(AVCodecContext *avctx, AVFrame *rframe, (palette[i + firstcolor] >> 6) & 0x30303; } - frame->palette_has_changed = 1; + avctx->event_flags |= AVCTX_EVENT_FLAG_PALETTE_HAS_CHANGED; for (y = 0; y < avctx->height; y += 2) { for (x = 0; x < avctx->width; x += 2) {