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;