]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/aacsbr.c
Remove unnecessary header inclusion directives.
[ffmpeg] / libavcodec / aacsbr.c
index 6915152eca465c78016058e875b63cb2801bcf58..9821d9981075572e4a568befaa44a0432aa4590c 100644 (file)
@@ -892,18 +892,24 @@ static void read_sbr_noise(SpectralBandReplication *sbr, GetBitContext *gb,
 
 static void read_sbr_extension(AACContext *ac, SpectralBandReplication *sbr,
                                GetBitContext *gb,
-                          int bs_extension_id, int *num_bits_left)
+                               int bs_extension_id, int *num_bits_left)
 {
 //TODO - implement ps_data for parametric stereo parsing
     switch (bs_extension_id) {
     case EXTENSION_ID_PS:
+        if (!ac->m4ac.ps) {
+            av_log(ac->avccontext, AV_LOG_ERROR, "Parametric Stereo signaled to be not-present but was found in the bitstream.\n");
+            skip_bits_long(gb, *num_bits_left); // bs_fill_bits
+            *num_bits_left = 0;
+        } else {
 #if 0
-        *num_bits_left -= ff_ps_data(gb, ps);
+            *num_bits_left -= ff_ps_data(gb, ps);
 #else
-        av_log_missing_feature(ac->avccontext, "Parametric Stereo is", 0);
-        skip_bits_long(gb, *num_bits_left); // bs_fill_bits
-        *num_bits_left = 0;
+            av_log_missing_feature(ac->avccontext, "Parametric Stereo is", 0);
+            skip_bits_long(gb, *num_bits_left); // bs_fill_bits
+            *num_bits_left = 0;
 #endif
+        }
         break;
     default:
         av_log_missing_feature(ac->avccontext, "Reserved SBR extensions are", 1);
@@ -1126,14 +1132,13 @@ static void sbr_dequant(SpectralBandReplication *sbr, int id_aac)
  */
 static void sbr_qmf_analysis(DSPContext *dsp, RDFTContext *rdft, const float *in, float *x,
                              float z[320], float W[2][32][32][2],
-                             float bias, float scale)
+                             float scale)
 {
     int i, k;
     memcpy(W[0], W[1], sizeof(W[0]));
     memcpy(x    , x+1024, (320-32)*sizeof(x[0]));
-    if (scale != 1.0f || bias != 0.0f)
-        for (i = 0; i < 1024; i++)
-            x[288 + i] = (in[i] - bias) * scale;
+    if (scale != 1.0f)
+        dsp->vector_fmul_scalar(x+288, in, scale, 1024);
     else
         memcpy(x+288, in, 1024*sizeof(*x));
     for (i = 0; i < 32; i++) { // numTimeSlots*RATE = 16*2 as 960 sample frames
@@ -1719,7 +1724,7 @@ void ff_sbr_apply(AACContext *ac, SpectralBandReplication *sbr, int ch,
     /* decode channel */
     sbr_qmf_analysis(&ac->dsp, &sbr->rdft, in, sbr->data[ch].analysis_filterbank_samples,
                      (float*)sbr->qmf_filter_scratch,
-                     sbr->data[ch].W, ac->add_bias, 1/(-1024 * ac->sf_scale));
+                     sbr->data[ch].W, 1/(-1024 * ac->sf_scale));
     sbr_lf_gen(ac, sbr, sbr->X_low, sbr->data[ch].W);
     if (sbr->start) {
         sbr_hf_inverse_filter(sbr->alpha0, sbr->alpha1, sbr->X_low, sbr->k[0]);