Mercurial > libavcodec.hg
comparison parser.c @ 3104:78d6bfc238f3 libavcodec
use get_bits1/skip_bits[1] in ac3 and aac parsers
| author | mru |
|---|---|
| date | Fri, 10 Feb 2006 01:19:54 +0000 |
| parents | eb3d3988aff2 |
| children | f9d739057d6c |
comparison
equal
deleted
inserted
replaced
| 3103:cfc5b4a05633 | 3104:78d6bfc238f3 |
|---|---|
| 736 int (*sync)(const uint8_t *buf, int *channels, int *sample_rate, | 736 int (*sync)(const uint8_t *buf, int *channels, int *sample_rate, |
| 737 int *bit_rate, int *samples); | 737 int *bit_rate, int *samples); |
| 738 } AC3ParseContext; | 738 } AC3ParseContext; |
| 739 | 739 |
| 740 #define AC3_HEADER_SIZE 7 | 740 #define AC3_HEADER_SIZE 7 |
| 741 #define AAC_HEADER_SIZE 8 | 741 #define AAC_HEADER_SIZE 7 |
| 742 | 742 |
| 743 static const int ac3_sample_rates[4] = { | 743 static const int ac3_sample_rates[4] = { |
| 744 48000, 44100, 32000, 0 | 744 48000, 44100, 32000, 0 |
| 745 }; | 745 }; |
| 746 | 746 |
| 813 init_get_bits(&bits, buf, AC3_HEADER_SIZE * 8); | 813 init_get_bits(&bits, buf, AC3_HEADER_SIZE * 8); |
| 814 | 814 |
| 815 if(get_bits(&bits, 16) != 0x0b77) | 815 if(get_bits(&bits, 16) != 0x0b77) |
| 816 return 0; | 816 return 0; |
| 817 | 817 |
| 818 get_bits(&bits, 16); /* crc */ | 818 skip_bits(&bits, 16); /* crc */ |
| 819 fscod = get_bits(&bits, 2); | 819 fscod = get_bits(&bits, 2); |
| 820 frmsizecod = get_bits(&bits, 6); | 820 frmsizecod = get_bits(&bits, 6); |
| 821 | 821 |
| 822 if(!ac3_sample_rates[fscod]) | 822 if(!ac3_sample_rates[fscod]) |
| 823 return 0; | 823 return 0; |
| 824 | 824 |
| 825 bsid = get_bits(&bits, 5); | 825 bsid = get_bits(&bits, 5); |
| 826 if(bsid > 8) | 826 if(bsid > 8) |
| 827 return 0; | 827 return 0; |
| 828 get_bits(&bits, 3); /* bsmod */ | 828 skip_bits(&bits, 3); /* bsmod */ |
| 829 acmod = get_bits(&bits, 3); | 829 acmod = get_bits(&bits, 3); |
| 830 if(acmod & 1 && acmod != 1) | 830 if(acmod & 1 && acmod != 1) |
| 831 get_bits(&bits, 2); /* cmixlev */ | 831 skip_bits(&bits, 2); /* cmixlev */ |
| 832 if(acmod & 4) | 832 if(acmod & 4) |
| 833 get_bits(&bits, 2); /* surmixlev */ | 833 skip_bits(&bits, 2); /* surmixlev */ |
| 834 if(acmod & 2) | 834 if(acmod & 2) |
| 835 get_bits(&bits, 2); /* dsurmod */ | 835 skip_bits(&bits, 2); /* dsurmod */ |
| 836 lfeon = get_bits(&bits, 1); | 836 lfeon = get_bits1(&bits); |
| 837 | 837 |
| 838 *sample_rate = ac3_sample_rates[fscod]; | 838 *sample_rate = ac3_sample_rates[fscod]; |
| 839 *bit_rate = ac3_bitrates[frmsizecod] * 1000; | 839 *bit_rate = ac3_bitrates[frmsizecod] * 1000; |
| 840 *channels = ac3_channels[acmod] + lfeon; | 840 *channels = ac3_channels[acmod] + lfeon; |
| 841 *samples = 6 * 256; | 841 *samples = 6 * 256; |
| 852 init_get_bits(&bits, buf, AAC_HEADER_SIZE * 8); | 852 init_get_bits(&bits, buf, AAC_HEADER_SIZE * 8); |
| 853 | 853 |
| 854 if(get_bits(&bits, 12) != 0xfff) | 854 if(get_bits(&bits, 12) != 0xfff) |
| 855 return 0; | 855 return 0; |
| 856 | 856 |
| 857 get_bits(&bits, 1); | 857 skip_bits1(&bits); /* id */ |
| 858 get_bits(&bits, 2); | 858 skip_bits(&bits, 2); /* layer */ |
| 859 get_bits(&bits, 1); /* protection_absent */ | 859 skip_bits1(&bits); /* protection_absent */ |
| 860 get_bits(&bits, 2); | 860 skip_bits(&bits, 2); /* profile_objecttype */ |
| 861 sr = get_bits(&bits, 4); | 861 sr = get_bits(&bits, 4); /* sample_frequency_index */ |
| 862 if(!aac_sample_rates[sr]) | 862 if(!aac_sample_rates[sr]) |
| 863 return 0; | 863 return 0; |
| 864 get_bits(&bits, 1); /* private_bit */ | 864 skip_bits1(&bits); /* private_bit */ |
| 865 ch = get_bits(&bits, 3); | 865 ch = get_bits(&bits, 3); /* channel_configuration */ |
| 866 if(!aac_channels[ch]) | 866 if(!aac_channels[ch]) |
| 867 return 0; | 867 return 0; |
| 868 get_bits(&bits, 1); /* original/copy */ | 868 skip_bits1(&bits); /* original/copy */ |
| 869 get_bits(&bits, 1); /* home */ | 869 skip_bits1(&bits); /* home */ |
| 870 | 870 |
| 871 /* adts_variable_header */ | 871 /* adts_variable_header */ |
| 872 get_bits(&bits, 1); /* copyright_identification_bit */ | 872 skip_bits1(&bits); /* copyright_identification_bit */ |
| 873 get_bits(&bits, 1); /* copyright_identification_start */ | 873 skip_bits1(&bits); /* copyright_identification_start */ |
| 874 size = get_bits(&bits, 13); | 874 size = get_bits(&bits, 13); /* aac_frame_length */ |
| 875 get_bits(&bits, 11); /* adts_buffer_fullness */ | 875 skip_bits(&bits, 11); /* adts_buffer_fullness */ |
| 876 rdb = get_bits(&bits, 2); | 876 rdb = get_bits(&bits, 2); /* number_of_raw_data_blocks_in_frame */ |
| 877 | 877 |
| 878 *channels = aac_channels[ch]; | 878 *channels = aac_channels[ch]; |
| 879 *sample_rate = aac_sample_rates[sr]; | 879 *sample_rate = aac_sample_rates[sr]; |
| 880 *samples = (rdb + 1) * 1024; | 880 *samples = (rdb + 1) * 1024; |
| 881 *bit_rate = size * 8 * *sample_rate / *samples; | 881 *bit_rate = size * 8 * *sample_rate / *samples; |
