[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