comparison libfaad2/sbr_syntax.c @ 18141:59b6fa5b4201

Update to faad2 cvs 20040915+MPlayer fixes Patch by me and Emanuele Giaquinta
author rtognimp
date Tue, 18 Apr 2006 19:39:34 +0000
parents 2ae5ab4331ca
children e83eef58b30a
comparison
equal deleted inserted replaced
18140:e371c7e18402 18141:59b6fa5b4201
20 ** forbidden. 20 ** forbidden.
21 ** 21 **
22 ** Commercial non-GPL licensing of this software is possible. 22 ** Commercial non-GPL licensing of this software is possible.
23 ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com. 23 ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
24 ** 24 **
25 ** $Id: sbr_syntax.c,v 1.31 2004/05/17 10:18:03 menno Exp $ 25 ** $Id: sbr_syntax.c,v 1.34 2004/09/04 14:56:28 menno Exp $
26 **/ 26 **/
27 27
28 #include "common.h" 28 #include "common.h"
29 #include "structs.h" 29 #include "structs.h"
30 30
74 74
75 /* if these are different from the previous frame: Reset = 1 */ 75 /* if these are different from the previous frame: Reset = 1 */
76 if ((sbr->bs_start_freq != sbr->bs_start_freq_prev) || 76 if ((sbr->bs_start_freq != sbr->bs_start_freq_prev) ||
77 (sbr->bs_stop_freq != sbr->bs_stop_freq_prev) || 77 (sbr->bs_stop_freq != sbr->bs_stop_freq_prev) ||
78 (sbr->bs_freq_scale != sbr->bs_freq_scale_prev) || 78 (sbr->bs_freq_scale != sbr->bs_freq_scale_prev) ||
79 (sbr->bs_alter_scale != sbr->bs_alter_scale_prev))
80 {
81 sbr->Reset = 1;
82 } else {
83 sbr->Reset = 0;
84 }
85
86 if ((sbr->bs_start_freq != sbr->bs_start_freq_prev) ||
87 (sbr->bs_stop_freq != sbr->bs_stop_freq_prev) ||
88 (sbr->bs_freq_scale != sbr->bs_freq_scale_prev) ||
89 (sbr->bs_alter_scale != sbr->bs_alter_scale_prev) || 79 (sbr->bs_alter_scale != sbr->bs_alter_scale_prev) ||
90 (sbr->bs_xover_band != sbr->bs_xover_band_prev) || 80 (sbr->bs_xover_band != sbr->bs_xover_band_prev) ||
91 (sbr->bs_noise_bands != sbr->bs_noise_bands_prev)) 81 (sbr->bs_noise_bands != sbr->bs_noise_bands_prev))
92 { 82 {
93 sbr->Reset = 1; 83 sbr->Reset = 1;
399 DEBUGVAR(1,224,"sbr_single_channel_element(): bs_extended_data[0]")); 389 DEBUGVAR(1,224,"sbr_single_channel_element(): bs_extended_data[0]"));
400 390
401 if (sbr->bs_extended_data) 391 if (sbr->bs_extended_data)
402 { 392 {
403 uint16_t nr_bits_left; 393 uint16_t nr_bits_left;
394 #if (defined(PS_DEC) || defined(DRM_PS))
395 uint8_t ps_ext_read = 0;
396 #endif
404 uint16_t cnt = (uint16_t)faad_getbits(ld, 4 397 uint16_t cnt = (uint16_t)faad_getbits(ld, 4
405 DEBUGVAR(1,225,"sbr_single_channel_element(): bs_extension_size")); 398 DEBUGVAR(1,225,"sbr_single_channel_element(): bs_extension_size"));
406 if (cnt == 15) 399 if (cnt == 15)
407 { 400 {
408 cnt += (uint16_t)faad_getbits(ld, 8 401 cnt += (uint16_t)faad_getbits(ld, 8
415 uint16_t tmp_nr_bits = 0; 408 uint16_t tmp_nr_bits = 0;
416 409
417 sbr->bs_extension_id = (uint8_t)faad_getbits(ld, 2 410 sbr->bs_extension_id = (uint8_t)faad_getbits(ld, 2
418 DEBUGVAR(1,227,"sbr_single_channel_element(): bs_extension_id")); 411 DEBUGVAR(1,227,"sbr_single_channel_element(): bs_extension_id"));
419 tmp_nr_bits += 2; 412 tmp_nr_bits += 2;
413
414 /* allow only 1 PS extension element per extension data */
415 #if (defined(PS_DEC) || defined(DRM_PS))
416 #if (defined(PS_DEC) && defined(DRM_PS))
417 if (sbr->bs_extension_id == EXTENSION_ID_PS || sbr->bs_extension_id == DRM_PARAMETRIC_STEREO)
418 #else
419 #ifdef PS_DEC
420 if (sbr->bs_extension_id == EXTENSION_ID_PS)
421 #else
422 #ifdef DRM_PS
423 if (sbr->bs_extension_id == DRM_PARAMETRIC_STEREO)
424 #endif
425 #endif
426 #endif
427 {
428 if (ps_ext_read == 0)
429 {
430 ps_ext_read = 1;
431 } else {
432 /* to be safe make it 3, will switch to "default"
433 * in sbr_extension() */
434 sbr->bs_extension_id = 3;
435 }
436 }
437 #endif
438
420 tmp_nr_bits += sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left); 439 tmp_nr_bits += sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left);
421 440
422 /* check if the data read is bigger than the number of available bits */ 441 /* check if the data read is bigger than the number of available bits */
423 if (tmp_nr_bits > nr_bits_left) 442 if (tmp_nr_bits > nr_bits_left)
424 return 1; 443 return 1;
795 } 814 }
796 815
797 static uint16_t sbr_extension(bitfile *ld, sbr_info *sbr, 816 static uint16_t sbr_extension(bitfile *ld, sbr_info *sbr,
798 uint8_t bs_extension_id, uint16_t num_bits_left) 817 uint8_t bs_extension_id, uint16_t num_bits_left)
799 { 818 {
819 #ifdef PS_DEC
820 uint8_t header;
821 uint16_t ret;
822 #endif
823
800 switch (bs_extension_id) 824 switch (bs_extension_id)
801 { 825 {
802 #ifdef PS_DEC 826 #ifdef PS_DEC
803 case EXTENSION_ID_PS: 827 case EXTENSION_ID_PS:
804 sbr->ps_used = 1;
805 if (!sbr->ps) 828 if (!sbr->ps)
806 { 829 {
807 sbr->ps = ps_init(get_sr_index(sbr->sample_rate)); 830 sbr->ps = ps_init(get_sr_index(sbr->sample_rate));
808 } 831 }
809 return ps_data(sbr->ps, ld); 832 ret = ps_data(sbr->ps, ld, &header);
833
834 /* enable PS if and only if: a header has been decoded */
835 if (sbr->ps_used == 0 && header == 1)
836 {
837 sbr->ps_used = 1;
838 }
839
840 return ret;
810 #endif 841 #endif
811 #ifdef DRM_PS 842 #ifdef DRM_PS
812 case DRM_PARAMETRIC_STEREO: 843 case DRM_PARAMETRIC_STEREO:
813 sbr->ps_used = 1; 844 sbr->ps_used = 1;
814 if (!sbr->drm_ps) 845 if (!sbr->drm_ps)