From patchwork Sun Jun 16 08:54:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 49940 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9196:0:b0:460:55fa:d5ed with SMTP id s22csp1304349vqg; Sun, 16 Jun 2024 01:55:10 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXPW25xLmO+3YMKTLAH1S4gYhw7A/3SaMr4MKwPsksIEi257Bq7WA7v/0EspETRfksGZIO5hO3q51L3iLoUEQ0N614gX6bGascGEw== X-Google-Smtp-Source: AGHT+IH+mZtkY19NtkSqefcUGgPpfJW3lP64RXtw8E0BNEmlp5Ukd7E/Ly59/i0IayW2eNg8kGfx X-Received: by 2002:a50:d596:0:b0:57c:6bd6:d8e2 with SMTP id 4fb4d7f45d1cf-57cbd4f6b9bmr4835686a12.0.1718528109937; Sun, 16 Jun 2024 01:55:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1718528109; cv=none; d=google.com; s=arc-20160816; b=EvcNeC7me5ILnle/9/xbcCYOAiItV4siBK8l6WI7j4Fw5+/aDKuTh1CPnUkoVmTs7K 9QgkGI50luCnlsWfPicKd4uJAC/bjkg7yFbtY2I5TIip188xrFm+OPlHtmzvEZF3VjpA x1X/iMRBKR8prEypn8JUWp4JRtJ/wws39BkWKuXDH/GuUaH6WXhWhbOFdeNa5JT4dVqG F8nGHRSd6ldBJ9apJd1w2UG2z1rmByxOfyeO+Zgndp+H/hQeMPTwiWrNijnx8leoGmiq 3olX+Q2lgLB48yu/4sm6Zq05PlReQu6azZHQaSx+Ag9TA0EEJm6Lu/ULmPXC+FdoKyrH 9CVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to :delivered-to; bh=AkQdBQ0prdDFY9UdPVmUi06wfm0KsSFsk/0hp0POKRs=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=irhtAAlXQe6xfSHaMKg0s7d30yIueM279O+8AUS43nXcSl7XbjO/40pjrwkZWpzjO5 CKo9Oh1hEtcBKUl44fjw8segX7q7UaDQj+t4qU1TvayQjFvRHWPLtmanPls2kaN6elHv jje7uq4g+aAajdaweRlAnsUBlG0cZrGaxTpvjb+QMjpy9N7MxPFESMph9RC+FB/dB8AT 33dKkryE1vBI0zh5/ntVPFwJpFEq9fzy/F6U9Nmeg19xz8t28e3ldV1Njj0uXB9g2XIi wZnHVzusW081LFE8hoGmtbNUs9HYckf/pJBIMElc3qZeBQat7XwOqkJULjvn5QacztFv WSMQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-57cd1dd6cbasi1071882a12.185.2024.06.16.01.55.09; Sun, 16 Jun 2024 01:55:09 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 12C8468D6A1; Sun, 16 Jun 2024 11:55:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E9F3D68D1BB for ; Sun, 16 Jun 2024 11:54:58 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Sun, 16 Jun 2024 10:54:43 +0200 Message-ID: <20240616085454.2560973-1-dev@lynne.ee> X-Mailer: git-send-email 2.45.1.288.g0e0cd299f1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/6] aacdec_usac: apply specification fix M55715 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: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2KM/9qjGwJXk --- libavcodec/aac/aacdec_usac.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/libavcodec/aac/aacdec_usac.c b/libavcodec/aac/aacdec_usac.c index 98e8c1c0bc..065bc869d9 100644 --- a/libavcodec/aac/aacdec_usac.c +++ b/libavcodec/aac/aacdec_usac.c @@ -835,6 +835,11 @@ static int decode_usac_stereo_info(AACDecContext *ac, AACUSACConfig *usac, tns_active = get_bits1(gb); us->common_window = get_bits1(gb); + if (!us->common_window || indep_flag) { + memset(us->prev_alpha_q_re, 0, sizeof(us->prev_alpha_q_re)); + memset(us->prev_alpha_q_im, 0, sizeof(us->prev_alpha_q_im)); + } + if (us->common_window) { /* ics_info() */ ics1->window_sequence[1] = ics1->window_sequence[0]; @@ -845,6 +850,20 @@ static int decode_usac_stereo_info(AACDecContext *ac, AACUSACConfig *usac, ics2->use_kb_window[1] = ics2->use_kb_window[0]; ics1->use_kb_window[0] = ics2->use_kb_window[0] = get_bits1(gb); + /* If there's a change in the transform sequence, zero out last frame's + * stereo prediction coefficients */ + if ((ics1->window_sequence[0] == EIGHT_SHORT_SEQUENCE && + ics1->window_sequence[1] != EIGHT_SHORT_SEQUENCE) || + (ics1->window_sequence[1] == EIGHT_SHORT_SEQUENCE && + ics1->window_sequence[0] != EIGHT_SHORT_SEQUENCE) || + (ics2->window_sequence[0] == EIGHT_SHORT_SEQUENCE && + ics2->window_sequence[1] != EIGHT_SHORT_SEQUENCE) || + (ics2->window_sequence[1] == EIGHT_SHORT_SEQUENCE && + ics2->window_sequence[0] != EIGHT_SHORT_SEQUENCE)) { + memset(us->prev_alpha_q_re, 0, sizeof(us->prev_alpha_q_re)); + memset(us->prev_alpha_q_im, 0, sizeof(us->prev_alpha_q_im)); + } + if (ics1->window_sequence[0] == EIGHT_SHORT_SEQUENCE) { ics1->max_sfb = ics2->max_sfb = get_bits(gb, 4); ue1->scale_factor_grouping = ue2->scale_factor_grouping = get_bits(gb, 7); From patchwork Sun Jun 16 08:54:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 49941 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9196:0:b0:460:55fa:d5ed with SMTP id s22csp1304407vqg; Sun, 16 Jun 2024 01:55:21 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXsog5dA3zDnq8cma0mACksoaJe2qxFdjUksQtMpCCpScxo4g5hkWwZHFnWEhhYecypqSxCZfCPhxRSSA/0qic0qcV2OCZJmISYcw== X-Google-Smtp-Source: AGHT+IEYPFzaD8eYrQTQKu6TPf34gvCKNkipD6ZvNRF0LMIRcRyhhReSjuRIT0rCtY0kuI923axt X-Received: by 2002:a17:907:9721:b0:a67:a2e0:9dd9 with SMTP id a640c23a62f3a-a6f60cf5034mr507424666b.2.1718528120871; Sun, 16 Jun 2024 01:55:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1718528120; cv=none; d=google.com; s=arc-20160816; b=mjYuUYm92BQKhJ90rM3YIy03z2cvykW2sC6VHExHSXIBsDAOvJxeh7RtwDEtCKDxGS koi09Fv3BrXDG402hdUeTbtCWOF/6Zgg2vYHMV63pZvqC2UjNRykjdgMkeFiURa5ek11 JCRjaZDbbERwM0hpW7GPeQQkVUmv0BmGEgdPzfT0uv7eL2B+WGf3A94lf3U3kyFYeWSg O+AuzuuIpyO/cdtzT9nj9Wdni2U2KsjWl96Swsc8l0JHQY7JCDTgdUKUWgsrWt+uFU7Y DAn+BCVUD8MW4ZTloo9BQ7FZmDkVjRO+XgZYpNFuyUZFbTFyYYqPHjz0gXJR3XR5J7PL FbsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=BOUuqFMorDyNGWvcuaTsZMCu+POxclf5FgwemYssbfg=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=kcPQRVQOPF+MzTncQFMdovDD5FwKWhrzSMqzbI4xWHUQDwXRuYlvSq7JgZjWz5h6Kf gyz1OYCAronR912v9fl23pwO/LFNXzbO1YYAo3iFE7FFzuamXN8aL+s0hjSZ1wzGnbjd /rSVDoXR1ZziZSYDaH5Wx+yWN+2TqyDN/Yx9kzDfpwSaZrd56Oyn2Ydfg88WWtZaeakq 6jJUB+XB81hgkKejqgm6IKXTk7AJbdJAKyXXn22Y3trNXyeSypumB51zrYtC2sjv7ZN3 fWqtF/kIFQR9jgvXBVLU9PtQZRfUx8C+xCYVWDVf2SMhXI/EgUtb/ba8OfqTrTZou8l1 nl5A==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a6f62d3f745si261227566b.716.2024.06.16.01.55.20; Sun, 16 Jun 2024 01:55:20 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9E81968D6C1; Sun, 16 Jun 2024 11:55:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 855CE68D6A1 for ; Sun, 16 Jun 2024 11:55:00 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Sun, 16 Jun 2024 10:54:44 +0200 Message-ID: <20240616085454.2560973-2-dev@lynne.ee> X-Mailer: git-send-email 2.45.1.288.g0e0cd299f1 In-Reply-To: <20240616085454.2560973-1-dev@lynne.ee> References: <20240616085454.2560973-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/6] aac: expose ff_aac_sample_rate_idx() in aac.h 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: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: iKn+tfqhRkrO The rate index is a value important to both encoders and decoders. USAC needs it as well, so put it into the shared main header. --- libavcodec/aac.h | 16 ++++++++++++++++ libavcodec/aac/aacdec.c | 18 +----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/libavcodec/aac.h b/libavcodec/aac.h index fc6d1361b2..78026a5887 100644 --- a/libavcodec/aac.h +++ b/libavcodec/aac.h @@ -103,4 +103,20 @@ typedef struct Pulse { int amp[4]; } Pulse; +static inline int ff_aac_sample_rate_idx(int rate) +{ + if (92017 <= rate) return 0; + else if (75132 <= rate) return 1; + else if (55426 <= rate) return 2; + else if (46009 <= rate) return 3; + else if (37566 <= rate) return 4; + else if (27713 <= rate) return 5; + else if (23004 <= rate) return 6; + else if (18783 <= rate) return 7; + else if (13856 <= rate) return 8; + else if (11502 <= rate) return 9; + else if (9391 <= rate) return 10; + else return 11; +} + #endif /* AVCODEC_AAC_H */ diff --git a/libavcodec/aac/aacdec.c b/libavcodec/aac/aacdec.c index eecb6d8f3d..ea2ba84a80 100644 --- a/libavcodec/aac/aacdec.c +++ b/libavcodec/aac/aacdec.c @@ -1095,22 +1095,6 @@ static int decode_audio_specific_config(AACDecContext *ac, sync_extension); } -static int sample_rate_idx (int rate) -{ - if (92017 <= rate) return 0; - else if (75132 <= rate) return 1; - else if (55426 <= rate) return 2; - else if (46009 <= rate) return 3; - else if (37566 <= rate) return 4; - else if (27713 <= rate) return 5; - else if (23004 <= rate) return 6; - else if (18783 <= rate) return 7; - else if (13856 <= rate) return 8; - else if (11502 <= rate) return 9; - else if (9391 <= rate) return 10; - else return 11; -} - static av_cold int decode_close(AVCodecContext *avctx) { AACDecContext *ac = avctx->priv_data; @@ -1211,7 +1195,7 @@ av_cold int ff_aac_decode_init(AVCodecContext *avctx) uint8_t layout_map[MAX_ELEM_ID*4][3]; int layout_map_tags; - sr = sample_rate_idx(avctx->sample_rate); + sr = ff_aac_sample_rate_idx(avctx->sample_rate); ac->oc[1].m4ac.sampling_index = sr; ac->oc[1].m4ac.channels = avctx->ch_layout.nb_channels; ac->oc[1].m4ac.sbr = -1; From patchwork Sun Jun 16 08:54:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 49942 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9196:0:b0:460:55fa:d5ed with SMTP id s22csp1304456vqg; Sun, 16 Jun 2024 01:55:32 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUIiXZg/i17UMBcF0azaOFM04HYTRDXuHBKWMtl3Gx/lyz0qxyRgW3vEijpVK8BvzphFBqHl6V6IjdoakUSUNE4Ab8K+RPRoh72cA== X-Google-Smtp-Source: AGHT+IH7dVCg33aDNUXBh33Z6Xt0gd/3CupbSZJqDKskW20cgOs6Mp85p10sGD+TABFmsMflwx38 X-Received: by 2002:a2e:961a:0:b0:2e9:8a0a:ea05 with SMTP id 38308e7fff4ca-2ec0e46dbfamr48713321fa.17.1718528131950; Sun, 16 Jun 2024 01:55:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1718528131; cv=none; d=google.com; s=arc-20160816; b=UjXSmzgMfJJBfnpiSaMiRYaBRiwtTF6SIIlIVqVJmBYbuiAL0g3GKptD1cGEFWTXWT /faXrpF3hvFjZJK7GhXfNhJO9+CdrVCs2JNkulklX3o14o69nm+CuzEjwjKN5tnnm/QD nkEmDhDkEN5we+YPuHGvcumRs9aidpFv2Ke1DwHz6lhJPAduZ9RizzdiRn5QmKWdgq+5 51MfZhOs83HvUi+5xXciB43kyhnwpQo4366gMb0aArP5+b8xjFoHYyiI6E5rlR9O4Plp 5t9525POvlXoK0d609bLCDGuyu07KhRxTtyBztUN76GIOQabYvhW8fXR6//j+6XfuR2L AU4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=M4Hw+2oBhyvgAuvG6GPxMgjyJtMg4v9LdivJB1W1g0s=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=uxWd5ysXVdyILdPzHvftQTlUYkfwfXyAFmw01X68vXFOxTqDzzEYHpRVt/UYWO3Fk0 o+RuPrggU0VZGViIxg6vFT0Ygo0XVAf33ByCs6K4xv2NSNuHEafxoseq6cR+8IPyg2Tt ljsG2BY7ddWxqE7NFcXd3Ufm9Qjsr/XI8zwepvNF+wCclhUZ6D0I2/oQDoZd5mKgsPAR 0uZW4OKzG0jI6DIBKV/3WxMpaA3ttf4kM3ty4/ioyP+42yTYGvXv9Au13MrXd2kdmx4N oNHOcFcqZ7qCbQVDOUls2ct2KMU6ag80ZFcUs1LemQPxLWNxDmHO8le44vbB+zILvIW2 Si0Q==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 38308e7fff4ca-2ec05c7573csi19795321fa.466.2024.06.16.01.55.31; Sun, 16 Jun 2024 01:55:31 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B388568D6DF; Sun, 16 Jun 2024 11:55:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8CFAC68D1BB for ; Sun, 16 Jun 2024 11:55:01 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Sun, 16 Jun 2024 10:54:45 +0200 Message-ID: <20240616085454.2560973-3-dev@lynne.ee> X-Mailer: git-send-email 2.45.1.288.g0e0cd299f1 In-Reply-To: <20240616085454.2560973-1-dev@lynne.ee> References: <20240616085454.2560973-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/6] aacdec_ac: fix an overread 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: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: lgb9fvWMBDJ9 Fixes reading state->last[i + 1] in ff_aac_ac_get_context for the last array member. --- libavcodec/aac/aacdec_ac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/aac/aacdec_ac.h b/libavcodec/aac/aacdec_ac.h index 0b98c0f0d9..b8d4ade4c6 100644 --- a/libavcodec/aac/aacdec_ac.h +++ b/libavcodec/aac/aacdec_ac.h @@ -25,7 +25,7 @@ #include "libavcodec/get_bits.h" typedef struct AACArithState { - uint8_t last[512 /* 2048 / 4 */]; + uint8_t last[512 /* 2048 / 4 */ + 1]; int last_len; uint8_t cur[4]; uint16_t state_pre; From patchwork Sun Jun 16 08:54:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 49943 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9196:0:b0:460:55fa:d5ed with SMTP id s22csp1304488vqg; Sun, 16 Jun 2024 01:55:39 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXY8EhtVB5zGmGwZwd5wquQR3Awj6588PHEB+oIIhup+F17Kr5qXvs7xGYoJn4rFkr5u4Y1nLESGlARToflFcAcv/32kjHluesxXw== X-Google-Smtp-Source: AGHT+IHnXEvuTDqRAd+NuL/cJZgJ/F8kXZSNiXuFFcksaMh+PVysf7Y3DUeFu/pSY4j/bpZHlPVb X-Received: by 2002:a05:6512:1056:b0:52c:ba7d:f032 with SMTP id 2adb3069b0e04-52cba7df104mr1289061e87.16.1718528138837; Sun, 16 Jun 2024 01:55:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1718528138; cv=none; d=google.com; s=arc-20160816; b=Vs3USw81EB5WiNH/rUDxCKiWwe4BMHypE744HK+LskMSNE9pPXyDYW2DkHsUNK85h8 aJUIavp5NtX2TJRS0j8zGkSY5OdpqG2gx168YUCJEiTpmPBPlT3Z5fixFAOJRpyfMJJ4 rfOD8tUg9s0KeTkOJMPgRkpw8eDTBmtAuT8UTzWwfLlEBe1+C49VcB8Zw85KryX7zRbl LSXCWN3NTes/aBQiqs7Q1y7duixsPNshjltx1BShCxnveQb8o+rtN5E1/wqtqQGZEAIT gAtaIOwZvGmjoHOot6tweIifjDOd6U1idqvtZOsuWhXYyzbZB/Pb4h7cb0f97jBLQZeo +gWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=9tUOLG3PMv8oROBMs5Lk8KzIsbmK11ddRZgM1VSnwYQ=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=1AyPl5S70tM5/gz7aDuPrPM5GTi71Je9DphP1EVwSmUznyEmtn4fFhH9e4hLOnd1os ALvadBAioQXS1X+mN6SKJ/fqtbR34kve0FmkwRRJbBLxJDg39EUCK2K4+5ZuM+pS3zbK TDTyt6Lc4snVTnAE3P/GGAon1DPuEftPpbVXzms3ynCGr63SC9HnHcG6GHHTXZFu7iWW DDkG/1AhQfJlmoX84OzsYWBe0HgkXExrdSRBu80lAx1hfwp/zcRqB2gCMXQkvJuxm5tF /3YtnPfX0fvNOw1Cwlh/xOzHXsQs9UbSC6LGbptPk88bp/JDDmNgWLsokxmYdK+GGVGV QMxA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a6f56dd685esi352464866b.432.2024.06.16.01.55.38; Sun, 16 Jun 2024 01:55:38 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D3C9F68D6C5; Sun, 16 Jun 2024 11:55:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DB7DA68D65F for ; Sun, 16 Jun 2024 11:55:02 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Sun, 16 Jun 2024 10:54:46 +0200 Message-ID: <20240616085454.2560973-4-dev@lynne.ee> X-Mailer: git-send-email 2.45.1.288.g0e0cd299f1 In-Reply-To: <20240616085454.2560973-1-dev@lynne.ee> References: <20240616085454.2560973-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/6] aacdec_usac: rename noise_scale to noise_bands 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: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 0MxtWvC04shJ This was a typo. --- libavcodec/aac/aacdec.h | 2 +- libavcodec/aac/aacdec_usac.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libavcodec/aac/aacdec.h b/libavcodec/aac/aacdec.h index 86faf6454a..d1a80e9ac1 100644 --- a/libavcodec/aac/aacdec.h +++ b/libavcodec/aac/aacdec.h @@ -315,7 +315,7 @@ typedef struct AACUsacElemConfig { uint8_t freq_scale; /* dflt_freq_scale */ uint8_t alter_scale : 1; /* dflt_alter_scale */ - uint8_t noise_scale; /* dflt_noise_scale */ + uint8_t noise_bands; /* dflt_noise_bands */ uint8_t limiter_bands; /* dflt_limiter_bands */ uint8_t limiter_gains; /* dflt_limiter_gains */ diff --git a/libavcodec/aac/aacdec_usac.c b/libavcodec/aac/aacdec_usac.c index 065bc869d9..eb0e7d3659 100644 --- a/libavcodec/aac/aacdec_usac.c +++ b/libavcodec/aac/aacdec_usac.c @@ -162,11 +162,11 @@ static void decode_usac_sbr_data(AACUsacElemConfig *e, GetBitContext *gb) e->sbr.dflt.freq_scale = 2; e->sbr.dflt.alter_scale = 1; - e->sbr.dflt.noise_scale = 2; + e->sbr.dflt.noise_bands = 2; if (header_extra1) { e->sbr.dflt.freq_scale = get_bits(gb, 2); /* dflt_freq_scale */ e->sbr.dflt.alter_scale = get_bits1(gb); /* dflt_alter_scale */ - e->sbr.dflt.noise_scale = get_bits(gb, 2); /* dflt_noise_scale */ + e->sbr.dflt.noise_bands = get_bits(gb, 2); /* dflt_noise_bands */ } e->sbr.dflt.limiter_bands = 2; From patchwork Sun Jun 16 08:54:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 49944 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9196:0:b0:460:55fa:d5ed with SMTP id s22csp1304534vqg; Sun, 16 Jun 2024 01:55:48 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU28or36whniu2Pl2FEqgHq2TZ56FQ02x8q5PsafaFxucY8m/Dg6oxKD6XvmDqaCrP84eTGB4n3JiFcN1r7z2wR3TRT0oQ6UIPTuw== X-Google-Smtp-Source: AGHT+IHUACpk32PfuZ+OwJNMV58Y7rSDim7vL9KUn8OWWE9FbsWUrqi/ICuLG6UGfy+IjCTGrNMb X-Received: by 2002:a05:6402:516:b0:57c:5c50:2ef9 with SMTP id 4fb4d7f45d1cf-57cb4b9965fmr6184419a12.3.1718528148110; Sun, 16 Jun 2024 01:55:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1718528148; cv=none; d=google.com; s=arc-20160816; b=0y1L07hkTOr5GCu+InLcrLg7sc9Km6W3EaxezXBFANUV4ITnCWC8bLl+u2Br9jpLcu KwNatF9m1YyEuKB0ZhgLEJrixmCGIUkfb4S9qYy+pJZgdZ3ayTjF+vKPV5X+OieRPmpD GLFYakx6tHINtjlzQsEFCZuG/5g8/R3Mny8cSsub6NCl03omdi4BfyeDhF5i31VMdpX8 oEKl3N2TdNOqtXavvuTXvshY/QJ9P6yzmOX/AWaZBuxijAXI3rXlLINhn0+pX6JOoGEw ju+4Bu4vzI+NirlhJsjG9LawfxVzT0TeAW8B3Sejnr7g6czidHkno3EHYMXNehjha43x v1pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=m1AmNcn/psF1MF6uCxPz+/7amrTIINs/uxqgPfleSso=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=lPgynDaDdNMPU36ZhbPsMNpkMk0M2e47nRU1VG+wjq89oebLGG+YwJ9lpMrEJ2LSq7 EwMrIaELTYPjbHePph+/adg/9qy2WVbeOoVMUqfy3emenHjp/LRFXUOsrBNfzyU4mCP2 ZXoJCEsU8XJwyrwpEceiu+ZHEEXKDLwBwbTQVEJGmz0Pcm5jYBH91z7cA3mEaQl7R8Cj 3NLiyUDql0TqVhh7ll0hgbrb7ExhiivBbIGPEoMywPXa59z5Fwg44liLepT1RKerFy+z 5cXz9AjzokU4ubTFkSiSHKobv/djzUhxZdMsg7t3xDnAvPxQPCsS57S2v2pO4qfEJwDP aQJA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-57cb7462b3bsi3615628a12.617.2024.06.16.01.55.47; Sun, 16 Jun 2024 01:55:48 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5742268D6EF; Sun, 16 Jun 2024 11:55:13 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3A27668D6EE for ; Sun, 16 Jun 2024 11:55:06 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Sun, 16 Jun 2024 10:54:47 +0200 Message-ID: <20240616085454.2560973-5-dev@lynne.ee> X-Mailer: git-send-email 2.45.1.288.g0e0cd299f1 In-Reply-To: <20240616085454.2560973-1-dev@lynne.ee> References: <20240616085454.2560973-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/6] aacdec_usac: remove custom rate_idx and use standard variable for it 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: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: gErDX0Ly1DjC m4ac.sampling_index is what aacdec.c uses. --- libavcodec/aac/aacdec.h | 1 - libavcodec/aac/aacdec_usac.c | 35 ++++++++++++++--------------------- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/libavcodec/aac/aacdec.h b/libavcodec/aac/aacdec.h index d1a80e9ac1..e5a79a7139 100644 --- a/libavcodec/aac/aacdec.h +++ b/libavcodec/aac/aacdec.h @@ -350,7 +350,6 @@ typedef struct AACUsacElemConfig { typedef struct AACUSACConfig { uint8_t core_sbr_frame_len_idx; /* coreSbrFrameLengthIndex */ - uint8_t rate_idx; uint16_t core_frame_len; uint16_t stream_identifier; diff --git a/libavcodec/aac/aacdec_usac.c b/libavcodec/aac/aacdec_usac.c index eb0e7d3659..e5504117d0 100644 --- a/libavcodec/aac/aacdec_usac.c +++ b/libavcodec/aac/aacdec_usac.c @@ -316,7 +316,7 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, GetBitContext *gb, OutputConfiguration *oc, int channel_config) { - int ret, idx; + int ret; uint8_t freq_idx; uint8_t channel_config_idx; int nb_channels = 0; @@ -334,20 +334,10 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, freq_idx = get_bits(gb, 5); /* usacSamplingFrequencyIndex */ if (freq_idx == 0x1f) { samplerate = get_bits(gb, 24); /* usacSamplingFrequency */ - - /* Try to match up an index for the custom sample rate. - * TODO: not sure if correct */ - for (idx = 0; idx < /* FF_ARRAY_ELEMS(ff_aac_usac_samplerate) */ 32; idx++) { - if (ff_aac_usac_samplerate[idx] >= samplerate) - break; - } - idx = FFMIN(idx, /* FF_ARRAY_ELEMS(ff_aac_usac_samplerate) */ 32 - 1); - usac->rate_idx = idx; } else { samplerate = ff_aac_usac_samplerate[freq_idx]; if (samplerate < 0) return AVERROR(EINVAL); - usac->rate_idx = freq_idx; } m4ac->sample_rate = avctx->sample_rate = samplerate; @@ -364,6 +354,8 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, usac->core_sbr_frame_len_idx == 4 ? 1 : 0; + m4ac->sampling_index = ff_aac_sample_rate_idx(m4ac->sample_rate); + channel_config_idx = get_bits(gb, 5); /* channelConfigurationIndex */ if (!channel_config_idx) { /* UsacChannelConfig() */ @@ -751,18 +743,19 @@ static int setup_sce(AACDecContext *ac, SingleChannelElement *sce, { AACUsacElemData *ue = &sce->ue; IndividualChannelStream *ics = &sce->ics; + const int sampling_index = ac->oc[1].m4ac.sampling_index; /* Setup window parameters */ ics->prev_num_window_groups = FFMAX(ics->num_window_groups, 1); if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) { if (usac->core_frame_len == 768) { - ics->swb_offset = ff_swb_offset_96[usac->rate_idx]; - ics->num_swb = ff_aac_num_swb_96[usac->rate_idx]; + ics->swb_offset = ff_swb_offset_96[sampling_index]; + ics->num_swb = ff_aac_num_swb_96[sampling_index]; } else { - ics->swb_offset = ff_swb_offset_128[usac->rate_idx]; - ics->num_swb = ff_aac_num_swb_128[usac->rate_idx]; + ics->swb_offset = ff_swb_offset_128[sampling_index]; + ics->num_swb = ff_aac_num_swb_128[sampling_index]; } - ics->tns_max_bands = ff_tns_max_bands_usac_128[usac->rate_idx]; + ics->tns_max_bands = ff_tns_max_bands_usac_128[sampling_index]; /* Setup scalefactor grouping. 7 bit mask. */ ics->num_window_groups = 0; @@ -779,13 +772,13 @@ static int setup_sce(AACDecContext *ac, SingleChannelElement *sce, ics->num_windows = 8; } else { if (usac->core_frame_len == 768) { - ics->swb_offset = ff_swb_offset_768[usac->rate_idx]; - ics->num_swb = ff_aac_num_swb_768[usac->rate_idx]; + ics->swb_offset = ff_swb_offset_768[sampling_index]; + ics->num_swb = ff_aac_num_swb_768[sampling_index]; } else { - ics->swb_offset = ff_swb_offset_1024[usac->rate_idx]; - ics->num_swb = ff_aac_num_swb_1024[usac->rate_idx]; + ics->swb_offset = ff_swb_offset_1024[sampling_index]; + ics->num_swb = ff_aac_num_swb_1024[sampling_index]; } - ics->tns_max_bands = ff_tns_max_bands_usac_1024[usac->rate_idx]; + ics->tns_max_bands = ff_tns_max_bands_usac_1024[sampling_index]; ics->group_len[0] = 1; ics->num_window_groups = 1; From patchwork Sun Jun 16 08:54:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 49945 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9196:0:b0:460:55fa:d5ed with SMTP id s22csp1304583vqg; Sun, 16 Jun 2024 01:55:57 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWYc1G22G9lBdXRdafN+bQtA6ODdGLCbTU+Mho/Xs1ij50wo3AuWqK7zNGs0xiWjh3ab/bhIrs6lJ03QTY/IBOiEqbYCiik9u/3Lw== X-Google-Smtp-Source: AGHT+IFWPGWmskulpA0IpT3D7gQtewbNGqZo8AO91tHkSmEhOp9sCCCqueLP9MOaVf/bkfV3z3Ve X-Received: by 2002:a17:907:9721:b0:a67:a2e0:9dd9 with SMTP id a640c23a62f3a-a6f60cf5034mr507493566b.2.1718528156842; Sun, 16 Jun 2024 01:55:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1718528156; cv=none; d=google.com; s=arc-20160816; b=AsM/otYczWmSq7fhTTOQKsiKLBHHHiXfShoDmPUwN1OsrbIdihCmKWd6km5TlrVo1o Pn7lxSOq+5vCTIlp+AXuQ/11iuocgRXUz60A2CcMKlATlq3GuWkCKSkx4+YWQ/bGlkCv cSM9jQogXyntNAqiAr/plknNudEbUOKVhZqGf5rbAIi0GUbBdIvEBaRfbk5wmj11crIj XtyNtnNOHQ8Y675M2RaCVo7deFQLlqpZ1NryCcI4CBij746afOqjbCLg4IL06Na3YyG+ Dio7oOlCb/IYnKA9VmhkatGmnyjL124qIJNN9WA9HVgAB7By+mkNeKgrMu/t5J4geJMZ C4fA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=BXI3mHSIJzwvCzUQEye6NnVCasJXzkyvxFiaOlMoGp0=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=TUp1VLnCEgEyFB33ZroXw/SesxVvrmIrACJeqa4HISqNKQhTalYzyzuXaatUdZTtgQ g2Qywjo43gsoEjgVuNe7Ynrzh1LvoNr6NiUmcJ01ZYitvLQNgzxME3YnvsZAnJ3Im2tf x3o3yGQcyjYMekYB1fbuSZc9oYeb8e4hjf2LUoOk4/QzLeklRtqI7sknXttQQ5vcdIYa 7AyqJoXd6O0N+dzptsG28IJjGeCb59Lf/Y34+wiv8myuRvUEre31i/cKHCFYqza+ENhF ogkTHgXUWaMHfjsrqN0TgrQJLeTXpc4UabCTJG2Eorx9aCQOYrx9I9e9d9GNFDOq5w0g JfCQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a6f56dd5e38si335598566b.440.2024.06.16.01.55.56; Sun, 16 Jun 2024 01:55:56 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CC74568D6ED; Sun, 16 Jun 2024 11:55:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 576AA68D544 for ; Sun, 16 Jun 2024 11:55:18 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Sun, 16 Jun 2024 10:54:48 +0200 Message-ID: <20240616085454.2560973-6-dev@lynne.ee> X-Mailer: git-send-email 2.45.1.288.g0e0cd299f1 In-Reply-To: <20240616085454.2560973-1-dev@lynne.ee> References: <20240616085454.2560973-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/6] aacdec_usac, aacsbr: implement SBR support for USAC 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: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: oat6lrtK3vFK Currently, no eSBR features are supported. Thankfully, no encoders exist for it yet. --- libavcodec/aac/aacdec_usac.c | 119 +++++++++++++++--- libavcodec/aacsbr.h | 11 ++ libavcodec/aacsbr_template.c | 232 ++++++++++++++++++++++++++++++++--- libavcodec/sbr.h | 32 +++-- 4 files changed, 351 insertions(+), 43 deletions(-) diff --git a/libavcodec/aac/aacdec_usac.c b/libavcodec/aac/aacdec_usac.c index e5504117d0..132ffee9c2 100644 --- a/libavcodec/aac/aacdec_usac.c +++ b/libavcodec/aac/aacdec_usac.c @@ -23,6 +23,8 @@ #include "aacdec_lpd.h" #include "aacdec_ac.h" +#include "libavcodec/aacsbr.h" + #include "libavcodec/aactab.h" #include "libavutil/mem.h" #include "libavcodec/mpeg4audio.h" @@ -145,7 +147,8 @@ static int decode_loudness_set(AACDecContext *ac, AACUSACConfig *usac, return 0; } -static void decode_usac_sbr_data(AACUsacElemConfig *e, GetBitContext *gb) +static int decode_usac_sbr_data(AACDecContext *ac, + AACUsacElemConfig *e, GetBitContext *gb) { uint8_t header_extra1; uint8_t header_extra2; @@ -153,6 +156,10 @@ static void decode_usac_sbr_data(AACUsacElemConfig *e, GetBitContext *gb) e->sbr.harmonic_sbr = get_bits1(gb); /* harmonicSBR */ e->sbr.bs_intertes = get_bits1(gb); /* bs_interTes */ e->sbr.bs_pvc = get_bits1(gb); /* bs_pvc */ + if (e->sbr.harmonic_sbr || e->sbr.bs_intertes || e->sbr.bs_pvc) { + avpriv_report_missing_feature(ac->avctx, "AAC USAC eSBR"); + return AVERROR_PATCHWELCOME; + } e->sbr.dflt.start_freq = get_bits(gb, 4); /* dflt_start_freq */ e->sbr.dflt.stop_freq = get_bits(gb, 4); /* dflt_stop_freq */ @@ -179,6 +186,8 @@ static void decode_usac_sbr_data(AACUsacElemConfig *e, GetBitContext *gb) e->sbr.dflt.interpol_freq = get_bits1(gb); /* dflt_interpol_freq */ e->sbr.dflt.smoothing_mode = get_bits1(gb); /* dflt_smoothing_mode */ } + + return 0; } static void decode_usac_element_core(AACUsacElemConfig *e, @@ -190,13 +199,17 @@ static void decode_usac_element_core(AACUsacElemConfig *e, e->sbr.ratio = sbr_ratio; } -static void decode_usac_element_pair(AACUsacElemConfig *e, GetBitContext *gb) +static int decode_usac_element_pair(AACDecContext *ac, + AACUsacElemConfig *e, GetBitContext *gb) { e->stereo_config_index = 0; if (e->sbr.ratio) { - decode_usac_sbr_data(e, gb); + int ret = decode_usac_sbr_data(ac, e, gb); + if (ret < 0) + return ret; e->stereo_config_index = get_bits(gb, 2); } + if (e->stereo_config_index) { e->mps.freq_res = get_bits(gb, 3); /* bsFreqRes */ e->mps.fixed_gain = get_bits(gb, 3); /* bsFixedGainDMX */ @@ -216,6 +229,8 @@ static void decode_usac_element_pair(AACUsacElemConfig *e, GetBitContext *gb) if (e->mps.temp_shape_config == 2) e->mps.env_quant_mode = get_bits1(gb); /* bsEnvQuantMode */ } + + return 0; } static int decode_usac_extension(AACDecContext *ac, AACUsacElemConfig *e, @@ -294,6 +309,9 @@ int ff_aac_usac_reset_state(AACDecContext *ac, OutputConfiguration *oc) AACUsacStereo *us = &che->us; memset(us, 0, sizeof(*us)); + if (e->sbr.ratio) + ff_aac_sbr_config_usac(ac, che, e); + for (int j = 0; j < ch; j++) { SingleChannelElement *sce = &che->ch[ch]; AACUsacElemData *ue = &sce->ue; @@ -320,6 +338,7 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, uint8_t freq_idx; uint8_t channel_config_idx; int nb_channels = 0; + int ratio_mult, ratio_dec; int samplerate; int sbr_ratio; MPEG4AudioConfig *m4ac = &oc->m4ac; @@ -340,8 +359,6 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, return AVERROR(EINVAL); } - m4ac->sample_rate = avctx->sample_rate = samplerate; - usac->core_sbr_frame_len_idx = get_bits(gb, 3); /* coreSbrFrameLengthIndex */ m4ac->frame_length_short = usac->core_sbr_frame_len_idx == 0 || usac->core_sbr_frame_len_idx == 2; @@ -354,7 +371,26 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, usac->core_sbr_frame_len_idx == 4 ? 1 : 0; + if (sbr_ratio == 2) { + ratio_mult = 8; + ratio_dec = 3; + } else if (sbr_ratio == 3) { + ratio_mult = 2; + ratio_dec = 1; + } else if (sbr_ratio == 4) { + ratio_mult = 4; + ratio_dec = 1; + } else { + ratio_mult = 1; + ratio_dec = 1; + } + + avctx->sample_rate = samplerate; + m4ac->ext_sample_rate = samplerate; + m4ac->sample_rate = (samplerate * ratio_dec) / ratio_mult; + m4ac->sampling_index = ff_aac_sample_rate_idx(m4ac->sample_rate); + m4ac->sbr = sbr_ratio > 0; channel_config_idx = get_bits(gb, 5); /* channelConfigurationIndex */ if (!channel_config_idx) { @@ -426,8 +462,11 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, case ID_USAC_SCE: /* SCE */ /* UsacCoreConfig */ decode_usac_element_core(e, gb, sbr_ratio); - if (e->sbr.ratio > 0) - decode_usac_sbr_data(e, gb); + if (e->sbr.ratio > 0) { + ret = decode_usac_sbr_data(ac, e, gb); + if (ret < 0) + return ret; + } layout_map[map_count][0] = TYPE_SCE; layout_map[map_count][1] = elem_id[0]++; if (!map_pos_set) @@ -437,7 +476,9 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, case ID_USAC_CPE: /* UsacChannelPairElementConf */ /* UsacCoreConfig */ decode_usac_element_core(e, gb, sbr_ratio); - decode_usac_element_pair(e, gb); + ret = decode_usac_element_pair(ac, e, gb); + if (ret < 0) + return ret; layout_map[map_count][0] = TYPE_CPE; layout_map[map_count][1] = elem_id[1]++; if (!map_pos_set) @@ -1307,13 +1348,14 @@ static int decode_usac_core_coder(AACDecContext *ac, AACUSACConfig *usac, int ret; int arith_reset_flag; AACUsacStereo *us = &che->us; + int core_nb_channels = nb_channels; /* Local symbols */ uint8_t global_gain; us->common_window = 0; - for (int ch = 0; ch < nb_channels; ch++) { + for (int ch = 0; ch < core_nb_channels; ch++) { SingleChannelElement *sce = &che->ch[ch]; AACUsacElemData *ue = &sce->ue; @@ -1323,13 +1365,16 @@ static int decode_usac_core_coder(AACDecContext *ac, AACUSACConfig *usac, ue->core_mode = get_bits1(gb); } - if (nb_channels == 2) { + if (nb_channels > 1 && ec->stereo_config_index == 1) + core_nb_channels = 1; + + if (core_nb_channels == 2) { ret = decode_usac_stereo_info(ac, usac, ec, che, gb, indep_flag); if (ret) return ret; } - for (int ch = 0; ch < nb_channels; ch++) { + for (int ch = 0; ch < core_nb_channels; ch++) { SingleChannelElement *sce = &che->ch[ch]; IndividualChannelStream *ics = &sce->ics; AACUsacElemData *ue = &sce->ue; @@ -1341,7 +1386,7 @@ static int decode_usac_core_coder(AACDecContext *ac, AACUSACConfig *usac, continue; } - if ((nb_channels == 1) || + if ((core_nb_channels == 1) || (che->ch[0].ue.core_mode != che->ch[1].ue.core_mode)) ue->tns_data_present = get_bits1(gb); @@ -1424,7 +1469,29 @@ static int decode_usac_core_coder(AACDecContext *ac, AACUSACConfig *usac, } } - spectrum_decode(ac, usac, che, nb_channels); + if (ec->sbr.ratio) { + int sbr_ch = nb_channels; + if (nb_channels == 2 && + !(ec->stereo_config_index == 0 || ec->stereo_config_index == 3)) + sbr_ch = 1; + + ret = ff_aac_sbr_decode_usac_data(ac, che, ec, gb, sbr_ch, indep_flag); + if (ret < 0) + return ret; + + if (ec->stereo_config_index) { + avpriv_report_missing_feature(ac->avctx, "AAC USAC Mps212"); + return AVERROR_PATCHWELCOME; + } + } + + spectrum_decode(ac, usac, che, core_nb_channels); + + if (ac->oc[1].m4ac.sbr > 0) { + ac->proc.sbr_apply(ac, che, nb_channels == 2 ? TYPE_CPE : TYPE_SCE, + che->ch[0].output, + che->ch[1].output); + } return 0; } @@ -1591,9 +1658,29 @@ int ff_aac_usac_decode_frame(AVCodecContext *avctx, AACDecContext *ac, int indep_flag, samples = 0; int audio_found = 0; int elem_id[3 /* SCE, CPE, LFE */] = { 0, 0, 0 }; - AVFrame *frame = ac->frame; + int ratio_mult, ratio_dec; + AACUSACConfig *usac = &ac->oc[1].usac; + int sbr_ratio = usac->core_sbr_frame_len_idx == 2 ? 2 : + usac->core_sbr_frame_len_idx == 3 ? 3 : + usac->core_sbr_frame_len_idx == 4 ? 1 : + 0; + + if (sbr_ratio == 2) { + ratio_mult = 8; + ratio_dec = 3; + } else if (sbr_ratio == 3) { + ratio_mult = 2; + ratio_dec = 1; + } else if (sbr_ratio == 4) { + ratio_mult = 4; + ratio_dec = 1; + } else { + ratio_mult = 1; + ratio_dec = 1; + } + ff_aac_output_configure(ac, ac->oc[1].layout_map, ac->oc[1].layout_map_tags, ac->oc[1].status, 0); @@ -1660,8 +1747,10 @@ int ff_aac_usac_decode_frame(AVCodecContext *avctx, AACDecContext *ac, if (audio_found) samples = ac->oc[1].m4ac.frame_length_short ? 768 : 1024; + samples = (samples * ratio_mult) / ratio_dec; + if (ac->oc[1].status && audio_found) { - avctx->sample_rate = ac->oc[1].m4ac.sample_rate; + avctx->sample_rate = ac->oc[1].m4ac.ext_sample_rate; avctx->frame_size = samples; ac->oc[1].status = OC_LOCKED; } diff --git a/libavcodec/aacsbr.h b/libavcodec/aacsbr.h index d4582d1100..3958b43b91 100644 --- a/libavcodec/aacsbr.h +++ b/libavcodec/aacsbr.h @@ -88,6 +88,17 @@ int ff_aac_sbr_decode_extension(AACDecContext *ac, ChannelElement *che, int ff_aac_sbr_decode_extension_fixed(AACDecContext *ac, ChannelElement *che, GetBitContext *gb, int crc, int cnt, int id_aac); +/** Due to channel allocation not being known upon SBR parameter transmission, + * supply the parameters separately. + * Functionally identical to ff_aac_sbr_decode_extension() */ +int ff_aac_sbr_config_usac(AACDecContext *ac, ChannelElement *che, + AACUsacElemConfig *ue); + +/** Decode frame SBR data, USAC. */ +int ff_aac_sbr_decode_usac_data(AACDecContext *ac, ChannelElement *che, + AACUsacElemConfig *ue, GetBitContext *gb, + int sbr_ch, int indep_flag); + /** Apply one SBR element to one AAC element. */ void ff_aac_sbr_apply(AACDecContext *ac, ChannelElement *che, int id_aac, void /* float */ *L, void /* float */ *R); diff --git a/libavcodec/aacsbr_template.c b/libavcodec/aacsbr_template.c index 86f4d8c26e..e5bc4d4659 100644 --- a/libavcodec/aacsbr_template.c +++ b/libavcodec/aacsbr_template.c @@ -57,6 +57,7 @@ av_cold void AAC_RENAME(ff_aac_sbr_init)(void) /** Places SBR in pure upsampling mode. */ static void sbr_turnoff(SpectralBandReplication *sbr) { sbr->start = 0; + sbr->usac = 0; sbr->ready_for_dequant = 0; // Init defults used in pure upsampling mode sbr->kx[1] = 32; //Typo in spec, kx' inits to 32 @@ -184,7 +185,8 @@ static void sbr_make_f_tablelim(SpectralBandReplication *sbr) } } -static unsigned int read_sbr_header(SpectralBandReplication *sbr, GetBitContext *gb) +static unsigned int read_sbr_header(SpectralBandReplication *sbr, + GetBitContext *gb, int is_usac) { unsigned int cnt = get_bits_count(gb); uint8_t bs_header_extra_1; @@ -194,15 +196,20 @@ static unsigned int read_sbr_header(SpectralBandReplication *sbr, GetBitContext sbr->start = 1; sbr->ready_for_dequant = 0; + sbr->usac = is_usac; // Save last spectrum parameters variables to compare to new ones memcpy(&old_spectrum_params, &sbr->spectrum_params, sizeof(SpectrumParameters)); - sbr->bs_amp_res_header = get_bits1(gb); + if (!is_usac) + sbr->bs_amp_res_header = get_bits1(gb); + sbr->spectrum_params.bs_start_freq = get_bits(gb, 4); sbr->spectrum_params.bs_stop_freq = get_bits(gb, 4); - sbr->spectrum_params.bs_xover_band = get_bits(gb, 3); - skip_bits(gb, 2); // bs_reserved + + if (!is_usac) + sbr->spectrum_params.bs_xover_band = get_bits(gb, 3); + skip_bits(gb, 2); // bs_reserved bs_header_extra_1 = get_bits1(gb); bs_header_extra_2 = get_bits1(gb); @@ -645,7 +652,7 @@ static int read_sbr_grid(AACDecContext *ac, SpectralBandReplication *sbr, switch (bs_frame_class = get_bits(gb, 2)) { case FIXFIX: bs_num_env = 1 << get_bits(gb, 2); - if (bs_num_env > 4) { + if (bs_num_env > (sbr->usac ? 8 : 5)) { av_log(ac->avctx, AV_LOG_ERROR, "Invalid bitstream, too many SBR envelopes in FIXFIX type SBR frame: %d\n", bs_num_env); @@ -793,10 +800,26 @@ static void copy_sbr_grid(SBRData *dst, const SBRData *src) { /// Read how the envelope and noise floor data is delta coded static void read_sbr_dtdf(SpectralBandReplication *sbr, GetBitContext *gb, - SBRData *ch_data) + SBRData *ch_data, int indep_flag) { - get_bits1_vector(gb, ch_data->bs_df_env, ch_data->bs_num_env); - get_bits1_vector(gb, ch_data->bs_df_noise, ch_data->bs_num_noise); + if (sbr->usac) { + if (indep_flag) { + ch_data->bs_df_env[0] = 0; + get_bits1_vector(gb, &ch_data->bs_df_env[1], ch_data->bs_num_env - 1); + } else { + get_bits1_vector(gb, ch_data->bs_df_env, ch_data->bs_num_env); + } + + if (indep_flag) { + ch_data->bs_df_noise[0] = 0; + get_bits1_vector(gb, &ch_data->bs_df_noise[1], ch_data->bs_num_noise - 1); + } else { + get_bits1_vector(gb, ch_data->bs_df_noise, ch_data->bs_num_noise); + } + } else { + get_bits1_vector(gb, ch_data->bs_df_env, ch_data->bs_num_env); + get_bits1_vector(gb, ch_data->bs_df_noise, ch_data->bs_num_noise); + } } /// Read inverse filtering data @@ -811,7 +834,7 @@ static void read_sbr_invf(SpectralBandReplication *sbr, GetBitContext *gb, } static int read_sbr_envelope(AACDecContext *ac, SpectralBandReplication *sbr, GetBitContext *gb, - SBRData *ch_data, int ch) + SBRData *ch_data, int ch) { int bits; int i, j, k; @@ -881,6 +904,13 @@ static int read_sbr_envelope(AACDecContext *ac, SpectralBandReplication *sbr, Ge } } } + if (sbr->usac) { + if (sbr->inter_tes) { + ch_data->temp_shape[i] = get_bits(gb, 1); + if (ch_data->temp_shape[i]) + ch_data->temp_shape_mode[i] = get_bits(gb, 2); + } + } } //assign 0th elements of env_facs_q from last elements @@ -970,7 +1000,7 @@ static int read_sbr_single_channel_element(AACDecContext *ac, if (read_sbr_grid(ac, sbr, gb, &sbr->data[0])) return -1; - read_sbr_dtdf(sbr, gb, &sbr->data[0]); + read_sbr_dtdf(sbr, gb, &sbr->data[0], 0); read_sbr_invf(sbr, gb, &sbr->data[0]); if((ret = read_sbr_envelope(ac, sbr, gb, &sbr->data[0], 0)) < 0) return ret; @@ -996,8 +1026,8 @@ static int read_sbr_channel_pair_element(AACDecContext *ac, if (read_sbr_grid(ac, sbr, gb, &sbr->data[0])) return -1; copy_sbr_grid(&sbr->data[1], &sbr->data[0]); - read_sbr_dtdf(sbr, gb, &sbr->data[0]); - read_sbr_dtdf(sbr, gb, &sbr->data[1]); + read_sbr_dtdf(sbr, gb, &sbr->data[0], 0); + read_sbr_dtdf(sbr, gb, &sbr->data[1], 0); read_sbr_invf(sbr, gb, &sbr->data[0]); memcpy(sbr->data[1].bs_invf_mode[1], sbr->data[1].bs_invf_mode[0], sizeof(sbr->data[1].bs_invf_mode[0])); memcpy(sbr->data[1].bs_invf_mode[0], sbr->data[0].bs_invf_mode[0], sizeof(sbr->data[1].bs_invf_mode[0])); @@ -1013,8 +1043,8 @@ static int read_sbr_channel_pair_element(AACDecContext *ac, if (read_sbr_grid(ac, sbr, gb, &sbr->data[0]) || read_sbr_grid(ac, sbr, gb, &sbr->data[1])) return -1; - read_sbr_dtdf(sbr, gb, &sbr->data[0]); - read_sbr_dtdf(sbr, gb, &sbr->data[1]); + read_sbr_dtdf(sbr, gb, &sbr->data[0], 0); + read_sbr_dtdf(sbr, gb, &sbr->data[1], 0); read_sbr_invf(sbr, gb, &sbr->data[0]); read_sbr_invf(sbr, gb, &sbr->data[1]); if((ret = read_sbr_envelope(ac, sbr, gb, &sbr->data[0], 0)) < 0) @@ -1129,7 +1159,7 @@ int AAC_RENAME(ff_aac_sbr_decode_extension)(AACDecContext *ac, ChannelElement *c num_sbr_bits++; if (get_bits1(gb)) // bs_header_flag - num_sbr_bits += read_sbr_header(sbr, gb); + num_sbr_bits += read_sbr_header(sbr, gb, 0); if (sbr->reset) sbr_reset(ac, sbr); @@ -1148,6 +1178,178 @@ int AAC_RENAME(ff_aac_sbr_decode_extension)(AACDecContext *ac, ChannelElement *c return cnt; } +#if !USE_FIXED +static void copy_usac_default_header(SpectralBandReplication *sbr, + AACUsacElemConfig *ue) +{ + sbr->inter_tes = ue->sbr.bs_intertes; + + sbr->spectrum_params.bs_start_freq = ue->sbr.dflt.start_freq; + sbr->spectrum_params.bs_stop_freq = ue->sbr.dflt.stop_freq; + + sbr->spectrum_params.bs_freq_scale = ue->sbr.dflt.freq_scale; + sbr->spectrum_params.bs_alter_scale = ue->sbr.dflt.alter_scale; + sbr->spectrum_params.bs_noise_bands = ue->sbr.dflt.noise_bands; + + sbr->bs_limiter_bands = ue->sbr.dflt.limiter_bands; + sbr->bs_limiter_gains = ue->sbr.dflt.limiter_gains; + sbr->bs_interpol_freq = ue->sbr.dflt.interpol_freq; + sbr->bs_smoothing_mode = ue->sbr.dflt.smoothing_mode; +} + +int ff_aac_sbr_config_usac(AACDecContext *ac, ChannelElement *che, + AACUsacElemConfig *ue) +{ + SpectralBandReplication *sbr = get_sbr(che); + sbr_turnoff(sbr); + return 0; +} + +int ff_aac_sbr_decode_usac_data(AACDecContext *ac, ChannelElement *che, + AACUsacElemConfig *ue, GetBitContext *gb, + int sbr_ch, int indep_flag) +{ + int ret; + SpectralBandReplication *sbr = get_sbr(che); + int info_present = 1; + int header_present = 1; + + sbr->reset = 0; + sbr->usac = 1; + + sbr->sample_rate = ac->oc[1].m4ac.ext_sample_rate; + sbr->id_aac = sbr_ch == 2 ? TYPE_CPE : TYPE_SCE; + + if (!indep_flag) { + info_present = get_bits1(gb); + if (info_present) + header_present = get_bits1(gb); + else + header_present = 0; + } + + if (info_present) { + /* SbrInfo() */ + sbr->bs_amp_res_header = get_bits1(gb); + sbr->spectrum_params.bs_xover_band = get_bits(gb, 4); + sbr->bs_sbr_preprocessing = get_bits1(gb); + /* if (bs_pvc) ... */ + } + + if (header_present) { + if (get_bits1(gb)) { + int old_bs_limiter_bands = sbr->bs_limiter_bands; + SpectrumParameters old_spectrum_params; + memcpy(&old_spectrum_params, &sbr->spectrum_params, + sizeof(SpectrumParameters)); + + copy_usac_default_header(sbr, ue); + // Check if spectrum parameters changed + if (memcmp(&old_spectrum_params, &sbr->spectrum_params, + sizeof(SpectrumParameters))) + sbr->reset = 1; + + if (sbr->bs_limiter_bands != old_bs_limiter_bands && !sbr->reset) + sbr_make_f_tablelim(sbr); + } else { + read_sbr_header(sbr, gb, 1); + } + + sbr->start = 1; + } + + //Save some state from the previous frame. + sbr->kx[0] = sbr->kx[1]; + sbr->m[0] = sbr->m[1]; + sbr->kx_and_m_pushed = 1; + + if (sbr->reset) + sbr_reset(ac, sbr); + + sbr->ready_for_dequant = 1; + + int start = get_bits_count(gb); + + if (sbr_ch == 1) { /* sbr_single_channel_element */ + /* if (harmonicSBR) ... */ + + if (read_sbr_grid(ac, sbr, gb, &sbr->data[0])) + return -1; + + read_sbr_dtdf(sbr, gb, &sbr->data[0], indep_flag); + read_sbr_invf(sbr, gb, &sbr->data[0]); + + if ((ret = read_sbr_envelope(ac, sbr, gb, &sbr->data[0], 0)) < 0) + return ret; + + if ((ret = read_sbr_noise(ac, sbr, gb, &sbr->data[0], 0)) < 0) + return ret; + + if ((sbr->data[0].bs_add_harmonic_flag = get_bits1(gb))) + get_bits1_vector(gb, sbr->data[0].bs_add_harmonic, sbr->n[1]); + } else if (get_bits1(gb)) { /* bs_coupling == 1 */ + /* if (harmonicSBR) ... */ + + if (read_sbr_grid(ac, sbr, gb, &sbr->data[0])) + return -1; + copy_sbr_grid(&sbr->data[1], &sbr->data[0]); + + read_sbr_dtdf(sbr, gb, &sbr->data[0], indep_flag); + read_sbr_dtdf(sbr, gb, &sbr->data[1], indep_flag); + + read_sbr_invf(sbr, gb, &sbr->data[0]); + memcpy(sbr->data[1].bs_invf_mode[1], sbr->data[1].bs_invf_mode[0], + sizeof(sbr->data[1].bs_invf_mode[0])); + memcpy(sbr->data[1].bs_invf_mode[0], sbr->data[0].bs_invf_mode[0], + sizeof(sbr->data[1].bs_invf_mode[0])); + + if ((ret = read_sbr_envelope(ac, sbr, gb, &sbr->data[0], 0)) < 0) + return ret; + if ((ret = read_sbr_noise(ac, sbr, gb, &sbr->data[0], 0)) < 0) + return ret; + + if ((ret = read_sbr_envelope(ac, sbr, gb, &sbr->data[1], 1)) < 0) + return ret; + if ((ret = read_sbr_noise(ac, sbr, gb, &sbr->data[1], 1)) < 0) + return ret; + + if ((sbr->data[0].bs_add_harmonic_flag = get_bits1(gb))) + get_bits1_vector(gb, sbr->data[0].bs_add_harmonic, sbr->n[1]); + if ((sbr->data[1].bs_add_harmonic_flag = get_bits1(gb))) + get_bits1_vector(gb, sbr->data[1].bs_add_harmonic, sbr->n[1]); + } else { /* bs_coupling == 0 */ + /* if (harmonicSBR) ... */ + if (read_sbr_grid(ac, sbr, gb, &sbr->data[0])) + return -1; + if (read_sbr_grid(ac, sbr, gb, &sbr->data[1])) + return -1; + + read_sbr_dtdf(sbr, gb, &sbr->data[0], indep_flag); + read_sbr_dtdf(sbr, gb, &sbr->data[1], indep_flag); + + read_sbr_invf(sbr, gb, &sbr->data[0]); + read_sbr_invf(sbr, gb, &sbr->data[1]); + + if ((ret = read_sbr_envelope(ac, sbr, gb, &sbr->data[0], 0)) < 0) + return ret; + if ((ret = read_sbr_envelope(ac, sbr, gb, &sbr->data[1], 1)) < 0) + return ret; + + if ((ret = read_sbr_noise(ac, sbr, gb, &sbr->data[0], 0)) < 0) + return ret; + if ((ret = read_sbr_noise(ac, sbr, gb, &sbr->data[1], 1)) < 0) + return ret; + + if ((sbr->data[0].bs_add_harmonic_flag = get_bits1(gb))) + get_bits1_vector(gb, sbr->data[0].bs_add_harmonic, sbr->n[1]); + if ((sbr->data[1].bs_add_harmonic_flag = get_bits1(gb))) + get_bits1_vector(gb, sbr->data[1].bs_add_harmonic, sbr->n[1]); + } + + return 0; +} +#endif + /** * Analysis QMF Bank (14496-3 sp04 p206) * diff --git a/libavcodec/sbr.h b/libavcodec/sbr.h index fe3a39603a..40bb30e04d 100644 --- a/libavcodec/sbr.h +++ b/libavcodec/sbr.h @@ -68,9 +68,9 @@ typedef struct SBRData { unsigned bs_frame_class; unsigned bs_add_harmonic_flag; AAC_SIGNE bs_num_env; - uint8_t bs_freq_res[7]; + uint8_t bs_freq_res[9]; AAC_SIGNE bs_num_noise; - uint8_t bs_df_env[5]; + uint8_t bs_df_env[9]; uint8_t bs_df_noise[2]; uint8_t bs_invf_mode[2][5]; uint8_t bs_add_harmonic[48]; @@ -95,21 +95,24 @@ typedef struct SBRData { DECLARE_ALIGNED(16, INTFLOAT, Y)[2][38][64][2]; DECLARE_ALIGNED(16, AAC_FLOAT, g_temp)[42][48]; AAC_FLOAT q_temp[42][48]; - uint8_t s_indexmapped[8][48]; + uint8_t s_indexmapped[9][48]; ///Envelope scalefactors - uint8_t env_facs_q[6][48]; - AAC_FLOAT env_facs[6][48]; + uint8_t env_facs_q[9][48]; + AAC_FLOAT env_facs[9][48]; ///Noise scalefactors uint8_t noise_facs_q[3][5]; AAC_FLOAT noise_facs[3][5]; ///Envelope time borders - uint8_t t_env[8]; + uint8_t t_env[9]; ///Envelope time border of the last envelope of the previous frame uint8_t t_env_num_env_old; ///Noise time borders uint8_t t_q[3]; unsigned f_indexnoise; unsigned f_indexsine; + //inter_tes (USAC) + uint8_t temp_shape[6]; + uint8_t temp_shape_mode[6]; /** @} */ } SBRData; @@ -142,9 +145,12 @@ struct SpectralBandReplication { int start; int ready_for_dequant; int id_aac; + int usac; + int inter_tes; // USAC-only int reset; SpectrumParameters spectrum_params; int bs_amp_res_header; + int bs_sbr_preprocessing; // USAC-only /** * @name Variables associated with bs_header_extra_2 * @{ @@ -196,18 +202,18 @@ struct SpectralBandReplication { ///First coefficient used to filter the subband signals DECLARE_ALIGNED(16, INTFLOAT, alpha1)[64][2]; ///Dequantized envelope scalefactors, remapped - AAC_FLOAT e_origmapped[7][48]; + AAC_FLOAT e_origmapped[8][48]; ///Dequantized noise scalefactors, remapped - AAC_FLOAT q_mapped[7][48]; + AAC_FLOAT q_mapped[8][48]; ///Sinusoidal presence, remapped - uint8_t s_mapped[7][48]; + uint8_t s_mapped[8][48]; ///Estimated envelope - AAC_FLOAT e_curr[7][48]; + AAC_FLOAT e_curr[8][48]; ///Amplitude adjusted noise scalefactors - AAC_FLOAT q_m[7][48]; + AAC_FLOAT q_m[8][48]; ///Sinusoidal levels - AAC_FLOAT s_m[7][48]; - AAC_FLOAT gain[7][48]; + AAC_FLOAT s_m[8][48]; + AAC_FLOAT gain[8][48]; DECLARE_ALIGNED(32, INTFLOAT, qmf_filter_scratch)[5][64]; AVTXContext *mdct_ana; av_tx_fn mdct_ana_fn;