Go to the documentation of this file.
45 #define PSY_3GPP_THR_SPREAD_HI 1.5f // spreading factor for low-to-hi threshold spreading (15 dB/Bark)
46 #define PSY_3GPP_THR_SPREAD_LOW 3.0f // spreading factor for hi-to-low threshold spreading (30 dB/Bark)
48 #define PSY_3GPP_EN_SPREAD_HI_L1 2.0f
50 #define PSY_3GPP_EN_SPREAD_HI_L2 1.5f
52 #define PSY_3GPP_EN_SPREAD_HI_S 1.5f
54 #define PSY_3GPP_EN_SPREAD_LOW_L 3.0f
56 #define PSY_3GPP_EN_SPREAD_LOW_S 2.0f
58 #define PSY_3GPP_RPEMIN 0.01f
59 #define PSY_3GPP_RPELEV 2.0f
61 #define PSY_3GPP_C1 3.0f
62 #define PSY_3GPP_C2 1.3219281f
63 #define PSY_3GPP_C3 0.55935729f
65 #define PSY_SNR_1DB 7.9432821e-1f
66 #define PSY_SNR_25DB 3.1622776e-3f
68 #define PSY_3GPP_SAVE_SLOPE_L -0.46666667f
69 #define PSY_3GPP_SAVE_SLOPE_S -0.36363637f
70 #define PSY_3GPP_SAVE_ADD_L -0.84285712f
71 #define PSY_3GPP_SAVE_ADD_S -0.75f
72 #define PSY_3GPP_SPEND_SLOPE_L 0.66666669f
73 #define PSY_3GPP_SPEND_SLOPE_S 0.81818181f
74 #define PSY_3GPP_SPEND_ADD_L -0.35f
75 #define PSY_3GPP_SPEND_ADD_S -0.26111111f
76 #define PSY_3GPP_CLIP_LO_L 0.2f
77 #define PSY_3GPP_CLIP_LO_S 0.2f
78 #define PSY_3GPP_CLIP_HI_L 0.95f
79 #define PSY_3GPP_CLIP_HI_S 0.75f
81 #define PSY_3GPP_AH_THR_LONG 0.5f
82 #define PSY_3GPP_AH_THR_SHORT 0.63f
84 #define PSY_PE_FORGET_SLOPE 511
92 #define PSY_3GPP_BITS_TO_PE(bits) ((bits) * 1.18f)
93 #define PSY_3GPP_PE_TO_BITS(bits) ((bits) / 1.18f)
96 #define PSY_LAME_FIR_LEN 21
97 #define AAC_BLOCK_SIZE_LONG 1024
98 #define AAC_BLOCK_SIZE_SHORT 128
99 #define AAC_NUM_BLOCKS_SHORT 8
100 #define PSY_LAME_NUM_SUBBLOCKS 2
106 #define PSY_LAME_PE_GAP 12
107 #define PSY_LAME_PE_QUIET 0.4f
108 #define PSY_LAME_PE_RED 0.45f
112 #define PSY_LAME_HIST 32
113 #define PSY_LAME_NOV_BACK 30
250 -8.65163e-18 * 2, -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2,
251 -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2, 0.0931738 * 2,
252 -5.52212e-17 * 2, -0.313819 * 2
261 int lower_range = 12, upper_range = 12;
269 for (
i = 1;
i < 13;
i++) {
312 return 13.3f *
atanf(0.00076
f *
f) + 3.5f *
atanf((
f / 7500.0
f) * (
f / 7500.0
f));
323 return 3.64 * pow(
f, -0.8)
324 - 6.8 *
exp(-0.6 * (
f - 3.4) * (
f - 3.4))
325 + 6.0 *
exp(-0.15 * (
f - 8.7) * (
f - 8.7))
326 + (0.6 + 0.04 * add) * 0.001 *
f *
f *
f *
f;
333 float prev, minscale, minath, minsnr, pe_min;
337 const float num_bark =
calc_bark((
float)bandwidth);
343 if (!
ctx->model_priv_data)
345 pctx =
ctx->model_priv_data;
350 chan_bitrate = (int)(chan_bitrate / 120.0 * (
ctx->avctx->global_quality ?
ctx->avctx->global_quality : 120));
358 ctx->bitres.size -=
ctx->bitres.size % 8;
361 for (j = 0; j < 2; j++) {
363 const uint8_t *band_sizes =
ctx->bands[j];
364 float line_to_frequency =
ctx->avctx->sample_rate / (j ? 256.f : 2048.0f);
365 float avg_chan_bits = chan_bitrate * (j ? 128.0f : 1024.0f) /
ctx->avctx->sample_rate;
374 for (
g = 0;
g <
ctx->num_bands[j];
g++) {
377 coeffs[
g].
barks = (bark + prev) / 2.0;
380 for (
g = 0;
g <
ctx->num_bands[j] - 1;
g++) {
382 float bark_width = coeffs[
g+1].
barks - coeffs->
barks;
385 coeff->spread_low[1] =
ff_exp10(-bark_width * en_spread_low);
387 pe_min = bark_pe * bark_width;
388 minsnr =
exp2(pe_min / band_sizes[
g]) - 1.5f;
392 for (
g = 0;
g <
ctx->num_bands[j];
g++) {
393 minscale =
ath(start * line_to_frequency,
ATH_ADD);
394 for (
i = 1;
i < band_sizes[
g];
i++)
396 coeffs[
g].
ath = minscale - minath;
397 start += band_sizes[
g];
408 for (
i = 0;
i <
ctx->avctx->ch_layout.nb_channels;
i++)
433 0xB6, 0x6C, 0xD8, 0xB2, 0x66, 0xC6, 0x96, 0x36, 0x36
441 const int16_t *audio,
447 int attack_ratio = br <= 16000 ? 18 : 10;
450 uint8_t grouping = 0;
456 int switch_to_eight = 0;
457 float sum = 0.0, sum2 = 0.0;
460 for (
i = 0;
i < 8;
i++) {
461 for (j = 0; j < 128; j++) {
468 for (
i = 0;
i < 8;
i++) {
469 if (
s[
i] > pch->win_energy * attack_ratio) {
475 pch->win_energy = pch->win_energy*7/8 + sum2/64;
477 wi.window_type[1] = prev_type;
485 grouping = pch->next_grouping;
501 pch->next_window_seq = next_type;
503 for (
i = 0;
i < 3;
i++)
504 wi.window_type[
i] = prev_type;
515 for (
i = 0;
i < 8;
i++) {
516 if (!((grouping >>
i) & 1))
518 wi.grouping[lastgrp]++;
535 float clipped_pe, bit_save, bit_spend, bit_factor, fill_level, forgetful_min_pe;
539 fill_level =
av_clipf((
float)
ctx->fill_level /
size, clip_low, clip_high);
541 bit_save = (fill_level + bitsave_add) * bitsave_slope;
542 assert(bit_save <= 0.3f && bit_save >= -0.05000001
f);
543 bit_spend = (fill_level + bitspend_add) * bitspend_slope;
544 assert(bit_spend <= 0.5f && bit_spend >= -0.1
f);
551 bit_factor = 1.0f - bit_save + ((bit_spend - bit_save) / (
ctx->pe.max -
ctx->pe.min)) * (clipped_pe -
ctx->pe.min);
559 ctx->pe.min =
FFMIN(pe, forgetful_min_pe);
565 ctx->frame_bits * bit_factor,
595 float thr_avg, reduction;
597 if(active_lines == 0.0)
600 thr_avg =
exp2f((
a - pe) / (4.0
f * active_lines));
601 reduction =
exp2f((
a - desired_pe) / (4.0
f * active_lines)) - thr_avg;
603 return FFMAX(reduction, 0.0
f);
609 float thr = band->
thr;
613 thr =
sqrtf(thr) + reduction;
632 const uint8_t *band_sizes,
const float *coefs,
const int cutoff)
635 int start = 0, wstart = 0;
638 for (
g = 0;
g < num_bands;
g++) {
641 float form_factor = 0.0f;
644 if (wstart < cutoff) {
645 for (
i = 0;
i < band_sizes[
g];
i++) {
646 band->
energy += coefs[start+
i] * coefs[start+
i];
654 start += band_sizes[
g];
655 wstart += band_sizes[
g];
673 hpfsmpl[
i] = (sum1 + sum2) * 32768.0
f;
686 float desired_bits, desired_pe, delta_pe, reduction=
NAN, spread_en[128] = {0};
687 float a = 0.0f, active_lines = 0.0f, norm_fac = 0.0f;
688 float pe = pctx->chan_bitrate > 32000 ? 0.0f :
FFMAX(50.0
f, 100.0
f - pctx->chan_bitrate * 100.0f / 32000.0f);
689 const int num_bands =
ctx->num_bands[wi->num_windows == 8];
690 const uint8_t *band_sizes =
ctx->bands[wi->num_windows == 8];
691 uint8_t s2l[16] = {0};
692 int start_after_long = wi->num_windows == 8 &&
695 if (start_after_long) {
696 const uint8_t *ls =
ctx->bands[0];
697 const int ln =
ctx->num_bands[0];
698 const uint8_t *
ss =
ctx->bands[1];
699 int lacc = 0, sacc = 0, gl = 0;
700 for (
int gs = 0; gs < num_bands && gs < 16; gs++) {
701 int center8 = (sacc +
ss[gs] / 2) * 8;
702 while (gl < ln - 1 && lacc + ls[gl] <= center8) { lacc += ls[gl]; gl++; }
708 AacPsyCoeffs *coeffs = pctx->psy_coef[wi->num_windows == 8];
711 const int cutoff = bandwidth * 2048 / wi->num_windows /
ctx->avctx->sample_rate;
714 calc_thr_3gpp(wi, num_bands, pch, band_sizes, coefs, cutoff);
717 for (
w = 0;
w < wi->num_windows*16;
w += 16) {
721 spread_en[0] =
bands[0].energy;
722 for (
g = 1;
g < num_bands;
g++) {
724 spread_en[
w+
g] =
FFMAX(
bands[
g].energy, spread_en[
w+
g-1] * coeffs[
g].spread_hi[1]);
726 for (
g = num_bands - 2;
g >= 0;
g--) {
728 spread_en[
w+
g] =
FFMAX(spread_en[
w+
g], spread_en[
w+
g+1] * coeffs[
g].spread_low[1]);
731 for (
g = 0;
g < num_bands;
g++) {
739 else if (!
w && start_after_long)
752 if (spread_en[
w+
g] * avoid_hole_thr > band->
energy || coeffs[
g].min_snr > 1.0f)
765 desired_pe = pe * (
ctx->avctx->global_quality ?
ctx->avctx->global_quality : 120) / (2 * 2.5
f * 120.0
f);
770 if (
ctx->bitres.bits > 0) {
775 pctx->pe.max =
FFMAX(pe, pctx->pe.max);
776 pctx->pe.min =
FFMIN(pe, pctx->pe.min);
785 if (
ctx->bitres.bits > 0)
790 ctx->bitres.alloc = desired_bits;
792 if (desired_pe < pe) {
794 for (
w = 0;
w < wi->num_windows*16;
w += 16) {
799 for (
g = 0;
g < num_bands;
g++) {
811 for (
i = 0;
i < 2;
i++) {
812 float pe_no_ah = 0.0f, desired_pe_no_ah;
813 active_lines =
a = 0.0f;
814 for (
w = 0;
w < wi->num_windows*16;
w += 16) {
815 for (
g = 0;
g < num_bands;
g++) {
819 pe_no_ah += band->
pe;
825 desired_pe_no_ah =
FFMAX(desired_pe - (pe - pe_no_ah), 0.0
f);
826 if (active_lines > 0.0
f)
830 for (
w = 0;
w < wi->num_windows*16;
w += 16) {
831 for (
g = 0;
g < num_bands;
g++) {
834 if (active_lines > 0.0
f)
837 if (band->
thr > 0.0f)
844 delta_pe = desired_pe - pe;
845 if (
fabs(delta_pe) > 0.05
f * desired_pe)
849 if (pe < 1.15
f * desired_pe) {
851 norm_fac = norm_fac ? 1.0f / norm_fac : 0;
852 for (
w = 0;
w < wi->num_windows*16;
w += 16) {
853 for (
g = 0;
g < num_bands;
g++) {
857 float delta_sfb_pe = band->
norm_fac * norm_fac * delta_pe;
858 float thr = band->
thr;
870 while (pe > desired_pe &&
g--) {
871 for (
w = 0;
w < wi->num_windows*16;
w+= 16) {
884 for (
w = 0;
w < wi->num_windows*16;
w += 16) {
885 for (
g = 0;
g < num_bands;
g++) {
896 memcpy(pch->prev_band, pch->band,
sizeof(pch->band));
924 for (ch = 0; ch < group->
num_ch; ch++) {
959 ctx->next_window_seq = blocktype;
967 const float *la,
int channel,
int prev_type,
970 int uselongblock = 1;
975 const float *pf = hpfsmpl;
990 energy_short[0] += energy_subshort[
i];
996 for (; pf < pfe; pf++)
1014 float frame_peak = 1.0f;
1016 const float nov_gate = 1.25f;
1021 frame_peak =
FFMAX(frame_peak, energy_subshort[
i]);
1029 if (attack_intensity[
i] > thr) {
1037 float nearmax = 1.0f, deepmax = 1.0f;
1038 for (
int k = 3; k <= 8; k++)
1039 nearmax =
FFMAX(nearmax, env[
pos - k]);
1041 deepmax =
FFMAX(deepmax, env[
pos - k]);
1042 if (energy_subshort[
i] < nov_gate * nearmax ||
1043 (energy_subshort[
i] < nov_gate * deepmax &&
1057 const float u = energy_short[
i - 1];
1058 const float v = energy_short[
i];
1059 const float m =
FFMAX(
u, v);
1061 if (
u < 2.3
f * v && v < 2.3
f *
u) {
1062 if (
i == 1 && attacks[0] < attacks[
i])
1067 att_sum += attacks[
i];
1086 att_sum += attacks[0];
1094 if (attacks[
i] && attacks[
i-1])
1102 return uselongblock;
1110 int prev_type,
int have_la)
1136 for (
i = 0;
i < 8;
i++) {
1149 for (
i = 0;
i < 9;
i++) {
1163 const float *la,
int channel,
int prev_type)
1170 return psy_lame_apply(pctx, pch, uselongblock, attacks, prev_type, !!la);
1175 const float *audio0,
const float *la0,
1176 const float *audio1,
const float *la1,
1177 int channel0,
int channel1,
1178 int prev_type0,
int prev_type1,
1187 int u0 =
psy_lame_detect(pctx, pch0, la0, channel0, prev_type0, att0);
1188 int u1 =
psy_lame_detect(pctx, pch1, la1, channel1, prev_type1, att1);
1191 if (
ctx->pair_decoupled[(channel0 >> 1) & 15]) {
1205 merged[
i] = att0[
i] ? att0[
i] : att1[
i];
1213 .
name =
"3GPP TS 26.403-inspired model",
#define PSY_LAME_PE_QUIET
pre-onset must be below this fraction of the frame peak
#define PSY_LAME_PE_RED
attack-threshold multiplier for a qualifying isolated onset
float spread_low[2]
spreading factor for low-to-high threshold spreading in long frame
static av_always_inline double ff_exp10(double x)
Compute 10^x for floating point values.
static av_cold int psy_3gpp_init(FFPsyContext *ctx)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
static av_unused FFPsyWindowInfo psy_3gpp_window(FFPsyContext *ctx, const int16_t *audio, const int16_t *la, int channel, int prev_type)
Tell encoder which window types to use.
static float lame_calc_attack_threshold(int bitrate)
Calculate the ABR attack threshold from the above LAME psymodel table.
#define PSY_PE_FORGET_SLOPE
static FFPsyWindowInfo psy_lame_window(FFPsyContext *ctx, const float *audio, const float *la, int channel, int prev_type)
struct AacPsyContext::@42 pe
float thr
energy threshold
static void calc_thr_3gpp(const FFPsyWindowInfo *wi, const int num_bands, AacPsyChannel *pch, const uint8_t *band_sizes, const float *coefs, const int cutoff)
#define PSY_3GPP_PE_TO_BITS(bits)
#define AV_CODEC_FLAG_QSCALE
Use fixed qscale.
static av_cold float calc_bark(float f)
Calculate Bark value for given line.
float nz_lines
number of non-zero spectral lines
#define PSY_3GPP_CLIP_LO_S
#define u(width, name, range_min, range_max)
#define PSY_3GPP_AH_THR_LONG
int window_shape
window shape (sine/KBD/whatever)
static float calc_pe_3gpp(AacPsyBand *band)
#define PSY_LAME_NOV_BACK
novelty look-back in sub-blocks
float min
minimum allowed PE for bit factor calculation
#define PSY_3GPP_SPEND_SLOPE_L
#define PSY_3GPP_THR_SPREAD_HI
constants for 3GPP AAC psychoacoustic model
int fill_level
bit reservoir fill level
int64_t last_att
win_count value of this channel's last own attack
int nb_channels
Number of channels in this layout.
float spread_hi[2]
spreading factor for high-to-low threshold spreading in long frame
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about quality
static void lame_apply_block_type(AacPsyChannel *ctx, FFPsyWindowInfo *wi, int uselongblock)
psychoacoustic model frame type-dependent coefficients
int64_t rc_frame_num
frame the rewind state was saved for
AVChannelLayout ch_layout
Audio channel layout.
static av_cold void lame_window_init(AacPsyContext *ctx, AVCodecContext *avctx)
LAME psy model specific initialization.
float st_lrm
short threshold for L, R, and M channels
#define PSY_3GPP_EN_SPREAD_HI_S
#define PSY_LAME_PE_GAP
min consecutive long frames before the relaxation applies
float prev_frame_energy
previous frame's full-band lookahead energy (attack veto)
#define PSY_3GPP_SPEND_ADD_L
int flags
AV_CODEC_FLAG_*.
int64_t win_count
window() calls so far (frame counter for pair sync)
float barks
Bark value for each spectral band in long frame.
float prev_energy_subshort[AAC_NUM_BLOCKS_SHORT *PSY_LAME_NUM_SUBBLOCKS]
#define ss(width, name, subs,...)
static __device__ float fabsf(float a)
windowing related information
int64_t bit_rate
Total stream bitrate in bit/s, 0 if not available.
float previous
allowed PE of the previous frame
const FFPsyModel ff_aac_psy_model
uint8_t num_ch
number of channels in this group
int rc_first_ch
first channel analyzed in that frame
LAME psy model preset struct.
int64_t rc_frame_num
frame this channel last saved rewind state for
#define PSY_3GPP_CLIP_HI_S
information for single band used by 3GPP TS26.403-inspired psychoacoustic model
int global_quality
Global quality for codecs which cannot change it per frame.
int flags
Flags modifying the (de)muxer behaviour.
int quality
Quality to map the rest of the values to.
float pe_const
constant part of the PE calculation
3GPP TS26.403-inspired psychoacoustic model specific data
int next_attack0_zero
whether attack[0] of the next frame is zero
static AVFormatContext * ctx
static float calc_reduction_3gpp(float a, float desired_pe, float pe, float active_lines)
static const uint8_t window_grouping[9]
window grouping information stored as bits (0 - new group, 1 - group continues)
#define AAC_BLOCK_SIZE_SHORT
short block size
static const float bands[]
static av_cold float ath(float f, float add)
Calculate ATH value for given frequency.
static int calc_bit_demand(AacPsyContext *ctx, float pe, int bits, int size, int short_window)
#define PSY_3GPP_AH_THR_SHORT
static void psy_hp_filter(const float *firbuf, float *hpfsmpl, const float *psy_fir_coeffs)
static float iir_filter(int in, float state[2])
IIR filter used in block switching decision.
static const PsyLamePreset psy_vbr_map[]
LAME psy model preset table for constant quality.
int window_type[3]
window type (short/long/transitional, etc.) - current, previous and next
static __device__ float fabs(float a)
static const PsyLamePreset psy_abr_map[]
LAME psy model preset table for ABR.
int64_t bit_rate
the average bitrate
static int psy_lame_detect(AacPsyContext *pctx, AacPsyChannel *pch, const float *la, int channel, int prev_type, int attacks[AAC_NUM_BLOCKS_SHORT+1])
float hp_env_hist[PSY_LAME_HIST]
rolling HP sub-block peak envelope
static av_cold void psy_3gpp_end(FFPsyContext *apc)
#define PSY_3GPP_BITS_TO_PE(bits)
single band psychoacoustic information
static __device__ float sqrtf(float a)
int grouping[8]
window grouping (for e.g. AAC)
float max
maximum allowed PE for bit factor calculation
float iir_state[2]
hi-pass IIR filter state
AacPsyCoeffs psy_coef[2][64]
float thr_quiet
threshold in quiet
#define AAC_BLOCK_SIZE_LONG
long block size
AacPsyBand band[128]
bands information
#define i(width, name, range_min, range_max)
#define PSY_LAME_HIST
HP sub-block peak history depth.
static float calc_reduced_thr_3gpp(AacPsyBand *band, float min_snr, float reduction)
float ath
absolute threshold of hearing per bands
float active_lines
number of active spectral lines
#define AAC_NUM_BLOCKS_SHORT
number of blocks in a short sequence
#define PSY_LAME_FIR_LEN
LAME psy model FIR order.
AacPsyBand rc_prev_band[128]
prev_band as it was entering the frame
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
#define PSY_3GPP_CLIP_LO_L
int avoid_holes
hole avoidance flag
#define PSY_3GPP_THR_SPREAD_LOW
#define PSY_3GPP_SAVE_ADD_S
#define PSY_3GPP_SPEND_ADD_S
int frames_since_short
consecutive long frames (pre-echo-aware isolated-onset gate)
static const float psy_fir_coeffs[]
LAME psy model FIR coefficient table.
float attack_threshold
attack threshold for this channel
float norm_fac
normalization factor for linearization
#define PSY_3GPP_CLIP_HI_L
float pe
perceptual entropy
void * av_calloc(size_t nmemb, size_t size)
psychoacoustic information for an arbitrary group of channels
enum WindowSequence next_window_seq
window sequence to be used in the next frame
float win_energy
sliding average of channel energy
static FFPsyWindowInfo psy_lame_apply(AacPsyContext *pctx, AacPsyChannel *pch, int uselongblock, const int attacks[AAC_NUM_BLOCKS_SHORT+1], int prev_type, int have_la)
single/pair channel context for psychoacoustic model
float correction
PE correction factor.
void * model_priv_data
psychoacoustic model implementation private data
#define PSY_3GPP_SAVE_SLOPE_S
#define PSY_3GPP_EN_SPREAD_HI_L1
uint8_t next_grouping
stored grouping scheme for the next frame (in case of 8 short window sequence)
main external API structure.
#define PSY_LAME_NUM_SUBBLOCKS
Number of sub-blocks in each short block.
float global_quality
normalized global quality taken from avctx
static void psy_3gpp_analyze_channel(FFPsyContext *ctx, int channel, const float *coefs, const FFPsyWindowInfo *wi)
Calculate band thresholds as suggested in 3GPP TS26.403.
codec-specific psychoacoustic model implementation
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
int frame_bits
average bits per frame
FFPsyChannelGroup * ff_psy_find_group(FFPsyContext *ctx, int channel)
Determine what group a channel belongs to.
static void psy_3gpp_analyze(FFPsyContext *ctx, int channel, const float **coeffs, const FFPsyWindowInfo *wi)
#define PSY_3GPP_EN_SPREAD_LOW_L
int chan_bitrate
bitrate per channel
#define PSY_3GPP_SAVE_SLOPE_L
static const double coeff[2][5]
#define PSY_3GPP_SPEND_SLOPE_S
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
#define PSY_3GPP_EN_SPREAD_LOW_S
int prev_attack
attack value for the last short block in the previous sequence
context used by psychoacoustic model
AacPsyBand prev_band[128]
bands information from the previous frame
int num_windows
number of windows in a frame
#define PSY_3GPP_SAVE_ADD_L
static void psy_lame_window_pair(FFPsyContext *ctx, const float *audio0, const float *la0, const float *audio1, const float *la1, int channel0, int channel1, int prev_type0, int prev_type1, FFPsyWindowInfo wi[2])