]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/aac.c
H.264: Fix memory leaks with multithreading.
[ffmpeg] / libavcodec / aac.c
index 5427d7c672c51f131f4646c91c10280c21391434..d1433bad4da24acb564b745f5288a5b05b798357 100644 (file)
@@ -231,12 +231,9 @@ static int decode_pce(AACContext * ac, enum ChannelPosition new_che_pos[4][MAX_E
     skip_bits(gb, 2);  // object_type
 
     sampling_index = get_bits(gb, 4);
-    if(sampling_index > 12) {
-        av_log(ac->avccontext, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
-        return -1;
-    }
-    ac->m4ac.sampling_index = sampling_index;
-    ac->m4ac.sample_rate = ff_mpeg4audio_sample_rates[ac->m4ac.sampling_index];
+    if (ac->m4ac.sampling_index != sampling_index)
+        av_log(ac->avccontext, AV_LOG_WARNING, "Sample rate index in program config element does not match the sample rate index configured by the container.\n");
+
     num_front       = get_bits(gb, 4);
     num_side        = get_bits(gb, 4);
     num_back        = get_bits(gb, 4);
@@ -500,8 +497,8 @@ static av_cold int aac_decode_init(AVCodecContext * avccontext) {
         ff_aac_scalefactor_code, sizeof(ff_aac_scalefactor_code[0]), sizeof(ff_aac_scalefactor_code[0]),
         352);
 
-    ff_mdct_init(&ac->mdct, 11, 1);
-    ff_mdct_init(&ac->mdct_small, 8, 1);
+    ff_mdct_init(&ac->mdct, 11, 1, 1.0);
+    ff_mdct_init(&ac->mdct_small, 8, 1, 1.0);
     // window initialization
     ff_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024);
     ff_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128);
@@ -568,16 +565,16 @@ static int decode_ics_info(AACContext * ac, IndividualChannelStream * ics, GetBi
             }
         }
         ics->num_windows   = 8;
-        ics->swb_offset    =      swb_offset_128[ac->m4ac.sampling_index];
-        ics->num_swb       =  ff_aac_num_swb_128[ac->m4ac.sampling_index];
-        ics->tns_max_bands =   tns_max_bands_128[ac->m4ac.sampling_index];
+        ics->swb_offset    =    ff_swb_offset_128[ac->m4ac.sampling_index];
+        ics->num_swb       =   ff_aac_num_swb_128[ac->m4ac.sampling_index];
+        ics->tns_max_bands = ff_tns_max_bands_128[ac->m4ac.sampling_index];
         ics->predictor_present = 0;
     } else {
         ics->max_sfb       = get_bits(gb, 6);
         ics->num_windows   = 1;
-        ics->swb_offset    =     swb_offset_1024[ac->m4ac.sampling_index];
-        ics->num_swb       = ff_aac_num_swb_1024[ac->m4ac.sampling_index];
-        ics->tns_max_bands =  tns_max_bands_1024[ac->m4ac.sampling_index];
+        ics->swb_offset    =    ff_swb_offset_1024[ac->m4ac.sampling_index];
+        ics->num_swb       =   ff_aac_num_swb_1024[ac->m4ac.sampling_index];
+        ics->tns_max_bands = ff_tns_max_bands_1024[ac->m4ac.sampling_index];
         ics->predictor_present = get_bits1(gb);
         ics->predictor_reset_group = 0;
         if (ics->predictor_present) {