Mercurial > mplayer.hg
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) |