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 7AE604BDBC for ; Tue, 16 Jul 2024 18:17:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E058668DC18; Tue, 16 Jul 2024 21:14:38 +0300 (EEST) Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2A2B668DAC5 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=ChmZu19n; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id C049F4DBC for ; Tue, 16 Jul 2024 19:16:36 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id iPxAD0SO3y1r for ; Tue, 16 Jul 2024 19:16:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1721150190; bh=qZIlLlE40mRFqdqDRmXA3++kcjQhODAinxRl+47kCXc=; h=From:To:Subject:Date:In-Reply-To:References:From; b=ChmZu19nmJ1slGAzpbczWObp79uhGMwrKxAj0ZMKTgN4fh7PG+0KZXDqPkQoir0Fw /jFXejQqaUQWy9F5oVaUt1diiXnFXU74yF5jXw8Irsi9w3FuIeJ/0sH7sbgUqeTKqZ 4DmTy4fEyMKpCF/gJbVmCiISh1G8uw2jv/DAHOJ1VM/IZVmXhfrb2z3GgI1luBt8va ho8iWj67agzmKmB7F+4eBhGMwA46zms5OFX5nXBywjcHxPdKWi4K+VDG/HerEyBye8 /E6u2B+cXZx+iMSlUw0gUwpd1tJ8Z1PKVjk/GQnEXagJwNX5+uefHCOOjYxw6uMnqL b7zraOFPA6tMQ== 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 69BB14DF3 for ; Tue, 16 Jul 2024 19:16:27 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id B208D3A2729 for ; Tue, 16 Jul 2024 19:16:20 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 16 Jul 2024 19:11:27 +0200 Message-ID: <20240716171155.31838-12-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 12/39] lavc/ffv1: drop redundant FFV1Context.quant_table 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: In all cases except decoding version 1 it's either not used, or contains a copy of a table from quant_tables, which we can just as well use directly. When decoding version 1, we can just as well decode into quant_tables[0], which would otherwise be unused. --- libavcodec/ffv1.h | 1 - libavcodec/ffv1dec.c | 10 +++++++--- libavcodec/ffv1enc.c | 6 ++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/libavcodec/ffv1.h b/libavcodec/ffv1.h index dce6e177eb..4d57172d5b 100644 --- a/libavcodec/ffv1.h +++ b/libavcodec/ffv1.h @@ -106,7 +106,6 @@ typedef struct FFV1Context { int ac; ///< 1=range coder <-> 0=golomb rice int ac_byte_count; ///< number of bytes used for AC coding PlaneContext plane[MAX_PLANES]; - int16_t quant_table[MAX_CONTEXT_INPUTS][256]; int16_t quant_tables[MAX_QUANT_TABLES][MAX_CONTEXT_INPUTS][256]; int context_count[MAX_QUANT_TABLES]; uint8_t state_transition[256]; diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c index a1f7206871..66d9f63c1a 100644 --- a/libavcodec/ffv1dec.c +++ b/libavcodec/ffv1dec.c @@ -764,7 +764,7 @@ static int read_header(FFV1Context *f) ff_dlog(f->avctx, "%d %d %d\n", f->chroma_h_shift, f->chroma_v_shift, f->avctx->pix_fmt); if (f->version < 2) { - context_count = read_quant_tables(c, f->quant_table); + context_count = read_quant_tables(c, f->quant_tables[0]); if (context_count < 0) { av_log(f->avctx, AV_LOG_ERROR, "read_quant_table error\n"); return AVERROR_INVALIDDATA; @@ -834,7 +834,7 @@ static int read_header(FFV1Context *f) sizeof(p->quant_table)); context_count = f->context_count[idx]; } else { - memcpy(p->quant_table, f->quant_table, sizeof(p->quant_table)); + memcpy(p->quant_table, f->quant_tables[0], sizeof(p->quant_table)); } if (f->version <= 2) { @@ -1067,7 +1067,11 @@ static int update_thread_context(AVCodecContext *dst, const AVCodecContext *src) fdst->use32bit = fsrc->use32bit; memcpy(fdst->state_transition, fsrc->state_transition, sizeof(fdst->state_transition)); - memcpy(fdst->quant_table, fsrc->quant_table, sizeof(fsrc->quant_table)); + + // in version 1 there is a single per-keyframe quant table, so + // we need to propagate it between threads + if (fsrc->version < 2) + memcpy(fdst->quant_tables[0], fsrc->quant_tables[0], sizeof(fsrc->quant_tables[0])); for (int i = 0; i < fdst->num_h_slices * fdst->num_v_slices; i++) { FFV1Context *fssrc = fsrc->slice_context[i]; diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 5692bfa1fc..1d00a46cdd 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -367,7 +367,7 @@ static void write_header(FFV1Context *f) put_symbol(c, state, f->chroma_v_shift, 0); put_rac(c, state, f->transparency); - write_quant_tables(c, f->quant_table); + write_quant_tables(c, f->quant_tables[f->context_model]); } else if (f->version < 3) { put_symbol(c, state, f->slice_count, 0); for (i = 0; i < f->slice_count; i++) { @@ -735,15 +735,13 @@ static av_cold int encode_init(AVCodecContext *avctx) } s->context_count[0] = (11 * 11 * 11 + 1) / 2; s->context_count[1] = (11 * 11 * 5 * 5 * 5 + 1) / 2; - memcpy(s->quant_table, s->quant_tables[s->context_model], - sizeof(s->quant_table)); for (i = 0; i < s->plane_count; i++) { PlaneContext *const p = &s->plane[i]; - memcpy(p->quant_table, s->quant_table, sizeof(p->quant_table)); p->quant_table_index = s->context_model; p->context_count = s->context_count[p->quant_table_index]; + memcpy(p->quant_table, s->quant_tables[p->quant_table_index], sizeof(p->quant_table)); } if ((ret = ff_ffv1_allocate_initial_states(s)) < 0) -- 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".