mirror of
https://github.com/jellyfin/jellyfin-ffmpeg.git
synced 2026-09-03 05:09:58 +03:00
Imported Upstream version 3.1.1
This commit is contained in:
+20
-7
@@ -78,11 +78,10 @@ static void put_audio_specific_config(AVCodecContext *avctx)
|
||||
|
||||
void ff_quantize_band_cost_cache_init(struct AACEncContext *s)
|
||||
{
|
||||
int sf, g;
|
||||
for (sf = 0; sf < 256; sf++) {
|
||||
for (g = 0; g < 128; g++) {
|
||||
s->quantize_band_cost_cache[sf][g].bits = -1;
|
||||
}
|
||||
++s->quantize_band_cost_cache_generation;
|
||||
if (s->quantize_band_cost_cache_generation == 0) {
|
||||
memset(s->quantize_band_cost_cache, 0, sizeof(s->quantize_band_cost_cache));
|
||||
s->quantize_band_cost_cache_generation = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -555,10 +554,11 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
|
||||
if (!frame)
|
||||
la = NULL;
|
||||
if (tag == TYPE_LFE) {
|
||||
wi[ch].window_type[0] = ONLY_LONG_SEQUENCE;
|
||||
wi[ch].window_type[0] = wi[ch].window_type[1] = ONLY_LONG_SEQUENCE;
|
||||
wi[ch].window_shape = 0;
|
||||
wi[ch].num_windows = 1;
|
||||
wi[ch].grouping[0] = 1;
|
||||
wi[ch].clipping[0] = 0;
|
||||
|
||||
/* Only the lowest 12 coefficients are used in a LFE channel.
|
||||
* The expression below results in only the bottom 8 coefficients
|
||||
@@ -583,9 +583,22 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
|
||||
ics->tns_max_bands = wi[ch].window_type[0] == EIGHT_SHORT_SEQUENCE ?
|
||||
ff_tns_max_bands_128 [s->samplerate_index]:
|
||||
ff_tns_max_bands_1024[s->samplerate_index];
|
||||
clip_avoidance_factor = 0.0f;
|
||||
|
||||
for (w = 0; w < ics->num_windows; w++)
|
||||
ics->group_len[w] = wi[ch].grouping[w];
|
||||
|
||||
/* Calculate input sample maximums and evaluate clipping risk */
|
||||
clip_avoidance_factor = 0.0f;
|
||||
for (w = 0; w < ics->num_windows; w++) {
|
||||
const float *wbuf = overlap + w * 128;
|
||||
const int wlen = 2048 / ics->num_windows;
|
||||
float max = 0;
|
||||
int j;
|
||||
/* mdct input is 2 * output */
|
||||
for (j = 0; j < wlen; j++)
|
||||
max = FFMAX(max, fabsf(wbuf[j]));
|
||||
wi[ch].clipping[w] = max;
|
||||
}
|
||||
for (w = 0; w < ics->num_windows; w++) {
|
||||
if (wi[ch].clipping[w] > CLIP_AVOIDANCE_FACTOR) {
|
||||
ics->window_clipping[w] = 1;
|
||||
|
||||
Reference in New Issue
Block a user