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 ESMTPS id 82D964C36A for ; Thu, 6 Feb 2025 19:18:19 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D766468BA1E; Thu, 6 Feb 2025 21:18:15 +0200 (EET) Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BF39A68B898 for ; Thu, 6 Feb 2025 21:18:08 +0200 (EET) Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-21f3c119fe6so22599085ad.0 for ; Thu, 06 Feb 2025 11:18:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738869486; x=1739474286; darn=ffmpeg.org; 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=ASlKmJMPXvpHLtX2a14gdiv6KPH7yQQwpFp9FjWeujE=; b=hrqmvM5aNUooUhj4LYP7OVG5RMS7pD7m0UuajE/QC5WuKeodkuKKEaxVOcYKp6R8TP /60/tuOwgiB2oKknmjprSzdeguF9KKVJlJP1WzitFfHyRi+zgwTTFhP2XK3xBSU/Pq0I 242EOeve4vBPflzDdngrlxSLkG1bTVSEoTAYVGQW9+lIubB3ieqkxY0BZyHjJXTBzO1W P2vrXRAlKvM+mJ1KhYbUMoyKx9I8il0Aah330chn4+kmA+0LknTTxDC4nchyvqCFOpdq HlUndtDv38A1tiFpfSO/eBaQTyPbY1On2NWeQT8DNgP4YpE9Zv2FLXfC0pn4m4dmHkVi WbdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738869486; x=1739474286; 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=ASlKmJMPXvpHLtX2a14gdiv6KPH7yQQwpFp9FjWeujE=; b=W3MwgDJXumGOYaYOOlNzn+FErvh5JhW1EXhSUzvMTftRkj7xNUSdNTbXaYNco8a4RS i9yvFWdUrTvCHvp6Cqj1Q0EMulLE434v9hRvzBjF5Dr3I9Z3p8YvWD+ta4jSSIRw4gr8 qUHnJuZcSHjDn0uv1TOdgownXVKFowBhaLHKSEHASIWrFT4CFwfhP9nhv/sxID2ZlTb7 s2X/piZWe93IM2aykJ9GvkSZkzPFK6VkC0Ra9Dgbpy8oKxIBOLGqLfa4Twdl+boVdgf6 4jvVfUpvtxHDZ2NJIOjnLpc4szGDFrKmVvRiF4cg9A1WmECIJoIGmKHMZCRi20boGJQo +0Bg== X-Gm-Message-State: AOJu0YxSv4e0A4GuVzVu4Jv9L9xMgnB3Ksb6Lo11lSikU/rH31KEbr9m m+J/pNHwWXUBb7UF4Vxu7GxTy+4vJQujv7chW4stWyIL2wzdHPXHVT7Lgh6D X-Gm-Gg: ASbGncuza+mHAhO/VHiAg88Po73AT4XKPeCytY34isfQoZSUvKnvnSIAmi+aDV6ptc3 H9uIvBmYc0jzj0ZqhPni5PMYA5NuQhmGHtxU8RAks0KYKC0a6eCAMPSLGm+er8iin3bUA9+JAbg ZsbyKv0JEMXh6U4WIAcyW4MF9zkkPJdXVeuGlmdlH2xGxHSW3YU/QaqorV7BFibtXTLjJMJe5+U maTAip9n76BnMoasragRtnA+xEyYNN9w7tGSuxwiIL5rJ1ky66kP43FOfFKs5DKM4mcM0DZoH5h 7L1xJZTN53t4WYXcyyG/P6Q8LwCdr9M= X-Google-Smtp-Source: AGHT+IGs4dd6937LxwJEjzfa2opGhgTuH+ayGMz7vMK38N9SwMQu8cxaYSUPYw4CU3wdTKiryt1VLQ== X-Received: by 2002:a17:902:e74a:b0:216:32ea:c84b with SMTP id d9443c01a7336-21f4e73a9d9mr4322405ad.37.1738869486307; Thu, 06 Feb 2025 11:18:06 -0800 (PST) Received: from localhost.localdomain ([2800:2121:b040:c:c05d:8929:1e3d:9951]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653ca1csm16521215ad.58.2025.02.06.11.18.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 11:18:05 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 6 Feb 2025 16:17:47 -0300 Message-ID: <20250206191747.12860-1-jamrial@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250206160517.9746-1-jamrial@gmail.com> References: <20250206160517.9746-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avcodec/ac3dec: add a flush callback for the ac3 and eac3 decoders 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: Fixes ticket #10732 Signed-off-by: James Almer --- libavcodec/ac3dec.c | 10 ++++++++++ libavcodec/ac3dec.h | 40 ++++++++++++++++++++++----------------- libavcodec/ac3dec_fixed.c | 1 + libavcodec/ac3dec_float.c | 2 ++ 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index ff8cbfb0b4..2cf82abc19 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -252,6 +252,16 @@ static av_cold int ac3_decode_init(AVCodecContext *avctx) return 0; } +static av_cold void ac3_decode_flush(AVCodecContext *avctx) +{ + AC3DecodeContext *s = avctx->priv_data; + + memset(&s->frame_type, 0, sizeof(*s) - offsetof(AC3DecodeContext, frame_type)); + + AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256); + av_lfg_init(&s->dith_state, 0); +} + /** * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream. * GetBitContext within AC3DecodeContext must point to diff --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h index 98de7b5abf..cc6d1a118e 100644 --- a/libavcodec/ac3dec.h +++ b/libavcodec/ac3dec.h @@ -75,8 +75,30 @@ typedef struct AC3DecodeContext { AVCodecContext *avctx; ///< parent context GetBitContext gbc; ///< bitstream reader + AVTXContext *tx_128, *tx_256; + av_tx_fn tx_fn_128, tx_fn_256; + +///@name Optimization + BswapDSPContext bdsp; +#if USE_FIXED + AVFixedDSPContext *fdsp; +#else + AVFloatDSPContext *fdsp; +#endif + AC3DSPContext ac3dsp; + FmtConvertContext fmt_conv; ///< optimized conversion functions +///@} + + INTFLOAT *xcfptr[AC3_MAX_CHANNELS]; + INTFLOAT *dlyptr[AC3_MAX_CHANNELS]; + + AVChannelLayout downmix_layout; + SHORTFLOAT *downmix_coeffs[2]; ///< stereo downmix coefficients + +// Start of flushable fields ///@name Bit stream information ///@{ + // frame_type must be first int frame_type; ///< frame type (strmtyp) int substreamid; ///< substream identification int superframe_size; ///< current superframe size, in bytes @@ -164,7 +186,6 @@ typedef struct AC3DecodeContext { int fbw_channels; ///< number of full-bandwidth channels int channels; ///< number of total channels int lfe_ch; ///< index of LFE channel - SHORTFLOAT *downmix_coeffs[2]; ///< stereo downmix coefficients int downmixed; ///< indicates if coeffs are currently downmixed int output_mode; ///< output channel configuration int prev_output_mode; ///< output channel configuration for previous frame @@ -222,24 +243,9 @@ typedef struct AC3DecodeContext { ///@name IMDCT int block_switch[AC3_MAX_CHANNELS]; ///< block switch flags (blksw) - AVTXContext *tx_128, *tx_256; - av_tx_fn tx_fn_128, tx_fn_256; -///@} - -///@name Optimization - BswapDSPContext bdsp; -#if USE_FIXED - AVFixedDSPContext *fdsp; -#else - AVFloatDSPContext *fdsp; -#endif - AC3DSPContext ac3dsp; - FmtConvertContext fmt_conv; ///< optimized conversion functions ///@} SHORTFLOAT *outptr[AC3_MAX_CHANNELS]; - INTFLOAT *xcfptr[AC3_MAX_CHANNELS]; - INTFLOAT *dlyptr[AC3_MAX_CHANNELS]; ///@name Aligned arrays DECLARE_ALIGNED(16, int, fixed_coeffs)[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///< fixed-point transform coefficients @@ -252,7 +258,7 @@ typedef struct AC3DecodeContext { DECLARE_ALIGNED(32, SHORTFLOAT, output_buffer)[EAC3_MAX_CHANNELS][AC3_BLOCK_SIZE * 6]; ///< final output buffer ///@} - AVChannelLayout downmix_layout; +// End of flushable fields } AC3DecodeContext; /** diff --git a/libavcodec/ac3dec_fixed.c b/libavcodec/ac3dec_fixed.c index e0db9b2260..e284140e74 100644 --- a/libavcodec/ac3dec_fixed.c +++ b/libavcodec/ac3dec_fixed.c @@ -181,6 +181,7 @@ const FFCodec ff_ac3_fixed_decoder = { .p.priv_class = &ac3_decoder_class, .priv_data_size = sizeof (AC3DecodeContext), .init = ac3_decode_init, + .flush = ac3_decode_flush, .close = ac3_decode_end, FF_CODEC_DECODE_CB(ac3_decode_frame), .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | diff --git a/libavcodec/ac3dec_float.c b/libavcodec/ac3dec_float.c index 53d9d472c4..31f5590729 100644 --- a/libavcodec/ac3dec_float.c +++ b/libavcodec/ac3dec_float.c @@ -70,6 +70,7 @@ const FFCodec ff_ac3_decoder = { .p.id = AV_CODEC_ID_AC3, .priv_data_size = sizeof (AC3DecodeContext), .init = ac3_decode_init, + .flush = ac3_decode_flush, .close = ac3_decode_end, FF_CODEC_DECODE_CB(ac3_decode_frame), .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | @@ -88,6 +89,7 @@ const FFCodec ff_eac3_decoder = { .p.id = AV_CODEC_ID_EAC3, .priv_data_size = sizeof (AC3DecodeContext), .init = ac3_decode_init, + .flush = ac3_decode_flush, .close = ac3_decode_end, FF_CODEC_DECODE_CB(ac3_decode_frame), .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | -- 2.48.1 _______________________________________________ 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".