From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 146B04BD76 for ; Tue, 16 Jul 2024 18:17:24 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F365568DBFE; Tue, 16 Jul 2024 21:14:35 +0300 (EEST) Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 278F868DAA6 for ; Tue, 16 Jul 2024 21:14:05 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=iD9D7L/B; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id C743D4DF1 for ; Tue, 16 Jul 2024 19:16:37 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 8oEd2wtRIMKZ for ; Tue, 16 Jul 2024 19:16:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1721150190; bh=llT0CchzE2POUlgEfOP32eanSccoOr7YeY6vkEIBWu4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=iD9D7L/BYsTjStUbtFAi9XoPIjI7fY4WvvfhsQDLDU7WTMhspILmbxri8oTI8acei g5ItIGkCKV3ADQzyb05PFOJox/jlbDxiTiByTWfub7rK8Etgl0negtGswEaabej8rp 5THic1onmqQlAPDYUaqB4jgepjHrToP55LONhk1zEvWzowl7JNQRLVVKQwjLwy0GMB ed06ad8fCS0P9qWPpJE6a29pCEsEmOWjOotpdMUl2GBwfjp5jIx7xQk/rRW+da0y41 +dCKHWw39fhTewbnCsTSHYJTwgvppyZ/l1NTwznz6srS1Jg+S7gbAbh7clrNDOdBqo dcXtJPtjklw/g== Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail1.khirnov.net (Postfix) with ESMTPS id B91784E18 for ; Tue, 16 Jul 2024 19:16:30 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 49A093A2DB3 for ; Tue, 16 Jul 2024 19:16:21 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 16 Jul 2024 19:11:39 +0200 Message-ID: <20240716171155.31838-24-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240716171155.31838-1-anton@khirnov.net> References: <20240716171155.31838-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 24/39] lavc/ffv1dec: move slice_damaged to per-slice context 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --- libavcodec/ffv1.h | 2 +- libavcodec/ffv1dec.c | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/libavcodec/ffv1.h b/libavcodec/ffv1.h index cef61f38ec..c4803654f2 100644 --- a/libavcodec/ffv1.h +++ b/libavcodec/ffv1.h @@ -91,6 +91,7 @@ typedef struct FFV1SliceContext { // decoder-only struct { int slice_reset_contexts; + int slice_damaged; }; // encoder-only @@ -131,7 +132,6 @@ typedef struct FFV1Context { int ec; int intra; - int slice_damaged; int key_frame_ok; int context_model; diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c index 92e5b2a80b..bd46930ec7 100644 --- a/libavcodec/ffv1dec.c +++ b/libavcodec/ffv1dec.c @@ -268,11 +268,10 @@ static int decode_slice(AVCodecContext *c, void *arg) ff_progress_frame_await(&f->last_picture, si); if(f->fsrc && !(p->flags & AV_FRAME_FLAG_KEY)) { - FFV1Context *fssrc = f->fsrc->slice_context[si]; const FFV1SliceContext *scsrc = &f->fsrc->slices[si]; if (!(p->flags & AV_FRAME_FLAG_KEY)) - fs->slice_damaged |= fssrc->slice_damaged; + sc->slice_damaged |= scsrc->slice_damaged; for (int i = 0; i < f->plane_count; i++) { const PlaneContext *psrc = &scsrc->plane[i]; @@ -302,7 +301,7 @@ static int decode_slice(AVCodecContext *c, void *arg) return AVERROR(ENOMEM); if (decode_slice_header(f, fs, sc, p) < 0) { sc->slice_x = sc->slice_y = sc->slice_height = sc->slice_width = 0; - fs->slice_damaged = 1; + sc->slice_damaged = 1; return AVERROR_INVALIDDATA; } } @@ -310,7 +309,7 @@ static int decode_slice(AVCodecContext *c, void *arg) return ret; if ((p->flags & AV_FRAME_FLAG_KEY) || sc->slice_reset_contexts) { ff_ffv1_clear_slice_state(f, sc); - } else if (fs->slice_damaged) { + } else if (sc->slice_damaged) { return AVERROR_INVALIDDATA; } @@ -364,7 +363,7 @@ static int decode_slice(AVCodecContext *c, void *arg) v = sc->c.bytestream_end - sc->c.bytestream - 2 - 5*f->ec; if (v) { av_log(f->avctx, AV_LOG_ERROR, "bytestream end mismatching by %d\n", v); - fs->slice_damaged = 1; + sc->slice_damaged = 1; } } @@ -793,7 +792,7 @@ static int read_header(FFV1Context *f) FFV1SliceContext *sc = &f->slices[j]; fs->packed_at_lsb = f->packed_at_lsb; - fs->slice_damaged = 0; + sc->slice_damaged = 0; if (f->version == 2) { int sx = get_symbol(c, state, 0); @@ -965,7 +964,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, } else { av_log(f->avctx, AV_LOG_ERROR, "\n"); } - fs->slice_damaged = 1; + sc->slice_damaged = 1; } if (avctx->debug & FF_DEBUG_PICT_INFO) { av_log(avctx, AV_LOG_DEBUG, "slice %d, CRC: 0x%08"PRIX32"\n", i, AV_RB32(buf_p + v - 4)); @@ -989,9 +988,8 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, sizeof(void*)); for (int i = f->slice_count - 1; i >= 0; i--) { - FFV1Context *fs = f->slice_context[i]; FFV1SliceContext *sc = &f->slices[i]; - if (fs->slice_damaged && f->last_picture.f) { + if (sc->slice_damaged && f->last_picture.f) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt); const uint8_t *src[4]; uint8_t *dst[4]; @@ -1044,7 +1042,6 @@ static void copy_fields(FFV1Context *fsdst, const FFV1Context *fssrc, fsdst->ec = fsrc->ec; fsdst->intra = fsrc->intra; - fsdst->slice_damaged = fssrc->slice_damaged; fsdst->key_frame_ok = fsrc->key_frame_ok; fsdst->packed_at_lsb = fsrc->packed_at_lsb; @@ -1077,6 +1074,7 @@ static int update_thread_context(AVCodecContext *dst, const AVCodecContext *src) const FFV1SliceContext *sc0 = &fsrc->slices[i]; copy_fields(fsdst, fssrc, fsrc); + sc->slice_damaged = sc0->slice_damaged; if (fsrc->version < 3) { sc->slice_x = sc0->slice_x; -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".