]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/aacenc_pred.c
avcodec/rawdec: Initialize default mono palette only for bits_per_coded_sample == 1
[ffmpeg] / libavcodec / aacenc_pred.c
index d76a575190cd9038f2b36649e41a6c3eeb08df29..e77a3de987c7b43e7db347fae87c88f79d4e032e 100644 (file)
@@ -257,7 +257,9 @@ void ff_aac_search_for_pred(AACEncContext *s, SingleChannelElement *sce)
     for (sfb = PRED_SFB_START; sfb < pmax; sfb++) {
         int cost1, cost2, cb_p;
         float dist1, dist2, dist_spec_err = 0.0f;
-        const int cb_n = sce->band_type[sfb];
+        const int cb_n = sce->zeroes[sfb] ? 0 : sce->band_type[sfb];
+        const int cb_min = sce->zeroes[sfb] ? 0 : 1;
+        const int cb_max = sce->zeroes[sfb] ? 0 : RESERVED_BT;
         const int start_coef = sce->ics.swb_offset[sfb];
         const int num_coeffs = sce->ics.swb_offset[sfb + 1] - start_coef;
         const FFPsyBand *band = &s->psy.ch[s->cur_channel].psy_bands[sfb];
@@ -279,7 +281,7 @@ void ff_aac_search_for_pred(AACEncContext *s, SingleChannelElement *sce)
             SENT[i] = sce->coeffs[start_coef + i] - sce->prcoeffs[start_coef + i];
         abs_pow34_v(S34, SENT, num_coeffs);
         if (cb_n < RESERVED_BT)
-            cb_p = find_min_book(find_max_val(1, num_coeffs, S34), sce->sf_idx[sfb]);
+            cb_p = av_clip(find_min_book(find_max_val(1, num_coeffs, S34), sce->sf_idx[sfb]), cb_min, cb_max);
         else
             cb_p = cb_n;
         quantize_and_encode_band_cost(s, NULL, SENT, QERR, S34, num_coeffs,
@@ -291,7 +293,7 @@ void ff_aac_search_for_pred(AACEncContext *s, SingleChannelElement *sce)
             sce->prcoeffs[start_coef + i] += QERR[i] != 0.0f ? (sce->prcoeffs[start_coef + i] - QERR[i]) : 0.0f;
         abs_pow34_v(P34, &sce->prcoeffs[start_coef], num_coeffs);
         if (cb_n < RESERVED_BT)
-            cb_p = find_min_book(find_max_val(1, num_coeffs, P34), sce->sf_idx[sfb]);
+            cb_p = av_clip(find_min_book(find_max_val(1, num_coeffs, P34), sce->sf_idx[sfb]), cb_min, cb_max);
         else
             cb_p = cb_n;
         dist2 = quantize_and_encode_band_cost(s, NULL, &sce->prcoeffs[start_coef], NULL,