[FFmpeg-trac] #2686(avcodec:open): Native AAC encoder collapses at high bitrates on some samples
FFmpeg
trac at avcodec.org
Sat Mar 12 08:43:05 CET 2016
#2686: Native AAC encoder collapses at high bitrates on some samples
-------------------------------------+-------------------------------------
Reporter: Kamedo2 | Owner:
Type: defect | klaussfreire
Priority: normal | Status: open
Version: git-master | Component: avcodec
Keywords: aac | Resolution:
regression | Blocked By:
Blocking: | Reproduced by developer: 1
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Comment (by Kamedo2):
In this commit
http://git.videolan.org/?p=ffmpeg.git;a=commit;h=66edd8656b851a0c85ba25ec293cc66192c363ae
I guess libavcodec/lpc.c line 179 is meant to be {{{i < len / 2;}}}.
{{{
170 double ff_lpc_calc_ref_coefs_f(LPCContext *s, const float *samples,
int len,
171 int order, double *ref)
172 {
173 int i;
174 double signal = 0.0f, avg_err = 0.0f;
175 double autoc[MAX_LPC_ORDER+1] = {0}, error[MAX_LPC_ORDER+1] =
{0};
176 const double a = 0.5f, b = 1.0f - a;
177
178 /* Apply windowing */
179 for (i = 0; i <= len / 2; i++) {
180 double weight = a - b*cos((2*M_PI*i)/(len - 1));
181 s->windowed_samples[i] = weight*samples[i];
182 s->windowed_samples[len-1-i] = weight*samples[len-1-i];
183 }
184
185 s->lpc_compute_autocorr(s->windowed_samples, len, order, autoc);
186 signal = autoc[0];
187 compute_ref_coefs(autoc, order, ref, error);
188 for (i = 0; i < order; i++)
189 avg_err = (avg_err + error[i])/2.0f;
190 return signal/avg_err;
191 }
}}}
And we can get a 1.2% speedup if we exclude cos function from the loop.
{{{
/* Apply windowing */
double cos_onestep = cos((2*M_PI)/(len - 1));
double sin_onestep = sin((2*M_PI)/(len - 1));
double cos_isteps = b;
double sin_isteps = 0;
for (i = 0; i < len / 2; i++) {
double sin_newsteps;
double weight = a - cos_isteps;
s->windowed_samples[i] = weight*samples[i];
s->windowed_samples[len-1-i] = weight*samples[len-1-i];
sin_newsteps = sin_isteps*cos_onestep + cos_isteps*sin_onestep;
cos_isteps = cos_isteps*cos_onestep - sin_isteps*sin_onestep;
sin_isteps = sin_newsteps;
}
}}}
--
Ticket URL: <https://trac.ffmpeg.org/ticket/2686#comment:504>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list