Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Side by Side Diff: patched-ffmpeg-mt/libavcodec/aac.c

Issue 789004: ffmpeg roll of source to mar 9 version... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/ffmpeg/
Patch Set: '' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * AAC decoder 2 * AAC decoder
3 * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org ) 3 * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org )
4 * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com ) 4 * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com )
5 * 5 *
6 * This file is part of FFmpeg. 6 * This file is part of FFmpeg.
7 * 7 *
8 * FFmpeg is free software; you can redistribute it and/or 8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public 9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 * N Error Protection tool 55 * N Error Protection tool
56 * N CELP 56 * N CELP
57 * N Silence Compression 57 * N Silence Compression
58 * N HVXC 58 * N HVXC
59 * N HVXC 4kbits/s VR 59 * N HVXC 4kbits/s VR
60 * N Structured Audio tools 60 * N Structured Audio tools
61 * N Structured Audio Sample Bank Format 61 * N Structured Audio Sample Bank Format
62 * N MIDI 62 * N MIDI
63 * N Harmonic and Individual Lines plus Noise 63 * N Harmonic and Individual Lines plus Noise
64 * N Text-To-Speech Interface 64 * N Text-To-Speech Interface
65 * N (in progress) Spectral Band Replication 65 * Y Spectral Band Replication
66 * Y (not in this code) Layer-1 66 * Y (not in this code) Layer-1
67 * Y (not in this code) Layer-2 67 * Y (not in this code) Layer-2
68 * Y (not in this code) Layer-3 68 * Y (not in this code) Layer-3
69 * N SinuSoidal Coding (Transient, Sinusoid, Noise) 69 * N SinuSoidal Coding (Transient, Sinusoid, Noise)
70 * N (planned) Parametric Stereo 70 * N (planned) Parametric Stereo
71 * N Direct Stream Transfer 71 * N Direct Stream Transfer
72 * 72 *
73 * Note: - HE AAC v1 comprises LC AAC with Spectral Band Replication. 73 * Note: - HE AAC v1 comprises LC AAC with Spectral Band Replication.
74 * - HE AAC v2 comprises LC AAC with Spectral Band Replication and 74 * - HE AAC v2 comprises LC AAC with Spectral Band Replication and
75 Parametric Stereo. 75 Parametric Stereo.
76 */ 76 */
77 77
78 78
79 #include "avcodec.h" 79 #include "avcodec.h"
80 #include "internal.h" 80 #include "internal.h"
81 #include "get_bits.h" 81 #include "get_bits.h"
82 #include "dsputil.h" 82 #include "dsputil.h"
83 #include "fft.h"
83 #include "lpc.h" 84 #include "lpc.h"
84 85
85 #include "aac.h" 86 #include "aac.h"
86 #include "aactab.h" 87 #include "aactab.h"
87 #include "aacdectab.h" 88 #include "aacdectab.h"
89 #include "sbr.h"
90 #include "aacsbr.h"
88 #include "mpeg4audio.h" 91 #include "mpeg4audio.h"
89 #include "aac_parser.h" 92 #include "aac_parser.h"
90 93
91 #include <assert.h> 94 #include <assert.h>
92 #include <errno.h> 95 #include <errno.h>
93 #include <math.h> 96 #include <math.h>
94 #include <string.h> 97 #include <string.h>
95 98
96 #if ARCH_ARM 99 #if ARCH_ARM
97 # include "arm/aac.h" 100 # include "arm/aac.h"
98 #endif 101 #endif
99 102
100 union float754 { 103 union float754 {
101 float f; 104 float f;
102 uint32_t i; 105 uint32_t i;
103 }; 106 };
104 107
105 static VLC vlc_scalefactors; 108 static VLC vlc_scalefactors;
106 static VLC vlc_spectral[11]; 109 static VLC vlc_spectral[11];
107 110
108 static uint32_t cbrt_tab[1<<13]; 111 static uint32_t cbrt_tab[1<<13];
109 112
113 static const char overread_err[] = "Input buffer exhausted before END element fo und\n";
114
110 static ChannelElement *get_che(AACContext *ac, int type, int elem_id) 115 static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
111 { 116 {
112 if (ac->tag_che_map[type][elem_id]) { 117 if (ac->tag_che_map[type][elem_id]) {
113 return ac->tag_che_map[type][elem_id]; 118 return ac->tag_che_map[type][elem_id];
114 } 119 }
115 if (ac->tags_mapped >= tags_per_config[ac->m4ac.chan_config]) { 120 if (ac->tags_mapped >= tags_per_config[ac->m4ac.chan_config]) {
116 return NULL; 121 return NULL;
117 } 122 }
118 switch (ac->m4ac.chan_config) { 123 switch (ac->m4ac.chan_config) {
119 case 7: 124 case 7:
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 * If it exists, make sure the appropriate element is allocated and map the 167 * If it exists, make sure the appropriate element is allocated and map the
163 * channel order to match the internal FFmpeg channel layout. 168 * channel order to match the internal FFmpeg channel layout.
164 * 169 *
165 * @param che_pos current channel position configuration 170 * @param che_pos current channel position configuration
166 * @param type channel element type 171 * @param type channel element type
167 * @param id channel element id 172 * @param id channel element id
168 * @param channels count of the number of channels in the configuration 173 * @param channels count of the number of channels in the configuration
169 * 174 *
170 * @return Returns error status. 0 - OK, !0 - error 175 * @return Returns error status. 0 - OK, !0 - error
171 */ 176 */
172 static int che_configure(AACContext *ac, 177 static av_cold int che_configure(AACContext *ac,
173 enum ChannelPosition che_pos[4][MAX_ELEM_ID], 178 enum ChannelPosition che_pos[4][MAX_ELEM_ID],
174 int type, int id, 179 int type, int id,
175 int *channels) 180 int *channels)
176 { 181 {
177 if (che_pos[type][id]) { 182 if (che_pos[type][id]) {
178 if (!ac->che[type][id] && !(ac->che[type][id] = av_mallocz(sizeof(Channe lElement)))) 183 if (!ac->che[type][id] && !(ac->che[type][id] = av_mallocz(sizeof(Channe lElement))))
179 return AVERROR(ENOMEM); 184 return AVERROR(ENOMEM);
185 ff_aac_sbr_ctx_init(&ac->che[type][id]->sbr);
180 if (type != TYPE_CCE) { 186 if (type != TYPE_CCE) {
181 ac->output_data[(*channels)++] = ac->che[type][id]->ch[0].ret; 187 ac->output_data[(*channels)++] = ac->che[type][id]->ch[0].ret;
182 if (type == TYPE_CPE) { 188 if (type == TYPE_CPE) {
183 ac->output_data[(*channels)++] = ac->che[type][id]->ch[1].ret; 189 ac->output_data[(*channels)++] = ac->che[type][id]->ch[1].ret;
184 } 190 }
185 } 191 }
186 } else 192 } else {
193 if (ac->che[type][id])
194 ff_aac_sbr_ctx_close(&ac->che[type][id]->sbr);
187 av_freep(&ac->che[type][id]); 195 av_freep(&ac->che[type][id]);
196 }
188 return 0; 197 return 0;
189 } 198 }
190 199
191 /** 200 /**
192 * Configure output channel order based on the current program configuration ele ment. 201 * Configure output channel order based on the current program configuration ele ment.
193 * 202 *
194 * @param che_pos current channel position configuration 203 * @param che_pos current channel position configuration
195 * @param new_che_pos New channel position configuration - we only do somethin g if it differs from the current one. 204 * @param new_che_pos New channel position configuration - we only do somethin g if it differs from the current one.
196 * 205 *
197 * @return Returns error status. 0 - OK, !0 - error 206 * @return Returns error status. 0 - OK, !0 - error
198 */ 207 */
199 static int output_configure(AACContext *ac, 208 static av_cold int output_configure(AACContext *ac,
200 enum ChannelPosition che_pos[4][MAX_ELEM_ID], 209 enum ChannelPosition che_pos[4][MAX_ELEM_ID],
201 enum ChannelPosition new_che_pos[4][MAX_ELEM_ID], 210 enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
202 int channel_config, enum OCStatus oc_type) 211 int channel_config, enum OCStatus oc_type)
203 { 212 {
204 AVCodecContext *avctx = ac->avccontext; 213 AVCodecContext *avctx = ac->avccontext;
205 int i, type, channels = 0, ret; 214 int i, type, channels = 0, ret;
206 215
207 memcpy(che_pos, new_che_pos, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0])); 216 memcpy(che_pos, new_che_pos, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
208 217
209 if (channel_config) { 218 if (channel_config) {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 * Decode program configuration element; reference: table 4.2. 280 * Decode program configuration element; reference: table 4.2.
272 * 281 *
273 * @param new_che_pos New channel position configuration - we only do somethin g if it differs from the current one. 282 * @param new_che_pos New channel position configuration - we only do somethin g if it differs from the current one.
274 * 283 *
275 * @return Returns error status. 0 - OK, !0 - error 284 * @return Returns error status. 0 - OK, !0 - error
276 */ 285 */
277 static int decode_pce(AACContext *ac, enum ChannelPosition new_che_pos[4][MAX_EL EM_ID], 286 static int decode_pce(AACContext *ac, enum ChannelPosition new_che_pos[4][MAX_EL EM_ID],
278 GetBitContext *gb) 287 GetBitContext *gb)
279 { 288 {
280 int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc, sampling _index; 289 int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc, sampling _index;
290 int comment_len;
281 291
282 skip_bits(gb, 2); // object_type 292 skip_bits(gb, 2); // object_type
283 293
284 sampling_index = get_bits(gb, 4); 294 sampling_index = get_bits(gb, 4);
285 if (ac->m4ac.sampling_index != sampling_index) 295 if (ac->m4ac.sampling_index != sampling_index)
286 av_log(ac->avccontext, AV_LOG_WARNING, "Sample rate index in program con fig element does not match the sample rate index configured by the container.\n" ); 296 av_log(ac->avccontext, AV_LOG_WARNING, "Sample rate index in program con fig element does not match the sample rate index configured by the container.\n" );
287 297
288 num_front = get_bits(gb, 4); 298 num_front = get_bits(gb, 4);
289 num_side = get_bits(gb, 4); 299 num_side = get_bits(gb, 4);
290 num_back = get_bits(gb, 4); 300 num_back = get_bits(gb, 4);
(...skipping 14 matching lines...) Expand all
305 decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL _BACK, gb, num_back ); 315 decode_channel_map(new_che_pos[TYPE_CPE], new_che_pos[TYPE_SCE], AAC_CHANNEL _BACK, gb, num_back );
306 decode_channel_map(NULL, new_che_pos[TYPE_LFE], AAC_CHANNEL _LFE, gb, num_lfe ); 316 decode_channel_map(NULL, new_che_pos[TYPE_LFE], AAC_CHANNEL _LFE, gb, num_lfe );
307 317
308 skip_bits_long(gb, 4 * num_assoc_data); 318 skip_bits_long(gb, 4 * num_assoc_data);
309 319
310 decode_channel_map(new_che_pos[TYPE_CCE], new_che_pos[TYPE_CCE], AAC_CHANNEL _CC, gb, num_cc ); 320 decode_channel_map(new_che_pos[TYPE_CCE], new_che_pos[TYPE_CCE], AAC_CHANNEL _CC, gb, num_cc );
311 321
312 align_get_bits(gb); 322 align_get_bits(gb);
313 323
314 /* comment field, first byte is length */ 324 /* comment field, first byte is length */
315 skip_bits_long(gb, 8 * get_bits(gb, 8)); 325 comment_len = get_bits(gb, 8) * 8;
326 if (get_bits_left(gb) < comment_len) {
327 av_log(ac->avccontext, AV_LOG_ERROR, overread_err);
328 return -1;
329 }
330 skip_bits_long(gb, comment_len);
316 return 0; 331 return 0;
317 } 332 }
318 333
319 /** 334 /**
320 * Set up channel positions based on a default channel configuration 335 * Set up channel positions based on a default channel configuration
321 * as specified in table 1.17. 336 * as specified in table 1.17.
322 * 337 *
323 * @param new_che_pos New channel position configuration - we only do somethin g if it differs from the current one. 338 * @param new_che_pos New channel position configuration - we only do somethin g if it differs from the current one.
324 * 339 *
325 * @return Returns error status. 0 - OK, !0 - error 340 * @return Returns error status. 0 - OK, !0 - error
326 */ 341 */
327 static int set_default_channel_config(AACContext *ac, 342 static av_cold int set_default_channel_config(AACContext *ac,
328 enum ChannelPosition new_che_pos[4][MAX_EL EM_ID], 343 enum ChannelPosition new_che_pos[4][MAX_EL EM_ID],
329 int channel_config) 344 int channel_config)
330 { 345 {
331 if (channel_config < 1 || channel_config > 7) { 346 if (channel_config < 1 || channel_config > 7) {
332 av_log(ac->avccontext, AV_LOG_ERROR, "invalid default channel configurat ion (%d)\n", 347 av_log(ac->avccontext, AV_LOG_ERROR, "invalid default channel configurat ion (%d)\n",
333 channel_config); 348 channel_config);
334 return -1; 349 return -1;
335 } 350 }
336 351
337 /* default channel configurations: 352 /* default channel configurations:
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 * 479 *
465 * @param previous_val pointer to the current state of the generator 480 * @param previous_val pointer to the current state of the generator
466 * 481 *
467 * @return Returns a 32-bit pseudorandom integer 482 * @return Returns a 32-bit pseudorandom integer
468 */ 483 */
469 static av_always_inline int lcg_random(int previous_val) 484 static av_always_inline int lcg_random(int previous_val)
470 { 485 {
471 return previous_val * 1664525 + 1013904223; 486 return previous_val * 1664525 + 1013904223;
472 } 487 }
473 488
474 static void reset_predict_state(PredictorState *ps) 489 static av_always_inline void reset_predict_state(PredictorState *ps)
475 { 490 {
476 ps->r0 = 0.0f; 491 ps->r0 = 0.0f;
477 ps->r1 = 0.0f; 492 ps->r1 = 0.0f;
478 ps->cor0 = 0.0f; 493 ps->cor0 = 0.0f;
479 ps->cor1 = 0.0f; 494 ps->cor1 = 0.0f;
480 ps->var0 = 1.0f; 495 ps->var0 = 1.0f;
481 ps->var1 = 1.0f; 496 ps->var1 = 1.0f;
482 } 497 }
483 498
484 static void reset_all_predictors(PredictorState *ps) 499 static void reset_all_predictors(PredictorState *ps)
485 { 500 {
486 int i; 501 int i;
487 for (i = 0; i < MAX_PREDICTORS; i++) 502 for (i = 0; i < MAX_PREDICTORS; i++)
488 reset_predict_state(&ps[i]); 503 reset_predict_state(&ps[i]);
489 } 504 }
490 505
491 static void reset_predictor_group(PredictorState *ps, int group_num) 506 static void reset_predictor_group(PredictorState *ps, int group_num)
492 { 507 {
493 int i; 508 int i;
494 for (i = group_num - 1; i < MAX_PREDICTORS; i += 30) 509 for (i = group_num - 1; i < MAX_PREDICTORS; i += 30)
495 reset_predict_state(&ps[i]); 510 reset_predict_state(&ps[i]);
496 } 511 }
497 512
498 static av_cold int aac_decode_init(AVCodecContext *avccontext) 513 static av_cold int aac_decode_init(AVCodecContext *avccontext)
499 { 514 {
500 AACContext *ac = avccontext->priv_data; 515 AACContext *ac = avccontext->priv_data;
501 int i; 516 int i;
502 517
503 ac->avccontext = avccontext; 518 ac->avccontext = avccontext;
519 ac->m4ac.sample_rate = avccontext->sample_rate;
504 520
505 if (avccontext->extradata_size > 0) { 521 if (avccontext->extradata_size > 0) {
506 if (decode_audio_specific_config(ac, avccontext->extradata, avccontext-> extradata_size)) 522 if (decode_audio_specific_config(ac, avccontext->extradata, avccontext-> extradata_size))
507 return -1; 523 return -1;
508 avccontext->sample_rate = ac->m4ac.sample_rate;
509 } else if (avccontext->channels > 0) {
510 ac->m4ac.sample_rate = avccontext->sample_rate;
511 } 524 }
512 525
513 avccontext->sample_fmt = SAMPLE_FMT_S16; 526 avccontext->sample_fmt = SAMPLE_FMT_S16;
514 avccontext->frame_size = 1024;
515 527
516 AAC_INIT_VLC_STATIC( 0, 304); 528 AAC_INIT_VLC_STATIC( 0, 304);
517 AAC_INIT_VLC_STATIC( 1, 270); 529 AAC_INIT_VLC_STATIC( 1, 270);
518 AAC_INIT_VLC_STATIC( 2, 550); 530 AAC_INIT_VLC_STATIC( 2, 550);
519 AAC_INIT_VLC_STATIC( 3, 300); 531 AAC_INIT_VLC_STATIC( 3, 300);
520 AAC_INIT_VLC_STATIC( 4, 328); 532 AAC_INIT_VLC_STATIC( 4, 328);
521 AAC_INIT_VLC_STATIC( 5, 294); 533 AAC_INIT_VLC_STATIC( 5, 294);
522 AAC_INIT_VLC_STATIC( 6, 306); 534 AAC_INIT_VLC_STATIC( 6, 306);
523 AAC_INIT_VLC_STATIC( 7, 268); 535 AAC_INIT_VLC_STATIC( 7, 268);
524 AAC_INIT_VLC_STATIC( 8, 510); 536 AAC_INIT_VLC_STATIC( 8, 510);
525 AAC_INIT_VLC_STATIC( 9, 366); 537 AAC_INIT_VLC_STATIC( 9, 366);
526 AAC_INIT_VLC_STATIC(10, 462); 538 AAC_INIT_VLC_STATIC(10, 462);
527 539
540 ff_aac_sbr_init();
541
528 dsputil_init(&ac->dsp, avccontext); 542 dsputil_init(&ac->dsp, avccontext);
529 543
530 ac->random_state = 0x1f2e3d4c; 544 ac->random_state = 0x1f2e3d4c;
531 545
532 // -1024 - Compensate wrong IMDCT method. 546 // -1024 - Compensate wrong IMDCT method.
533 // 32768 - Required to scale values to the correct range for the bias method 547 // 32768 - Required to scale values to the correct range for the bias method
534 // for float to int16 conversion. 548 // for float to int16 conversion.
535 549
536 if (ac->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) { 550 if (ac->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
537 ac->add_bias = 385.0f; 551 ac->add_bias = 385.0f;
(...skipping 30 matching lines...) Expand all
568 cbrt_tab[i] = f.i; 582 cbrt_tab[i] = f.i;
569 } 583 }
570 } 584 }
571 585
572 return 0; 586 return 0;
573 } 587 }
574 588
575 /** 589 /**
576 * Skip data_stream_element; reference: table 4.10. 590 * Skip data_stream_element; reference: table 4.10.
577 */ 591 */
578 static void skip_data_stream_element(GetBitContext *gb) 592 static int skip_data_stream_element(AACContext *ac, GetBitContext *gb)
579 { 593 {
580 int byte_align = get_bits1(gb); 594 int byte_align = get_bits1(gb);
581 int count = get_bits(gb, 8); 595 int count = get_bits(gb, 8);
582 if (count == 255) 596 if (count == 255)
583 count += get_bits(gb, 8); 597 count += get_bits(gb, 8);
584 if (byte_align) 598 if (byte_align)
585 align_get_bits(gb); 599 align_get_bits(gb);
600
601 if (get_bits_left(gb) < 8 * count) {
602 av_log(ac->avccontext, AV_LOG_ERROR, overread_err);
603 return -1;
604 }
586 skip_bits_long(gb, 8 * count); 605 skip_bits_long(gb, 8 * count);
606 return 0;
587 } 607 }
588 608
589 static int decode_prediction(AACContext *ac, IndividualChannelStream *ics, 609 static int decode_prediction(AACContext *ac, IndividualChannelStream *ics,
590 GetBitContext *gb) 610 GetBitContext *gb)
591 { 611 {
592 int sfb; 612 int sfb;
593 if (get_bits1(gb)) { 613 if (get_bits1(gb)) {
594 ics->predictor_reset_group = get_bits(gb, 5); 614 ics->predictor_reset_group = get_bits(gb, 5);
595 if (ics->predictor_reset_group == 0 || ics->predictor_reset_group > 30) { 615 if (ics->predictor_reset_group == 0 || ics->predictor_reset_group > 30) {
596 av_log(ac->avccontext, AV_LOG_ERROR, "Invalid Predictor Reset Group. \n"); 616 av_log(ac->avccontext, AV_LOG_ERROR, "Invalid Predictor Reset Group. \n");
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 uint8_t sect_end = k; 715 uint8_t sect_end = k;
696 int sect_len_incr; 716 int sect_len_incr;
697 int sect_band_type = get_bits(gb, 4); 717 int sect_band_type = get_bits(gb, 4);
698 if (sect_band_type == 12) { 718 if (sect_band_type == 12) {
699 av_log(ac->avccontext, AV_LOG_ERROR, "invalid band type\n"); 719 av_log(ac->avccontext, AV_LOG_ERROR, "invalid band type\n");
700 return -1; 720 return -1;
701 } 721 }
702 while ((sect_len_incr = get_bits(gb, bits)) == (1 << bits) - 1) 722 while ((sect_len_incr = get_bits(gb, bits)) == (1 << bits) - 1)
703 sect_end += sect_len_incr; 723 sect_end += sect_len_incr;
704 sect_end += sect_len_incr; 724 sect_end += sect_len_incr;
705 if (sect_end > ics->max_sfb || sect_end == k) { 725 if (get_bits_left(gb) < 0) {
726 av_log(ac->avccontext, AV_LOG_ERROR, overread_err);
727 return -1;
728 }
729 if (sect_end > ics->max_sfb) {
706 av_log(ac->avccontext, AV_LOG_ERROR, 730 av_log(ac->avccontext, AV_LOG_ERROR,
707 "Number of bands (%d) is invalid, limit (%d).\n", 731 "Number of bands (%d) exceeds limit (%d).\n",
708 sect_end, ics->max_sfb); 732 sect_end, ics->max_sfb);
709 return -1; 733 return -1;
710 } 734 }
711 for (; k < sect_end; k++) { 735 for (; k < sect_end; k++) {
712 band_type [idx] = sect_band_type; 736 band_type [idx] = sect_band_type;
713 band_type_run_end[idx++] = sect_end; 737 band_type_run_end[idx++] = sect_end;
714 } 738 }
715 } 739 }
716 } 740 }
717 return 0; 741 return 0;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
821 const int tns_max_order = is8 ? 7 : ac->m4ac.object_type == AOT_AAC_MAIN ? 2 0 : 12; 845 const int tns_max_order = is8 ? 7 : ac->m4ac.object_type == AOT_AAC_MAIN ? 2 0 : 12;
822 for (w = 0; w < ics->num_windows; w++) { 846 for (w = 0; w < ics->num_windows; w++) {
823 if ((tns->n_filt[w] = get_bits(gb, 2 - is8))) { 847 if ((tns->n_filt[w] = get_bits(gb, 2 - is8))) {
824 coef_res = get_bits1(gb); 848 coef_res = get_bits1(gb);
825 849
826 for (filt = 0; filt < tns->n_filt[w]; filt++) { 850 for (filt = 0; filt < tns->n_filt[w]; filt++) {
827 int tmp2_idx; 851 int tmp2_idx;
828 tns->length[w][filt] = get_bits(gb, 6 - 2 * is8); 852 tns->length[w][filt] = get_bits(gb, 6 - 2 * is8);
829 853
830 if ((tns->order[w][filt] = get_bits(gb, 5 - 2 * is8)) > tns_max_ order) { 854 if ((tns->order[w][filt] = get_bits(gb, 5 - 2 * is8)) > tns_max_ order) {
831 av_log(ac->avccontext, AV_LOG_ERROR, "TNS filter order %d is greater than maximum %d.", 855 av_log(ac->avccontext, AV_LOG_ERROR, "TNS filter order %d is greater than maximum %d.\n",
832 tns->order[w][filt], tns_max_order); 856 tns->order[w][filt], tns_max_order);
833 tns->order[w][filt] = 0; 857 tns->order[w][filt] = 0;
834 return -1; 858 return -1;
835 } 859 }
836 if (tns->order[w][filt]) { 860 if (tns->order[w][filt]) {
837 tns->direction[w][filt] = get_bits1(gb); 861 tns->direction[w][filt] = get_bits1(gb);
838 coef_compress = get_bits1(gb); 862 coef_compress = get_bits1(gb);
839 coef_len = coef_res + 3 - coef_compress; 863 coef_len = coef_res + 3 - coef_compress;
840 tmp2_idx = 2 * coef_compress + coef_res; 864 tmp2_idx = 2 * coef_compress + coef_res;
841 865
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 } 1247 }
1224 1248
1225 static av_always_inline float flt16_trunc(float pf) 1249 static av_always_inline float flt16_trunc(float pf)
1226 { 1250 {
1227 union float754 pun; 1251 union float754 pun;
1228 pun.f = pf; 1252 pun.f = pf;
1229 pun.i &= 0xFFFF0000U; 1253 pun.i &= 0xFFFF0000U;
1230 return pun.f; 1254 return pun.f;
1231 } 1255 }
1232 1256
1233 static void predict(AACContext *ac, PredictorState *ps, float *coef, 1257 static av_always_inline void predict(AACContext *ac, PredictorState *ps, float * coef,
1234 int output_enable) 1258 int output_enable)
1235 { 1259 {
1236 const float a = 0.953125; // 61.0 / 64 1260 const float a = 0.953125; // 61.0 / 64
1237 const float alpha = 0.90625; // 29.0 / 32 1261 const float alpha = 0.90625; // 29.0 / 32
1238 float e0, e1; 1262 float e0, e1;
1239 float pv; 1263 float pv;
1240 float k1, k2; 1264 float k1, k2;
1241 1265
1242 k1 = ps->var0 > 1 ? ps->cor0 * flt16_even(a / ps->var0) : 0; 1266 k1 = ps->var0 > 1 ? ps->cor0 * flt16_even(a / ps->var0) : 0;
1243 k2 = ps->var1 > 1 ? ps->cor1 * flt16_even(a / ps->var1) : 0; 1267 k2 = ps->var1 > 1 ? ps->cor1 * flt16_even(a / ps->var1) : 0;
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1523 coup->gain[c][idx] = gain_cache; 1547 coup->gain[c][idx] = gain_cache;
1524 } 1548 }
1525 } 1549 }
1526 } 1550 }
1527 } 1551 }
1528 } 1552 }
1529 return 0; 1553 return 0;
1530 } 1554 }
1531 1555
1532 /** 1556 /**
1533 * Decode Spectral Band Replication extension data; reference: table 4.55.
1534 *
1535 * @param crc flag indicating the presence of CRC checksum
1536 * @param cnt length of TYPE_FIL syntactic element in bytes
1537 *
1538 * @return Returns number of bytes consumed from the TYPE_FIL element.
1539 */
1540 static int decode_sbr_extension(AACContext *ac, GetBitContext *gb,
1541 int crc, int cnt)
1542 {
1543 // TODO : sbr_extension implementation
1544 av_log_missing_feature(ac->avccontext, "SBR", 0);
1545 skip_bits_long(gb, 8 * cnt - 4); // -4 due to reading extension type
1546 return cnt;
1547 }
1548
1549 /**
1550 * Parse whether channels are to be excluded from Dynamic Range Compression; ref erence: table 4.53. 1557 * Parse whether channels are to be excluded from Dynamic Range Compression; ref erence: table 4.53.
1551 * 1558 *
1552 * @return Returns number of bytes consumed. 1559 * @return Returns number of bytes consumed.
1553 */ 1560 */
1554 static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc, 1561 static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc,
1555 GetBitContext *gb) 1562 GetBitContext *gb)
1556 { 1563 {
1557 int i; 1564 int i;
1558 int num_excl_chan = 0; 1565 int num_excl_chan = 0;
1559 1566
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1619 return n; 1626 return n;
1620 } 1627 }
1621 1628
1622 /** 1629 /**
1623 * Decode extension data (incomplete); reference: table 4.51. 1630 * Decode extension data (incomplete); reference: table 4.51.
1624 * 1631 *
1625 * @param cnt length of TYPE_FIL syntactic element in bytes 1632 * @param cnt length of TYPE_FIL syntactic element in bytes
1626 * 1633 *
1627 * @return Returns number of bytes consumed 1634 * @return Returns number of bytes consumed
1628 */ 1635 */
1629 static int decode_extension_payload(AACContext *ac, GetBitContext *gb, int cnt) 1636 static int decode_extension_payload(AACContext *ac, GetBitContext *gb, int cnt,
1637 ChannelElement *che, enum RawDataBlockType e lem_type)
1630 { 1638 {
1631 int crc_flag = 0; 1639 int crc_flag = 0;
1632 int res = cnt; 1640 int res = cnt;
1633 switch (get_bits(gb, 4)) { // extension type 1641 switch (get_bits(gb, 4)) { // extension type
1634 case EXT_SBR_DATA_CRC: 1642 case EXT_SBR_DATA_CRC:
1635 crc_flag++; 1643 crc_flag++;
1636 case EXT_SBR_DATA: 1644 case EXT_SBR_DATA:
1637 res = decode_sbr_extension(ac, gb, crc_flag, cnt); 1645 if (!che) {
1646 av_log(ac->avccontext, AV_LOG_ERROR, "SBR was found before the first channel element.\n");
1647 return res;
1648 } else if (!ac->m4ac.sbr) {
1649 av_log(ac->avccontext, AV_LOG_ERROR, "SBR signaled to be not-present but was found in the bitstream.\n");
1650 skip_bits_long(gb, 8 * cnt - 4);
1651 return res;
1652 } else if (ac->m4ac.sbr == -1 && ac->output_configured == OC_LOCKED) {
1653 av_log(ac->avccontext, AV_LOG_ERROR, "Implicit SBR was found with a first occurrence after the first frame.\n");
1654 skip_bits_long(gb, 8 * cnt - 4);
1655 return res;
1656 } else {
1657 ac->m4ac.sbr = 1;
1658 }
1659 res = ff_decode_sbr_extension(ac, &che->sbr, gb, crc_flag, cnt, elem_typ e);
1638 break; 1660 break;
1639 case EXT_DYNAMIC_RANGE: 1661 case EXT_DYNAMIC_RANGE:
1640 res = decode_dynamic_range(&ac->che_drc, gb, cnt); 1662 res = decode_dynamic_range(&ac->che_drc, gb, cnt);
1641 break; 1663 break;
1642 case EXT_FILL: 1664 case EXT_FILL:
1643 case EXT_FILL_DATA: 1665 case EXT_FILL_DATA:
1644 case EXT_DATA_ELEMENT: 1666 case EXT_DATA_ELEMENT:
1645 default: 1667 default:
1646 skip_bits_long(gb, 8 * cnt - 4); 1668 skip_bits_long(gb, 8 * cnt - 4);
1647 break; 1669 break;
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1808 */ 1830 */
1809 static void apply_independent_coupling(AACContext *ac, 1831 static void apply_independent_coupling(AACContext *ac,
1810 SingleChannelElement *target, 1832 SingleChannelElement *target,
1811 ChannelElement *cce, int index) 1833 ChannelElement *cce, int index)
1812 { 1834 {
1813 int i; 1835 int i;
1814 const float gain = cce->coup.gain[index][0]; 1836 const float gain = cce->coup.gain[index][0];
1815 const float bias = ac->add_bias; 1837 const float bias = ac->add_bias;
1816 const float *src = cce->ch[0].ret; 1838 const float *src = cce->ch[0].ret;
1817 float *dest = target->ret; 1839 float *dest = target->ret;
1840 const int len = 1024 << (ac->m4ac.sbr == 1);
1818 1841
1819 for (i = 0; i < 1024; i++) 1842 for (i = 0; i < len; i++)
1820 dest[i] += gain * (src[i] - bias); 1843 dest[i] += gain * (src[i] - bias);
1821 } 1844 }
1822 1845
1823 /** 1846 /**
1824 * channel coupling transformation interface 1847 * channel coupling transformation interface
1825 * 1848 *
1826 * @param index index into coupling gain array 1849 * @param index index into coupling gain array
1827 * @param apply_coupling_method pointer to (in)dependent coupling function 1850 * @param apply_coupling_method pointer to (in)dependent coupling function
1828 */ 1851 */
1829 static void apply_channel_coupling(AACContext *ac, ChannelElement *cc, 1852 static void apply_channel_coupling(AACContext *ac, ChannelElement *cc,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1867 ChannelElement *che = ac->che[type][i]; 1890 ChannelElement *che = ac->che[type][i];
1868 if (che) { 1891 if (che) {
1869 if (type <= TYPE_CPE) 1892 if (type <= TYPE_CPE)
1870 apply_channel_coupling(ac, che, type, i, BEFORE_TNS, apply_d ependent_coupling); 1893 apply_channel_coupling(ac, che, type, i, BEFORE_TNS, apply_d ependent_coupling);
1871 if (che->ch[0].tns.present) 1894 if (che->ch[0].tns.present)
1872 apply_tns(che->ch[0].coeffs, &che->ch[0].tns, &che->ch[0].ic s, 1); 1895 apply_tns(che->ch[0].coeffs, &che->ch[0].tns, &che->ch[0].ic s, 1);
1873 if (che->ch[1].tns.present) 1896 if (che->ch[1].tns.present)
1874 apply_tns(che->ch[1].coeffs, &che->ch[1].tns, &che->ch[1].ic s, 1); 1897 apply_tns(che->ch[1].coeffs, &che->ch[1].tns, &che->ch[1].ic s, 1);
1875 if (type <= TYPE_CPE) 1898 if (type <= TYPE_CPE)
1876 apply_channel_coupling(ac, che, type, i, BETWEEN_TNS_AND_IMD CT, apply_dependent_coupling); 1899 apply_channel_coupling(ac, che, type, i, BETWEEN_TNS_AND_IMD CT, apply_dependent_coupling);
1877 if (type != TYPE_CCE || che->coup.coupling_point == AFTER_IMDCT) 1900 if (type != TYPE_CCE || che->coup.coupling_point == AFTER_IMDCT) {
1878 imdct_and_windowing(ac, &che->ch[0]); 1901 imdct_and_windowing(ac, &che->ch[0]);
1879 if (type == TYPE_CPE) 1902 if (ac->m4ac.sbr > 0) {
1903 ff_sbr_dequant(ac, &che->sbr, type == TYPE_CPE ? TYPE_CP E : TYPE_SCE);
1904 ff_sbr_apply(ac, &che->sbr, 0, che->ch[0].ret, che->ch[0 ].ret);
1905 }
1906 }
1907 if (type == TYPE_CPE) {
1880 imdct_and_windowing(ac, &che->ch[1]); 1908 imdct_and_windowing(ac, &che->ch[1]);
1909 if (ac->m4ac.sbr > 0)
1910 ff_sbr_apply(ac, &che->sbr, 1, che->ch[1].ret, che->ch[1 ].ret);
1911 }
1881 if (type <= TYPE_CCE) 1912 if (type <= TYPE_CCE)
1882 apply_channel_coupling(ac, che, type, i, AFTER_IMDCT, apply_ independent_coupling); 1913 apply_channel_coupling(ac, che, type, i, AFTER_IMDCT, apply_ independent_coupling);
1883 } 1914 }
1884 } 1915 }
1885 } 1916 }
1886 } 1917 }
1887 1918
1888 static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb) 1919 static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
1889 { 1920 {
1890 int size; 1921 int size;
(...skipping 29 matching lines...) Expand all
1920 } 1951 }
1921 return size; 1952 return size;
1922 } 1953 }
1923 1954
1924 static int aac_decode_frame(AVCodecContext *avccontext, void *data, 1955 static int aac_decode_frame(AVCodecContext *avccontext, void *data,
1925 int *data_size, AVPacket *avpkt) 1956 int *data_size, AVPacket *avpkt)
1926 { 1957 {
1927 const uint8_t *buf = avpkt->data; 1958 const uint8_t *buf = avpkt->data;
1928 int buf_size = avpkt->size; 1959 int buf_size = avpkt->size;
1929 AACContext *ac = avccontext->priv_data; 1960 AACContext *ac = avccontext->priv_data;
1930 ChannelElement *che = NULL; 1961 ChannelElement *che = NULL, *che_prev = NULL;
1931 GetBitContext gb; 1962 GetBitContext gb;
1932 enum RawDataBlockType elem_type; 1963 enum RawDataBlockType elem_type, elem_type_prev = TYPE_END;
1933 int err, elem_id, data_size_tmp; 1964 int err, elem_id, data_size_tmp;
1965 int buf_consumed;
1966 int samples = 1024, multiplier;
1934 1967
1935 init_get_bits(&gb, buf, buf_size * 8); 1968 init_get_bits(&gb, buf, buf_size * 8);
1936 gb.buffer_enforcing = 1; 1969 gb.buffer_enforcing = 1;
1937 1970
1938 if (show_bits(&gb, 12) == 0xfff) { 1971 if (show_bits(&gb, 12) == 0xfff) {
1939 if (parse_adts_frame_header(ac, &gb) < 0) { 1972 if (parse_adts_frame_header(ac, &gb) < 0) {
1940 av_log(avccontext, AV_LOG_ERROR, "Error decoding AAC frame header.\n "); 1973 av_log(avccontext, AV_LOG_ERROR, "Error decoding AAC frame header.\n ");
1941 return -1; 1974 return -1;
1942 } 1975 }
1943 if (ac->m4ac.sampling_index > 12) { 1976 if (ac->m4ac.sampling_index > 12) {
(...skipping 29 matching lines...) Expand all
1973 2006
1974 case TYPE_CCE: 2007 case TYPE_CCE:
1975 err = decode_cce(ac, &gb, che); 2008 err = decode_cce(ac, &gb, che);
1976 break; 2009 break;
1977 2010
1978 case TYPE_LFE: 2011 case TYPE_LFE:
1979 err = decode_ics(ac, &che->ch[0], &gb, 0, 0); 2012 err = decode_ics(ac, &che->ch[0], &gb, 0, 0);
1980 break; 2013 break;
1981 2014
1982 case TYPE_DSE: 2015 case TYPE_DSE:
1983 skip_data_stream_element(&gb); 2016 err = skip_data_stream_element(ac, &gb);
1984 err = 0;
1985 break; 2017 break;
1986 2018
1987 case TYPE_PCE: { 2019 case TYPE_PCE: {
1988 enum ChannelPosition new_che_pos[4][MAX_ELEM_ID]; 2020 enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
1989 memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0])); 2021 memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
1990 if ((err = decode_pce(ac, new_che_pos, &gb))) 2022 if ((err = decode_pce(ac, new_che_pos, &gb)))
1991 break; 2023 break;
1992 if (ac->output_configured > OC_TRIAL_PCE) 2024 if (ac->output_configured > OC_TRIAL_PCE)
1993 av_log(avccontext, AV_LOG_ERROR, 2025 av_log(avccontext, AV_LOG_ERROR,
1994 "Not evaluating a further program_config_element as this construct is dubious at best.\n"); 2026 "Not evaluating a further program_config_element as this construct is dubious at best.\n");
1995 else 2027 else
1996 err = output_configure(ac, ac->che_pos, new_che_pos, 0, OC_TRIAL _PCE); 2028 err = output_configure(ac, ac->che_pos, new_che_pos, 0, OC_TRIAL _PCE);
1997 break; 2029 break;
1998 } 2030 }
1999 2031
2000 case TYPE_FIL: 2032 case TYPE_FIL:
2001 if (elem_id == 15) 2033 if (elem_id == 15)
2002 elem_id += get_bits(&gb, 8) - 1; 2034 elem_id += get_bits(&gb, 8) - 1;
2035 if (get_bits_left(&gb) < 8 * elem_id) {
2036 av_log(avccontext, AV_LOG_ERROR, overread_err);
2037 return -1;
2038 }
2003 while (elem_id > 0) 2039 while (elem_id > 0)
2004 elem_id -= decode_extension_payload(ac, &gb, elem_id); 2040 elem_id -= decode_extension_payload(ac, &gb, elem_id, che_prev, elem_type_prev);
2005 err = 0; /* FIXME */ 2041 err = 0; /* FIXME */
2006 break; 2042 break;
2007 2043
2008 default: 2044 default:
2009 err = -1; /* should not happen, but keeps compiler happy */ 2045 err = -1; /* should not happen, but keeps compiler happy */
2010 break; 2046 break;
2011 } 2047 }
2012 2048
2049 che_prev = che;
2050 elem_type_prev = elem_type;
2051
2013 if (err) 2052 if (err)
2014 return err; 2053 return err;
2054
2055 if (get_bits_left(&gb) < 3) {
2056 av_log(avccontext, AV_LOG_ERROR, overread_err);
2057 return -1;
2058 }
2015 } 2059 }
2016 2060
2017 spectral_to_sample(ac); 2061 spectral_to_sample(ac);
2018 2062
2019 if (!ac->is_saved) { 2063 multiplier = (ac->m4ac.sbr == 1) ? ac->m4ac.ext_sample_rate > ac->m4ac.sampl e_rate : 0;
2020 ac->is_saved = 1; 2064 samples <<= multiplier;
2021 *data_size = 0; 2065 if (ac->output_configured < OC_LOCKED) {
2022 return buf_size; 2066 avccontext->sample_rate = ac->m4ac.sample_rate << multiplier;
2067 avccontext->frame_size = samples;
2023 } 2068 }
2024 2069
2025 data_size_tmp = 1024 * avccontext->channels * sizeof(int16_t); 2070 data_size_tmp = samples * avccontext->channels * sizeof(int16_t);
2026 if (*data_size < data_size_tmp) { 2071 if (*data_size < data_size_tmp) {
2027 av_log(avccontext, AV_LOG_ERROR, 2072 av_log(avccontext, AV_LOG_ERROR,
2028 "Output buffer too small (%d) or trying to output too many sample s (%d) for this frame.\n", 2073 "Output buffer too small (%d) or trying to output too many sample s (%d) for this frame.\n",
2029 *data_size, data_size_tmp); 2074 *data_size, data_size_tmp);
2030 return -1; 2075 return -1;
2031 } 2076 }
2032 *data_size = data_size_tmp; 2077 *data_size = data_size_tmp;
2033 2078
2034 ac->dsp.float_to_int16_interleave(data, (const float **)ac->output_data, 102 4, avccontext->channels); 2079 ac->dsp.float_to_int16_interleave(data, (const float **)ac->output_data, sam ples, avccontext->channels);
2035 2080
2036 if (ac->output_configured) 2081 if (ac->output_configured)
2037 ac->output_configured = OC_LOCKED; 2082 ac->output_configured = OC_LOCKED;
2038 2083
2039 return buf_size; 2084 buf_consumed = (get_bits_count(&gb) + 7) >> 3;
2085 return buf_size > buf_consumed ? buf_consumed : buf_size;
2040 } 2086 }
2041 2087
2042 static av_cold int aac_decode_close(AVCodecContext *avccontext) 2088 static av_cold int aac_decode_close(AVCodecContext *avccontext)
2043 { 2089 {
2044 AACContext *ac = avccontext->priv_data; 2090 AACContext *ac = avccontext->priv_data;
2045 int i, type; 2091 int i, type;
2046 2092
2047 for (i = 0; i < MAX_ELEM_ID; i++) { 2093 for (i = 0; i < MAX_ELEM_ID; i++) {
2048 for (type = 0; type < 4; type++) 2094 for (type = 0; type < 4; type++) {
2095 if (ac->che[type][i])
2096 ff_aac_sbr_ctx_close(&ac->che[type][i]->sbr);
2049 av_freep(&ac->che[type][i]); 2097 av_freep(&ac->che[type][i]);
2098 }
2050 } 2099 }
2051 2100
2052 ff_mdct_end(&ac->mdct); 2101 ff_mdct_end(&ac->mdct);
2053 ff_mdct_end(&ac->mdct_small); 2102 ff_mdct_end(&ac->mdct_small);
2054 return 0; 2103 return 0;
2055 } 2104 }
2056 2105
2057 AVCodec aac_decoder = { 2106 AVCodec aac_decoder = {
2058 "aac", 2107 "aac",
2059 CODEC_TYPE_AUDIO, 2108 CODEC_TYPE_AUDIO,
2060 CODEC_ID_AAC, 2109 CODEC_ID_AAC,
2061 sizeof(AACContext), 2110 sizeof(AACContext),
2062 aac_decode_init, 2111 aac_decode_init,
2063 NULL, 2112 NULL,
2064 aac_decode_close, 2113 aac_decode_close,
2065 aac_decode_frame, 2114 aac_decode_frame,
2066 .long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"), 2115 .long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),
2067 .sample_fmts = (const enum SampleFormat[]) { 2116 .sample_fmts = (const enum SampleFormat[]) {
2068 SAMPLE_FMT_S16,SAMPLE_FMT_NONE 2117 SAMPLE_FMT_S16,SAMPLE_FMT_NONE
2069 }, 2118 },
2070 .channel_layouts = aac_channel_layout, 2119 .channel_layouts = aac_channel_layout,
2071 }; 2120 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698