From patchwork Sat Dec 5 20:33:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 24355 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 01431448D1F for ; Sat, 5 Dec 2020 22:33:55 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C8C5468A3DF; Sat, 5 Dec 2020 22:33:54 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1E5046882DE for ; Sat, 5 Dec 2020 22:33:48 +0200 (EET) Received: by mail-wr1-f68.google.com with SMTP id 91so4779849wrj.7 for ; Sat, 05 Dec 2020 12:33:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=clID8GhXrs6MeF1SAe431Qr0ISqirY7Mwdi+xFgOT3U=; b=EOkkYD6JMwIufMlj15wT5sdXE2vrOeA5VYDIIjSuRFEQuzyBdm7MjJjalEazuCkM+q 0bWWtCpI9rWZ2Y2v/zL17b4LJ1jM9hYOeE49UxQiZ6melk8RzIcFs975iUEnMqLvMZ4e DwZwrkXv+rkTZy2nSAif+Z1UOuB2b1zUeR+fKJmin+Gvu101GgbzBExs7kkqSylSV8hD O/F6Ekwnq6mE7zHneAXUtnqNbtsE2hUsEiSBeDWQKm2jWI3yyfuJ9mYaQ1yp4zFDN5Qh OzZPz4WJHJZ77vn9YM4pVI+bd/s2W1ZOVeCphzijUfsvPt9pvdem7FLXf37oj+24CvRu V79Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=clID8GhXrs6MeF1SAe431Qr0ISqirY7Mwdi+xFgOT3U=; b=cPCGmJtQDbJmdyOwnTiI7X25VSrQ8TTvxxCnf668QiCtaOTC0DA545a9vXOnZVkhXU TMuRlBIUVr+lyeJTtW2s+FPzDiTaVYLpwvJe8/OSja/gH83WwZcGObFprzUqtxZaWaNz Dl6ZcoS7KvXxR80yseLHwA6hu6o39Xc4lF0YRcyA4YRr7Z/2scD0apW4DomqQD14UOlv p7iufWtGgbNdLdEZnUwo7/L13qzZ7GDhfcdxPfZ68Z/Y44lo4siOtAlbabGumcTBcH22 wUkuQPDIGcpx+s2YISrYAeE8smj0iL1wrmoJEQicZu8KvSI/md4H/7oAXM+Xey/UzRXR HgMg== X-Gm-Message-State: AOAM530IVr02IZw/cp/I77lBx+SgkjH0hKyFb+szxdOW4LzoJhYw3QhF 9DDptB1Z94ZTO8BcrDfvooZSb1YF9HEKjA== X-Google-Smtp-Source: ABdhPJzGzIztCPbHxOOc/OcAhD+qhNuh+QhOJE/LPmKD5RbfN+VHPwtpfMZxWHU70ZJ8sCjCiuJI8A== X-Received: by 2002:a05:6000:104b:: with SMTP id c11mr11542886wrx.329.1607200427235; Sat, 05 Dec 2020 12:33:47 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id e4sm8747079wrr.32.2020.12.05.12.33.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Dec 2020 12:33:46 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 5 Dec 2020 21:33:33 +0100 Message-Id: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/7] avcodec/[e]ac3enc: Make encoders init-threadsafe, fix race X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" ff_eac3_exponent_init() set values twice when initializing a static table; ergo the initialization code must not run concurrently with a running EAC-3 encoder. Yet this code is executed every time an EAC-3 encoder is initialized. So use ff_thread_once() for this and also for a similar initialization performed for all AC-3 encoders to make them all init-threadsafe. Signed-off-by: Andreas Rheinhardt --- libavcodec/ac3enc.c | 17 +++++++++-------- libavcodec/ac3enc_fixed.c | 2 +- libavcodec/ac3enc_float.c | 2 +- libavcodec/eac3enc.c | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index 37dc0fb2ef..3354bf6b45 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -35,6 +35,7 @@ #include "libavutil/crc.h" #include "libavutil/internal.h" #include "libavutil/opt.h" +#include "libavutil/thread.h" #include "avcodec.h" #include "internal.h" #include "me_cmp.h" @@ -303,7 +304,7 @@ void ff_ac3_apply_rematrixing(AC3EncodeContext *s) /* * Initialize exponent tables. */ -static av_cold void exponent_init(AC3EncodeContext *s) +static av_cold void exponent_init(void) { int expstr, i, grpsize; @@ -316,9 +317,6 @@ static av_cold void exponent_init(AC3EncodeContext *s) } /* LFE */ exponent_group_tab[0][0][7] = 2; - - if (CONFIG_EAC3_ENCODER && s->eac3) - ff_eac3_exponent_init(); } @@ -2408,6 +2406,7 @@ static av_cold int allocate_buffers(AC3EncodeContext *s) av_cold int ff_ac3_encode_init(AVCodecContext *avctx) { + static AVOnce init_static_once = AV_ONCE_INIT; AC3EncodeContext *s = avctx->priv_data; int ret, frame_size_58; @@ -2447,15 +2446,15 @@ av_cold int ff_ac3_encode_init(AVCodecContext *avctx) s->mdct_init = ff_ac3_float_mdct_init; s->allocate_sample_buffers = ff_ac3_float_allocate_sample_buffers; } - if (CONFIG_EAC3_ENCODER && s->eac3) + if (CONFIG_EAC3_ENCODER && s->eac3) { + static AVOnce init_static_once = AV_ONCE_INIT; + ff_thread_once(&init_static_once, ff_eac3_exponent_init); s->output_frame_header = ff_eac3_output_frame_header; - else + } else s->output_frame_header = ac3_output_frame_header; set_bandwidth(s); - exponent_init(s); - bit_alloc_init(s); ret = s->mdct_init(s); @@ -2472,5 +2471,7 @@ av_cold int ff_ac3_encode_init(AVCodecContext *avctx) dprint_options(s); + ff_thread_once(&init_static_once, exponent_init); + return 0; } diff --git a/libavcodec/ac3enc_fixed.c b/libavcodec/ac3enc_fixed.c index 428bbfb3c5..d2e67f3214 100644 --- a/libavcodec/ac3enc_fixed.c +++ b/libavcodec/ac3enc_fixed.c @@ -155,7 +155,7 @@ AVCodec ff_ac3_fixed_encoder = { .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_NONE }, .priv_class = &ac3enc_class, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .supported_samplerates = ff_ac3_sample_rate_tab, .channel_layouts = ff_ac3_channel_layouts, .defaults = ac3_defaults, diff --git a/libavcodec/ac3enc_float.c b/libavcodec/ac3enc_float.c index 99863a9722..571f603182 100644 --- a/libavcodec/ac3enc_float.c +++ b/libavcodec/ac3enc_float.c @@ -153,5 +153,5 @@ AVCodec ff_ac3_encoder = { .supported_samplerates = ff_ac3_sample_rate_tab, .channel_layouts = ff_ac3_channel_layouts, .defaults = ac3_defaults, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/eac3enc.c b/libavcodec/eac3enc.c index 8e1032f268..00721aa645 100644 --- a/libavcodec/eac3enc.c +++ b/libavcodec/eac3enc.c @@ -266,5 +266,5 @@ AVCodec ff_eac3_encoder = { .supported_samplerates = ff_ac3_sample_rate_tab, .channel_layouts = ff_ac3_channel_layouts, .defaults = ac3_defaults, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, }; From patchwork Sat Dec 5 20:33:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 24357 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 3691A448E0A for ; Sat, 5 Dec 2020 22:34:21 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 21C4868A718; Sat, 5 Dec 2020 22:34:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6F8256882DE for ; Sat, 5 Dec 2020 22:34:14 +0200 (EET) Received: by mail-wr1-f65.google.com with SMTP id g14so8705449wrm.13 for ; Sat, 05 Dec 2020 12:34:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+0W82GAQ7epA/T7pJyv6ADfsVT28XnDEkQhKkHIlqkM=; b=CIc9pe4ERjeRe9vYqLMlodRDNlESP8bovmpk2BR3F424qisD4sVekP2KWUDT/bFOA+ 5petD9FaJdnEHBfGQgZrCLSZClTXevK+LZY3kSsdvMxYM5HNFhf7WCTr1wqRbQwYGfkU Qi2PRUno3Bie6skXjEEQL7elFTrdc0/X4v2AdIj3clKztlgaKYF6sRP0d5zohWeb5jVJ G6zaWTt3Wp1DvfRj8jp4KgiAhNuAzggUg9YYhCJWW1Sf0JQSROwWg7wV0qBxRCRhB8p7 VYioeUMzWtyZYPGUW5OM2ZGQE6jrOZwZIxhOLkI1QhwLsxbPTex1kH2/eGqDgtluSLYu aF4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+0W82GAQ7epA/T7pJyv6ADfsVT28XnDEkQhKkHIlqkM=; b=mR2JAZWDqeBftv4y7KU3XSeLSivPpWOfjq0QuZ6ExDDHwk4wfcJnWm5I1PR1cambVl UcFPjkZzmJI3BMCZ0iJ92LP+OJYB2czZK2myxIkysCwWqGBE/3AfwaJkqxMbFhr1R1QK 49XRivxX/jVluqXRwUUdr76HlyclzQsa2T49sURyB/vrqfeNE3wKwqr9qcENd3VPkrWe EZUfAFE44v+NPbIbl/HkPXBkuBhqKaeuzEFZ4C+yRcglfwXYPML6NmGO3BaepQpGN0L2 Be/nGYGLrxLVw2D554ohnVdXZPzZE3avgGpMfhzwdZxkrPFecmXyzg+ldNFqGrF4P/qN fp9A== X-Gm-Message-State: AOAM531KGnU4GxkYo7fAX82Fd814yDVIMy/a2L2o7LMa3DHZX2F7WoKs xk2jQ59+RrxXxWnLrBySZmK9XGuN1ZOK3A== X-Google-Smtp-Source: ABdhPJxDM/ZvQPHfYJ+jknAGBSoUuzyyqGEY++kiTSlYu96UcMFrspgqLpR+mYOWWZHKsvAgte7HVg== X-Received: by 2002:a5d:6250:: with SMTP id m16mr11806732wrv.400.1607200453543; Sat, 05 Dec 2020 12:34:13 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id e4sm8747079wrr.32.2020.12.05.12.34.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Dec 2020 12:34:13 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 5 Dec 2020 21:33:34 +0100 Message-Id: <20201205203340.19357-2-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> References: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/7] avcodec/ac3enc: Set function pointers earlier X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Andreas Rheinhardt --- The mdct_init and allocate_sample_buffers function pointers could actually be completely avoided by allocating the buffers in the respective init functions after ff_ac3_encode_init() has returned. The end of allocate_buffers() (which already differs based upon whether fixed_point is set or not) could also be moved there. libavcodec/ac3enc.c | 13 +------------ libavcodec/ac3enc.h | 12 ------------ libavcodec/ac3enc_fixed.c | 7 +++++-- libavcodec/ac3enc_float.c | 7 +++++-- libavcodec/ac3enc_template.c | 2 +- 5 files changed, 12 insertions(+), 29 deletions(-) diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index 3354bf6b45..30f6ca9dce 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -2048,8 +2048,7 @@ av_cold int ff_ac3_encode_close(AVCodecContext *avctx) av_freep(&block->cpl_coord_mant); } - if (s->mdct_end) - s->mdct_end(s); + s->mdct_end(s); return 0; } @@ -2436,16 +2435,6 @@ av_cold int ff_ac3_encode_init(AVCodecContext *avctx) s->crc_inv[1] = pow_poly((CRC16_POLY >> 1), (8 * frame_size_58) - 16, CRC16_POLY); } - /* set function pointers */ - if (CONFIG_AC3_FIXED_ENCODER && s->fixed_point) { - s->mdct_end = ff_ac3_fixed_mdct_end; - s->mdct_init = ff_ac3_fixed_mdct_init; - s->allocate_sample_buffers = ff_ac3_fixed_allocate_sample_buffers; - } else if (CONFIG_AC3_ENCODER || CONFIG_EAC3_ENCODER) { - s->mdct_end = ff_ac3_float_mdct_end; - s->mdct_init = ff_ac3_float_mdct_init; - s->allocate_sample_buffers = ff_ac3_float_allocate_sample_buffers; - } if (CONFIG_EAC3_ENCODER && s->eac3) { static AVOnce init_static_once = AV_ONCE_INIT; ff_thread_once(&init_static_once, ff_eac3_exponent_init); diff --git a/libavcodec/ac3enc.h b/libavcodec/ac3enc.h index 1e4a7405bf..b4e566b4ef 100644 --- a/libavcodec/ac3enc.h +++ b/libavcodec/ac3enc.h @@ -295,20 +295,8 @@ void ff_ac3_quantize_mantissas(AC3EncodeContext *s); void ff_ac3_output_frame(AC3EncodeContext *s, unsigned char *frame); -/* prototypes for functions in ac3enc_fixed.c and ac3enc_float.c */ - -void ff_ac3_fixed_mdct_end(AC3EncodeContext *s); -void ff_ac3_float_mdct_end(AC3EncodeContext *s); - -int ff_ac3_fixed_mdct_init(AC3EncodeContext *s); -int ff_ac3_float_mdct_init(AC3EncodeContext *s); - - /* prototypes for functions in ac3enc_template.c */ -int ff_ac3_fixed_allocate_sample_buffers(AC3EncodeContext *s); -int ff_ac3_float_allocate_sample_buffers(AC3EncodeContext *s); - int ff_ac3_fixed_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr); int ff_ac3_float_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, diff --git a/libavcodec/ac3enc_fixed.c b/libavcodec/ac3enc_fixed.c index d2e67f3214..879e364d4e 100644 --- a/libavcodec/ac3enc_fixed.c +++ b/libavcodec/ac3enc_fixed.c @@ -115,7 +115,7 @@ static CoefType calc_cpl_coord(CoefSumType energy_ch, CoefSumType energy_cpl) * * @param s AC-3 encoder private context */ -av_cold void ff_ac3_fixed_mdct_end(AC3EncodeContext *s) +static av_cold void ac3_fixed_mdct_end(AC3EncodeContext *s) { ff_mdct_end(&s->mdct); } @@ -127,7 +127,7 @@ av_cold void ff_ac3_fixed_mdct_end(AC3EncodeContext *s) * @param s AC-3 encoder private context * @return 0 on success, negative error code on failure */ -av_cold int ff_ac3_fixed_mdct_init(AC3EncodeContext *s) +static av_cold int ac3_fixed_mdct_init(AC3EncodeContext *s) { int ret = ff_mdct_init(&s->mdct, 9, 0, -1.0); s->mdct_window = ff_ac3_window; @@ -139,6 +139,9 @@ static av_cold int ac3_fixed_encode_init(AVCodecContext *avctx) { AC3EncodeContext *s = avctx->priv_data; s->fixed_point = 1; + s->mdct_end = ac3_fixed_mdct_end; + s->mdct_init = ac3_fixed_mdct_init; + s->allocate_sample_buffers = allocate_sample_buffers; return ff_ac3_encode_init(avctx); } diff --git a/libavcodec/ac3enc_float.c b/libavcodec/ac3enc_float.c index 571f603182..ef23b417cf 100644 --- a/libavcodec/ac3enc_float.c +++ b/libavcodec/ac3enc_float.c @@ -94,7 +94,7 @@ static void sum_square_butterfly(AC3EncodeContext *s, float sum[4], * * @param s AC-3 encoder private context */ -av_cold void ff_ac3_float_mdct_end(AC3EncodeContext *s) +static av_cold void ac3_float_mdct_end(AC3EncodeContext *s) { ff_mdct_end(&s->mdct); av_freep(&s->mdct_window); @@ -107,7 +107,7 @@ av_cold void ff_ac3_float_mdct_end(AC3EncodeContext *s) * @param s AC-3 encoder private context * @return 0 on success, negative error code on failure */ -av_cold int ff_ac3_float_mdct_init(AC3EncodeContext *s) +static av_cold int ac3_float_mdct_init(AC3EncodeContext *s) { float *window; int i, n, n2; @@ -132,6 +132,9 @@ av_cold int ff_ac3_float_mdct_init(AC3EncodeContext *s) av_cold int ff_ac3_float_encode_init(AVCodecContext *avctx) { AC3EncodeContext *s = avctx->priv_data; + s->mdct_end = ac3_float_mdct_end; + s->mdct_init = ac3_float_mdct_init; + s->allocate_sample_buffers = allocate_sample_buffers; s->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT); if (!s->fdsp) return AVERROR(ENOMEM); diff --git a/libavcodec/ac3enc_template.c b/libavcodec/ac3enc_template.c index b85fe51ef5..da5d67afc9 100644 --- a/libavcodec/ac3enc_template.c +++ b/libavcodec/ac3enc_template.c @@ -37,7 +37,7 @@ #include "eac3enc.h" -int AC3_NAME(allocate_sample_buffers)(AC3EncodeContext *s) +static int allocate_sample_buffers(AC3EncodeContext *s) { int ch; From patchwork Sat Dec 5 20:33:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 24358 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 17396448E0A for ; Sat, 5 Dec 2020 22:34:22 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 06ECD68A711; Sat, 5 Dec 2020 22:34:22 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2C78D6882DE for ; Sat, 5 Dec 2020 22:34:15 +0200 (EET) Received: by mail-wr1-f48.google.com with SMTP id x6so4795211wro.11 for ; Sat, 05 Dec 2020 12:34:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qha8hT7ZxbjPW3i2Ercf7xdN27WshRUKly5pkkN1ZtY=; b=UV8tpxtd3opADhHg3AwZWbbcVFuFkCZJgLt2PfxaBWoNebs9PXUmDxViglB3L343/f sYwP1tsUt1/t9T0Wb2MHmP/vTtWa4bDw02u2w+xHs16zp4Z5VVRQ/qfCkRFHqaNy0srJ RfnnAgbSgG44ufRuVilrxbmeU4gPr4gjjs8VPurb8+CWe4lR3KBFsADiDQNuOVmXEEOI jMdjivXMrjMTVO8YOIx8DnjJssfZm0h25G9f545V7eb5jWq79ICYZCmonG09q+PYOovm xsUgZmZzE1SmhvfSKluiiq1O8KN+53q1mmUBwcOFp6++dxTgZWy4xAMkyqpKdeoVJeZ8 hK0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qha8hT7ZxbjPW3i2Ercf7xdN27WshRUKly5pkkN1ZtY=; b=L0vsB6GVyOG4AxkxEe+biXCioOrDpUB3LTM06ngZW/d0i/6GiM2YHtb8h9U2fsioHw Bbr1EgZ/7wLCtQsmawqBcV4X29ltI/ghNSDX7d016ajDlzl7NA3BR9TJBmbZj3yuNstA 4VaEDdFPFHBo9wvNKJb9a93KSemdM6G3KJi07qyToN/4CcyW5vBDSMev8yA+wqEScVVD eWd6wnKhJqF6h39lzpSIP948uSChVFQWzo3CIIIkqvc+K6jvnaSrdhiJepuKxm/fyezh qnQscA+cAu8qGW5Mpk5aDJhU4UnuPK+jK+VItTa9ONm6da51w7FNSqZuCdBNnUX7OODi 93tw== X-Gm-Message-State: AOAM533yYy4sebnjtiAQTKAw1jpNjkBUxz6V5eiaGdqaBeqbEoy2wZTq zMrBVMpUIZvkWeACYO1SrIU4z5yE0jxS2Q== X-Google-Smtp-Source: ABdhPJwpl9IAYb+39Ph40j/ZS3YF1DOYfYasDI9KoGdHz+YaOPgJzcp3Gk9dO/KCaxXQAEfBDd64zw== X-Received: by 2002:adf:9d49:: with SMTP id o9mr11937038wre.413.1607200454388; Sat, 05 Dec 2020 12:34:14 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id e4sm8747079wrr.32.2020.12.05.12.34.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Dec 2020 12:34:13 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 5 Dec 2020 21:33:35 +0100 Message-Id: <20201205203340.19357-3-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> References: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] avcodec/[e]ac3enc: Don't invade CONFIG_ namespace X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Andreas Rheinhardt --- libavcodec/ac3enc.h | 6 +++--- libavcodec/ac3enc_fixed.c | 2 +- libavcodec/ac3enc_float.c | 2 +- libavcodec/ac3enc_template.c | 8 ++++---- libavcodec/eac3enc.c | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/libavcodec/ac3enc.h b/libavcodec/ac3enc.h index b4e566b4ef..6d8f186a1a 100644 --- a/libavcodec/ac3enc.h +++ b/libavcodec/ac3enc.h @@ -41,8 +41,8 @@ #include "put_bits.h" #include "audiodsp.h" -#ifndef CONFIG_AC3ENC_FLOAT -#define CONFIG_AC3ENC_FLOAT 0 +#ifndef AC3ENC_FLOAT +#define AC3ENC_FLOAT 0 #endif #define OFFSET(param) offsetof(AC3EncodeContext, options.param) @@ -52,7 +52,7 @@ #define AC3ENC_TYPE_AC3 1 #define AC3ENC_TYPE_EAC3 2 -#if CONFIG_AC3ENC_FLOAT +#if AC3ENC_FLOAT #define AC3_NAME(x) ff_ac3_float_ ## x #define MAC_COEF(d,a,b) ((d)+=(a)*(b)) #define COEF_MIN (-16777215.0/16777216.0) diff --git a/libavcodec/ac3enc_fixed.c b/libavcodec/ac3enc_fixed.c index 879e364d4e..7818dd8c35 100644 --- a/libavcodec/ac3enc_fixed.c +++ b/libavcodec/ac3enc_fixed.c @@ -27,7 +27,7 @@ */ #define FFT_FLOAT 0 -#undef CONFIG_AC3ENC_FLOAT +#define AC3ENC_FLOAT 0 #include "internal.h" #include "audiodsp.h" #include "ac3enc.h" diff --git a/libavcodec/ac3enc_float.c b/libavcodec/ac3enc_float.c index ef23b417cf..45bfed34f9 100644 --- a/libavcodec/ac3enc_float.c +++ b/libavcodec/ac3enc_float.c @@ -26,7 +26,7 @@ * floating-point AC-3 encoder. */ -#define CONFIG_AC3ENC_FLOAT 1 +#define AC3ENC_FLOAT 1 #include "internal.h" #include "audiodsp.h" #include "ac3enc.h" diff --git a/libavcodec/ac3enc_template.c b/libavcodec/ac3enc_template.c index da5d67afc9..cbb7f63f79 100644 --- a/libavcodec/ac3enc_template.c +++ b/libavcodec/ac3enc_template.c @@ -90,7 +90,7 @@ static void apply_mdct(AC3EncodeContext *s) AC3Block *block = &s->blocks[blk]; const SampleType *input_samples = &s->planar_samples[ch][blk * AC3_BLOCK_SIZE]; -#if CONFIG_AC3ENC_FLOAT +#if AC3ENC_FLOAT s->fdsp->vector_fmul(s->windowed_samples, input_samples, s->mdct_window, AC3_WINDOW_SIZE); #else @@ -114,7 +114,7 @@ static void apply_mdct(AC3EncodeContext *s) static void apply_channel_coupling(AC3EncodeContext *s) { LOCAL_ALIGNED_16(CoefType, cpl_coords, [AC3_MAX_BLOCKS], [AC3_MAX_CHANNELS][16]); -#if CONFIG_AC3ENC_FLOAT +#if AC3ENC_FLOAT LOCAL_ALIGNED_16(int32_t, fixed_cpl_coords, [AC3_MAX_BLOCKS], [AC3_MAX_CHANNELS][16]); #else int32_t (*fixed_cpl_coords)[AC3_MAX_CHANNELS][16] = cpl_coords; @@ -124,7 +124,7 @@ static void apply_channel_coupling(AC3EncodeContext *s) int cpl_start, num_cpl_coefs; memset(cpl_coords, 0, AC3_MAX_BLOCKS * sizeof(*cpl_coords)); -#if CONFIG_AC3ENC_FLOAT +#if AC3ENC_FLOAT memset(fixed_cpl_coords, 0, AC3_MAX_BLOCKS * sizeof(*cpl_coords)); #endif @@ -265,7 +265,7 @@ static void apply_channel_coupling(AC3EncodeContext *s) if (!block->cpl_in_use) continue; -#if CONFIG_AC3ENC_FLOAT +#if AC3ENC_FLOAT s->ac3dsp.float_to_fixed24(fixed_cpl_coords[blk][1], cpl_coords[blk][1], s->fbw_channels * 16); diff --git a/libavcodec/eac3enc.c b/libavcodec/eac3enc.c index 00721aa645..585588a480 100644 --- a/libavcodec/eac3enc.c +++ b/libavcodec/eac3enc.c @@ -24,7 +24,7 @@ * E-AC-3 encoder */ -#define CONFIG_AC3ENC_FLOAT 1 +#define AC3ENC_FLOAT 1 #include "libavutil/attributes.h" #include "ac3enc.h" From patchwork Sat Dec 5 20:33:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 24361 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 0592B44B27B for ; Sat, 5 Dec 2020 22:41:35 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D59A668A6E6; Sat, 5 Dec 2020 22:41:34 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5374668A682 for ; Sat, 5 Dec 2020 22:41:28 +0200 (EET) Received: by mail-wm1-f66.google.com with SMTP id f190so10110780wme.1 for ; Sat, 05 Dec 2020 12:41:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NFzuNHnYIEb2RwNMIQh7tTLg6Xynp7/fqnmy4NrD70M=; b=Ocl5RHGGp1/g0qs4WB+trMh/V6qfGEBUk1Yy+Cfp3OEDf2WbQdyJQc7UvhD3E4TKRR UmPkY5row3S8nDJ2Tm8TDAwmfexLqiKQ0fdJbCAOMyK675nvVDfQQdwb4gpyZET0qyTn Uv7Hc+vWPHNcX+RBQNd/oV9ZhsPHaCy2qk4/tFP8uGtcLZKDSAxvyU4eNuIQCrSCK7kq C/Aa7VifO7Hz8R9d/QPc9/6Pq/d0FYieGyDoa0qCSVEBLNqTsyb+Yg0YQktI3A+ovCwU Y8xo8uv01PhVcu3OPs1iVTPNAS0cqDiGN3hFsX5pRErwBFe/EECWpfLp5Gx9+YnbEcdr V/zA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NFzuNHnYIEb2RwNMIQh7tTLg6Xynp7/fqnmy4NrD70M=; b=MWke1MVqB4ptDUa2bQSlhKvmNNG7DRtsdm7eCZ0reVARy3FY+/6O31N9oBWMcS7b4p 0RPfea41Msy5ytomqG8EQzx+ZYim96jp3CyjmeXssXt1OM+xWnxWyjNfZUqDhmPYAROt FEoNAaoUFbX/KXOs/dHbSyng9HeGlBroWp2UuqJCk6p7zvm3fOvmXSSSqWykk+/Io72Q ROm5mH3IWWGubWgt+BXuD1BWveKo7lWT1nZX4qOTI2tvjYHJxQ062CMbkzSIMqPCpb6g YIsN7AW+lbDFrWDudqJ3plVwr3OF7I835JmN2l+qnIYaGC2ntbZIq1qWwg0ZtMFbrOHY AD5w== X-Gm-Message-State: AOAM530ynTGybi4JuOnHook/Hq4IND2xfi1ZU5KbrErGmFU/Xdbp3qoT 36tSO3ogTwnk3oRgL0FZ+A/15Y5ZDNLD2g== X-Google-Smtp-Source: ABdhPJz602DJXQKsgf8pgaJ7/79WZ2j8474d1fIYd1WwBeyMCfQjUmneDQd6SrPJxuWuhqtn7Ti6XQ== X-Received: by 2002:a1c:a5d4:: with SMTP id o203mr10707719wme.41.1607200455400; Sat, 05 Dec 2020 12:34:15 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id e4sm8747079wrr.32.2020.12.05.12.34.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Dec 2020 12:34:14 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 5 Dec 2020 21:33:36 +0100 Message-Id: <20201205203340.19357-4-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> References: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/7] avcodec/ac3enc_template: Perform compile-time checks at compile-time X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Runtime checks for whether the encoder is fixed-point or not are unnecessary here as this is a template; furthermore, there is no fixed-point EAC-3 encoder, so some checks for whether one is in EAC-3 mode can be omitted when doing fixed-point encoding. Signed-off-by: Andreas Rheinhardt --- libavcodec/ac3enc_template.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/libavcodec/ac3enc_template.c b/libavcodec/ac3enc_template.c index cbb7f63f79..974a3f9f74 100644 --- a/libavcodec/ac3enc_template.c +++ b/libavcodec/ac3enc_template.c @@ -97,8 +97,7 @@ static void apply_mdct(AC3EncodeContext *s) s->ac3dsp.apply_window_int16(s->windowed_samples, input_samples, s->mdct_window, AC3_WINDOW_SIZE); - if (s->fixed_point) - block->coeff_shift[ch+1] = normalize_samples(s); + block->coeff_shift[ch + 1] = normalize_samples(s); #endif s->mdct.mdct_calcw(&s->mdct, block->mdct_coef[ch+1], @@ -311,7 +310,7 @@ static void apply_channel_coupling(AC3EncodeContext *s) } } - if (CONFIG_EAC3_ENCODER && s->eac3) + if (AC3ENC_FLOAT && CONFIG_EAC3_ENCODER && s->eac3) ff_eac3_set_cpl_states(s); } @@ -383,14 +382,14 @@ int AC3_NAME(encode_frame)(AVCodecContext *avctx, AVPacket *avpkt, return ret; } - if (s->bit_alloc.sr_code == 1 || s->eac3) + if (s->bit_alloc.sr_code == 1 || (AC3ENC_FLOAT && s->eac3)) ff_ac3_adjust_frame_size(s); copy_input_samples(s, (SampleType **)frame->extended_data); apply_mdct(s); - if (s->fixed_point) + if (!AC3ENC_FLOAT) scale_coefficients(s); clip_coefficients(&s->adsp, s->blocks[0].mdct_coef[1], @@ -404,7 +403,7 @@ int AC3_NAME(encode_frame)(AVCodecContext *avctx, AVPacket *avpkt, compute_rematrixing_strategy(s); - if (!s->fixed_point) + if (AC3ENC_FLOAT) scale_coefficients(s); ff_ac3_apply_rematrixing(s); From patchwork Sat Dec 5 20:33:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 24362 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id C364144B2FB for ; Sat, 5 Dec 2020 22:42:18 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A366D68A7E5; Sat, 5 Dec 2020 22:42:18 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 33737689C54 for ; Sat, 5 Dec 2020 22:42:12 +0200 (EET) Received: by mail-wm1-f68.google.com with SMTP id a3so10048614wmb.5 for ; Sat, 05 Dec 2020 12:42:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Cy8PpIMdlTyYnfdlxHNrOVnLx81ib6y1Q9OnkOmE/rY=; b=E0nzl7/QPb22m8mq4biCDjCVK3TbeScZXgwH5nZmN/8Nvzk7hFPZcakQVR1NbC9gPS SlUtuDCBeuIjX2TX+Zd1AFcpK5+GF33zqlPZw5FiYGOafKxoUqw2Ap+r/g9rqTwBNRt7 HMiqO78v9oaFrBrCXeAJbN8YKp+tor68WbqUAn0sf8utbb4BCSQjay51llARX5CwMO2H Xi51FBDmTcjSH0B9WihYeromEkFxWUbAZ6TGmIPxOjDFYdhSDZYt0hQfTMJFb/pq07f/ kxnT/g1eTxV035PPx+rVy0+0LG8OMa36vtUkeQCBz10oxNPPx3syWTnMw01aDi0XAGGU lWKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Cy8PpIMdlTyYnfdlxHNrOVnLx81ib6y1Q9OnkOmE/rY=; b=pWbL0uCaNSBHm0vJ2FABJHLHWXsd9TjLNlQIEcVeyFOBrJtFYVHwpcgc4a0o9DkWyd aybg5fxmDm32hRiS3KBFqLb9PwtzbnWxCyZBCmQwN02lu+2TkzzTLWQ5rCgMTVK9/96m oY0n7cQlNsacdXvgn4CpSThk+bvzuSHxPgYQzGgTzM2VS0TsLfyW7RnyECkN0HOm3xBD ZkLUv2CsssbLsx2pXgHU3yKKKOUZsN+jwdcc2hFDg0Tedsp0xGlM0JkIzVeRml+8ejqZ 5fPn361SrO85z67typdYT3+2qxbWIdiMJ+8GdQ1yQYjM2rWozLNFrkE45CNAZj29dkft M6kQ== X-Gm-Message-State: AOAM531W1V1VbmOAbwR8X1rHn8sEjMuUydXs0ctiZ27p23pRtj22anGU 4+0MY6150ddGJOrATM9wE45pRH5rbsxAcA== X-Google-Smtp-Source: ABdhPJyvIoYO1fnseyytWJ35Gx3JosmlQq99grYj+ZGjozUhCwTrZka8MX9maKCkg/dIa2OceJHdkQ== X-Received: by 2002:a1c:2c4:: with SMTP id 187mr10929569wmc.187.1607200457620; Sat, 05 Dec 2020 12:34:17 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id e4sm8747079wrr.32.2020.12.05.12.34.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Dec 2020 12:34:17 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 5 Dec 2020 21:33:37 +0100 Message-Id: <20201205203340.19357-5-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> References: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/7] avcodec/ac3enc: Factor common end of float/fixed encode_frame out X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Andreas Rheinhardt --- libavcodec/ac3enc.c | 42 ++++++++++++++++++++++++++++++------ libavcodec/ac3enc.h | 14 ++---------- libavcodec/ac3enc_template.c | 24 +-------------------- 3 files changed, 39 insertions(+), 41 deletions(-) diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index 30f6ca9dce..8079b98b68 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -270,7 +270,7 @@ void ff_ac3_compute_coupling_strategy(AC3EncodeContext *s) * * @param s AC-3 encoder private context */ -void ff_ac3_apply_rematrixing(AC3EncodeContext *s) +static void ac3_apply_rematrixing(AC3EncodeContext *s) { int nb_coefs; int blk, bnd, i; @@ -574,7 +574,7 @@ static int count_exponent_bits(AC3EncodeContext *s) * * @param s AC-3 encoder private context */ -void ff_ac3_group_exponents(AC3EncodeContext *s) +static void ac3_group_exponents(AC3EncodeContext *s) { int blk, ch, i, cpl; int group_size, nb_groups; @@ -632,7 +632,7 @@ void ff_ac3_group_exponents(AC3EncodeContext *s) * * @param s AC-3 encoder private context */ -void ff_ac3_process_exponents(AC3EncodeContext *s) +static void ac3_process_exponents(AC3EncodeContext *s) { extract_exponents(s); @@ -1141,7 +1141,7 @@ static int cbr_bit_allocation(AC3EncodeContext *s) * frame size. Output is the SNR offset and a set of bit allocation pointers * used to quantize the mantissas. */ -int ff_ac3_compute_bit_allocation(AC3EncodeContext *s) +static int ac3_compute_bit_allocation(AC3EncodeContext *s) { count_frame_bits(s); @@ -1295,7 +1295,7 @@ static void quantize_mantissas_blk_ch(AC3Mant *s, int32_t *fixed_coef, * * @param s AC-3 encoder private context */ -void ff_ac3_quantize_mantissas(AC3EncodeContext *s) +static void ac3_quantize_mantissas(AC3EncodeContext *s) { int blk, ch, ch0=0, got_cpl; @@ -1656,7 +1656,7 @@ static void output_frame_end(AC3EncodeContext *s) * @param s AC-3 encoder private context * @param frame output data buffer */ -void ff_ac3_output_frame(AC3EncodeContext *s, unsigned char *frame) +static void ac3_output_frame(AC3EncodeContext *s, unsigned char *frame) { int blk; @@ -1670,6 +1670,36 @@ void ff_ac3_output_frame(AC3EncodeContext *s, unsigned char *frame) output_frame_end(s); } +int ff_ac3_encode_frame_common_end(AVCodecContext *avctx, AVPacket *avpkt, + const AVFrame *frame, int *got_packet_ptr) +{ + AC3EncodeContext *const s = avctx->priv_data; + int ret; + + ac3_apply_rematrixing(s); + + ac3_process_exponents(s); + + ret = ac3_compute_bit_allocation(s); + if (ret) { + av_log(avctx, AV_LOG_ERROR, "Bit allocation failed. Try increasing the bitrate.\n"); + return ret; + } + + ac3_group_exponents(s); + + ac3_quantize_mantissas(s); + + if ((ret = ff_alloc_packet2(avctx, avpkt, s->frame_size, 0)) < 0) + return ret; + ac3_output_frame(s, avpkt->data); + + if (frame->pts != AV_NOPTS_VALUE) + avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding); + + *got_packet_ptr = 1; + return 0; +} static void dprint_options(AC3EncodeContext *s) { diff --git a/libavcodec/ac3enc.h b/libavcodec/ac3enc.h index 6d8f186a1a..044564ecb4 100644 --- a/libavcodec/ac3enc.h +++ b/libavcodec/ac3enc.h @@ -282,18 +282,8 @@ void ff_ac3_adjust_frame_size(AC3EncodeContext *s); void ff_ac3_compute_coupling_strategy(AC3EncodeContext *s); -void ff_ac3_apply_rematrixing(AC3EncodeContext *s); - -void ff_ac3_process_exponents(AC3EncodeContext *s); - -int ff_ac3_compute_bit_allocation(AC3EncodeContext *s); - -void ff_ac3_group_exponents(AC3EncodeContext *s); - -void ff_ac3_quantize_mantissas(AC3EncodeContext *s); - -void ff_ac3_output_frame(AC3EncodeContext *s, unsigned char *frame); - +int ff_ac3_encode_frame_common_end(AVCodecContext *avctx, AVPacket *avpkt, + const AVFrame *frame, int *got_packet_ptr); /* prototypes for functions in ac3enc_template.c */ diff --git a/libavcodec/ac3enc_template.c b/libavcodec/ac3enc_template.c index 974a3f9f74..f3274cf9eb 100644 --- a/libavcodec/ac3enc_template.c +++ b/libavcodec/ac3enc_template.c @@ -406,27 +406,5 @@ int AC3_NAME(encode_frame)(AVCodecContext *avctx, AVPacket *avpkt, if (AC3ENC_FLOAT) scale_coefficients(s); - ff_ac3_apply_rematrixing(s); - - ff_ac3_process_exponents(s); - - ret = ff_ac3_compute_bit_allocation(s); - if (ret) { - av_log(avctx, AV_LOG_ERROR, "Bit allocation failed. Try increasing the bitrate.\n"); - return ret; - } - - ff_ac3_group_exponents(s); - - ff_ac3_quantize_mantissas(s); - - if ((ret = ff_alloc_packet2(avctx, avpkt, s->frame_size, 0)) < 0) - return ret; - ff_ac3_output_frame(s, avpkt->data); - - if (frame->pts != AV_NOPTS_VALUE) - avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding); - - *got_packet_ptr = 1; - return 0; + return ff_ac3_encode_frame_common_end(avctx, avpkt, frame, got_packet_ptr); } From patchwork Sat Dec 5 20:33:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 24359 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 421EE448E0A for ; Sat, 5 Dec 2020 22:34:26 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2577C68A5F4; Sat, 5 Dec 2020 22:34:26 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8BD8D6882DE for ; Sat, 5 Dec 2020 22:34:19 +0200 (EET) Received: by mail-wr1-f49.google.com with SMTP id x6so4795331wro.11 for ; Sat, 05 Dec 2020 12:34:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4zLMNJdk+0NpAs8e3wiL3Fie/P6O0bT6WOtUFVBsAnA=; b=OiebqdJTIT91W2yp9YwupjyyRJZGEE35tzTw00qI4s7CCUXp95Mbq59Ers6mkFIFfC ZtQPsmIM419USmtrbjWR9iIHK4SO3GSVrwvET3w+02/jKkVE0aaBzyOd1FCey9nT7awT o1BpQBmQ2mGFucnDJu4evecRyGLpCr0f9M+ISzUWVCOV1wpT4iD1x7YgjJhlEYfoPVQT KPaII69jHTqHYo4osirZZMgR7H6WT6Fy6EoaxgX1Mt48R+Bk5AM5HujBEogGZKm1PGv+ GuUAebLuUWZadjbfUxv8l6LiZgI7SPo5nDkON/IW+sD6Iig7jnGOZylZNy+QQNwhkMm1 Rapg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4zLMNJdk+0NpAs8e3wiL3Fie/P6O0bT6WOtUFVBsAnA=; b=eO+kpFUOx7ugMA1aUIvvdRZG4W+WBUIviQwt53T/+zVI0p8SVD0UMmHNzdf9ux+Cyk N2FG2p/lOLaA8S8iTUV1TDVeT0ZeZ3A8YJFOlqmIhELF1XztmY4bIjJOErxWVHbgE0i6 Z+bJYYxNLbNGjDNDvlPQsfgWGP9pujaG7/de4cPMYhI1mQVAIg6eA+/7u8vjjFipSqxU HJgYeKyojRcOQYEtn5dK9v0H1ZWewGgJ3yRzr7mJNel7Hd7KKQ37RU/RHt+brBEu8D5P R0tdAKTpz/wNutQEnP7zekd2PgV1COGAFQhwdp1npUrTO/0BqJK5sZbJ+LBngJwFLMHM TS/g== X-Gm-Message-State: AOAM533otr1S7Vp03plyiIUisr36reUbaSiOL5HsEjCQ51unBplRHlTS FhkLC51Jvm0aVOW4mDngOZDnuQoDKAMFhw== X-Google-Smtp-Source: ABdhPJwLcr1m3TsK4kw7oYwOtqnh4sggLUssDw1ArKBdhHDrCgGd6YMuJvC2qTHWx05w+go/9Mi5eQ== X-Received: by 2002:adf:f5c8:: with SMTP id k8mr12047469wrp.2.1607200458652; Sat, 05 Dec 2020 12:34:18 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id e4sm8747079wrr.32.2020.12.05.12.34.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Dec 2020 12:34:18 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 5 Dec 2020 21:33:38 +0100 Message-Id: <20201205203340.19357-6-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> References: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/7] avcodec/ac3dec: Check operations that can fail X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Andreas Rheinhardt --- libavcodec/ac3dec.c | 11 +++++++---- libavcodec/ac3dec_fixed.c | 1 + libavcodec/ac3dec_float.c | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index eaa327a3ee..3e4bec56b1 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -184,22 +184,25 @@ static av_cold void ac3_tables_init(void) static av_cold int ac3_decode_init(AVCodecContext *avctx) { AC3DecodeContext *s = avctx->priv_data; - int i; + int i, ret; s->avctx = avctx; ac3_tables_init(); - ff_mdct_init(&s->imdct_256, 8, 1, 1.0); - ff_mdct_init(&s->imdct_512, 9, 1, 1.0); + if ((ret = ff_mdct_init(&s->imdct_256, 8, 1, 1.0)) < 0 || + (ret = ff_mdct_init(&s->imdct_512, 9, 1, 1.0)) < 0) + return ret; AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256); ff_bswapdsp_init(&s->bdsp); #if (USE_FIXED) s->fdsp = avpriv_alloc_fixed_dsp(avctx->flags & AV_CODEC_FLAG_BITEXACT); #else - s->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT); ff_fmt_convert_init(&s->fmt_conv, avctx); + s->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT); #endif + if (!s->fdsp) + return AVERROR(ENOMEM); ff_ac3dsp_init(&s->ac3dsp, avctx->flags & AV_CODEC_FLAG_BITEXACT); av_lfg_init(&s->dith_state, 0); diff --git a/libavcodec/ac3dec_fixed.c b/libavcodec/ac3dec_fixed.c index f36854cdc5..662cb8169e 100644 --- a/libavcodec/ac3dec_fixed.c +++ b/libavcodec/ac3dec_fixed.c @@ -182,4 +182,5 @@ AVCodec ff_ac3_fixed_decoder = { .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_NONE }, .priv_class = &ac3_decoder_class, + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/ac3dec_float.c b/libavcodec/ac3dec_float.c index 57a626a181..5010ee0ca5 100644 --- a/libavcodec/ac3dec_float.c +++ b/libavcodec/ac3dec_float.c @@ -67,6 +67,7 @@ AVCodec ff_ac3_decoder = { .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE }, .priv_class = &ac3_decoder_class, + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; #if CONFIG_EAC3_DECODER @@ -91,5 +92,6 @@ AVCodec ff_eac3_decoder = { .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE }, .priv_class = &eac3_decoder_class, + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; #endif From patchwork Sat Dec 5 20:33:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 24360 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 4C016448E0A for ; Sat, 5 Dec 2020 22:34:27 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2309B68A84F; Sat, 5 Dec 2020 22:34:27 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6BE886882DE for ; Sat, 5 Dec 2020 22:34:20 +0200 (EET) Received: by mail-wm1-f46.google.com with SMTP id e25so10095273wme.0 for ; Sat, 05 Dec 2020 12:34:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tGX9CBAK8mZaumso8MaC/MaI/8omLoeO3NkgJQQNcRc=; b=mG7jMnW66dE9Ez3VAmloeGkJvTOYIL+rBBBycjWc0lcjUbQjOwXVV9plx1Tw2WiVJF uUKtkKhKvW7DLnv6tG5LvF25JAJio/ZbWKTT4hPbQLe9mLUZuKR9ui2y1S0OpduLtnlQ Dsux4SWeIiCHNcaXSnb80+0tVZbp4f9tIbXeS40NI0kQenoB0n2Wop2zV3PxwmCJKxFu uCRWhE1FddXpuWfR4PttZHB04R5SRYK97UtVJDggm4v8qDFFVIgDUegf/XRtkel/+3im Yh22Njhbj0f59+AhqIVfyL1Nih/orJB99QLk/rVOyPXC6aDgtroDayvcGiHbTTDJTd7I O7Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tGX9CBAK8mZaumso8MaC/MaI/8omLoeO3NkgJQQNcRc=; b=L40d4piAf/4/I+qn1SKx9R9ideRALtKyuv77CuVyo5FQc6BkBtIPi5h1My6wdvzqBA Wj7lmkAWvtG2Yw1RcQVRHNqtLMJv2evssVXyFZw9JhIa7RxVPSi/TD2F56Ilo0X8JkMp SbuZfqQVLIxnMXf/ktkNPT2DeXziHxP6s58G6/yIp066vVV65g/3punCicC1dxZsmZ79 7PcAJBOWLGsT+So8lPnQOXhzTmTl10musopRF5xyhTLkDrynejrMZdA4ZV9FsB9InXes xch8PQeLLeB9wUZy1JHWYaQlVtel92MJt1Pvnr/qzyB+hdhdqJk38Jma85F1IHTYHhtN 5efw== X-Gm-Message-State: AOAM5324mvEcDBT+h909s3N8wMu45e0CI8/2LyGrW1aO7FFv2gT3+ZFm jlRyACzNrh6RvSO1FZnf6S2QURPzXk5oRw== X-Google-Smtp-Source: ABdhPJzEMFLtUh3wn3T6umW7Sy0i+xNMim3rV6CH8CLPuIWIsiTMDxP3CcJMhRLFBnRC4Lmyan2dYg== X-Received: by 2002:a1c:3dd6:: with SMTP id k205mr10568136wma.128.1607200459681; Sat, 05 Dec 2020 12:34:19 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id e4sm8747079wrr.32.2020.12.05.12.34.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Dec 2020 12:34:19 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 5 Dec 2020 21:33:39 +0100 Message-Id: <20201205203340.19357-7-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> References: <20201205203340.19357-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/7] avcodec/ac3dec: Make decoders init-threadsafe X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Andreas Rheinhardt --- libavcodec/ac3dec.c | 5 ++++- libavcodec/ac3dec_fixed.c | 2 +- libavcodec/ac3dec_float.c | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index 3e4bec56b1..c7deb56e1c 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -33,6 +33,7 @@ #include "libavutil/crc.h" #include "libavutil/downmix_info.h" #include "libavutil/opt.h" +#include "libavutil/thread.h" #include "bswapdsp.h" #include "internal.h" #include "aac_ac3_parser.h" @@ -183,12 +184,12 @@ static av_cold void ac3_tables_init(void) */ static av_cold int ac3_decode_init(AVCodecContext *avctx) { + static AVOnce init_static_once = AV_ONCE_INIT; AC3DecodeContext *s = avctx->priv_data; int i, ret; s->avctx = avctx; - ac3_tables_init(); if ((ret = ff_mdct_init(&s->imdct_256, 8, 1, 1.0)) < 0 || (ret = ff_mdct_init(&s->imdct_512, 9, 1, 1.0)) < 0) return ret; @@ -226,6 +227,8 @@ static av_cold int ac3_decode_init(AVCodecContext *avctx) s->dlyptr[i] = s->delay[i]; } + ff_thread_once(&init_static_once, ac3_tables_init); + return 0; } diff --git a/libavcodec/ac3dec_fixed.c b/libavcodec/ac3dec_fixed.c index 662cb8169e..daab433295 100644 --- a/libavcodec/ac3dec_fixed.c +++ b/libavcodec/ac3dec_fixed.c @@ -182,5 +182,5 @@ AVCodec ff_ac3_fixed_decoder = { .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_NONE }, .priv_class = &ac3_decoder_class, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/ac3dec_float.c b/libavcodec/ac3dec_float.c index 5010ee0ca5..b18317f8b3 100644 --- a/libavcodec/ac3dec_float.c +++ b/libavcodec/ac3dec_float.c @@ -67,7 +67,7 @@ AVCodec ff_ac3_decoder = { .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE }, .priv_class = &ac3_decoder_class, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, }; #if CONFIG_EAC3_DECODER @@ -92,6 +92,6 @@ AVCodec ff_eac3_decoder = { .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE }, .priv_class = &eac3_decoder_class, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, }; #endif