comparison ac3_parser.c @ 8545:a5402e89a80c libavcodec

Factorise enum of AC3 error types to be usable by AAC in the ADTS patch that will follow Patch by Alex Converse ( alex converse gmail com )
author superdump
date Wed, 07 Jan 2009 18:10:10 +0000
parents c34d5e164b22
children 04423b2f6e0b
comparison
equal deleted inserted replaced
8544:0ae8629baf6f 8545:a5402e89a80c
40 40
41 memset(hdr, 0, sizeof(*hdr)); 41 memset(hdr, 0, sizeof(*hdr));
42 42
43 hdr->sync_word = get_bits(gbc, 16); 43 hdr->sync_word = get_bits(gbc, 16);
44 if(hdr->sync_word != 0x0B77) 44 if(hdr->sync_word != 0x0B77)
45 return AC3_PARSE_ERROR_SYNC; 45 return AAC_AC3_PARSE_ERROR_SYNC;
46 46
47 /* read ahead to bsid to distinguish between AC-3 and E-AC-3 */ 47 /* read ahead to bsid to distinguish between AC-3 and E-AC-3 */
48 hdr->bitstream_id = show_bits_long(gbc, 29) & 0x1F; 48 hdr->bitstream_id = show_bits_long(gbc, 29) & 0x1F;
49 if(hdr->bitstream_id > 16) 49 if(hdr->bitstream_id > 16)
50 return AC3_PARSE_ERROR_BSID; 50 return AAC_AC3_PARSE_ERROR_BSID;
51 51
52 hdr->num_blocks = 6; 52 hdr->num_blocks = 6;
53 53
54 /* set default mix levels */ 54 /* set default mix levels */
55 hdr->center_mix_level = 1; // -4.5dB 55 hdr->center_mix_level = 1; // -4.5dB
58 if(hdr->bitstream_id <= 10) { 58 if(hdr->bitstream_id <= 10) {
59 /* Normal AC-3 */ 59 /* Normal AC-3 */
60 hdr->crc1 = get_bits(gbc, 16); 60 hdr->crc1 = get_bits(gbc, 16);
61 hdr->sr_code = get_bits(gbc, 2); 61 hdr->sr_code = get_bits(gbc, 2);
62 if(hdr->sr_code == 3) 62 if(hdr->sr_code == 3)
63 return AC3_PARSE_ERROR_SAMPLE_RATE; 63 return AAC_AC3_PARSE_ERROR_SAMPLE_RATE;
64 64
65 frame_size_code = get_bits(gbc, 6); 65 frame_size_code = get_bits(gbc, 6);
66 if(frame_size_code > 37) 66 if(frame_size_code > 37)
67 return AC3_PARSE_ERROR_FRAME_SIZE; 67 return AAC_AC3_PARSE_ERROR_FRAME_SIZE;
68 68
69 skip_bits(gbc, 5); // skip bsid, already got it 69 skip_bits(gbc, 5); // skip bsid, already got it
70 70
71 skip_bits(gbc, 3); // skip bitstream mode 71 skip_bits(gbc, 3); // skip bitstream mode
72 hdr->channel_mode = get_bits(gbc, 3); 72 hdr->channel_mode = get_bits(gbc, 3);
91 } else { 91 } else {
92 /* Enhanced AC-3 */ 92 /* Enhanced AC-3 */
93 hdr->crc1 = 0; 93 hdr->crc1 = 0;
94 hdr->frame_type = get_bits(gbc, 2); 94 hdr->frame_type = get_bits(gbc, 2);
95 if(hdr->frame_type == EAC3_FRAME_TYPE_RESERVED) 95 if(hdr->frame_type == EAC3_FRAME_TYPE_RESERVED)
96 return AC3_PARSE_ERROR_FRAME_TYPE; 96 return AAC_AC3_PARSE_ERROR_FRAME_TYPE;
97 97
98 hdr->substreamid = get_bits(gbc, 3); 98 hdr->substreamid = get_bits(gbc, 3);
99 99
100 hdr->frame_size = (get_bits(gbc, 11) + 1) << 1; 100 hdr->frame_size = (get_bits(gbc, 11) + 1) << 1;
101 if(hdr->frame_size < AC3_HEADER_SIZE) 101 if(hdr->frame_size < AC3_HEADER_SIZE)
102 return AC3_PARSE_ERROR_FRAME_SIZE; 102 return AAC_AC3_PARSE_ERROR_FRAME_SIZE;
103 103
104 hdr->sr_code = get_bits(gbc, 2); 104 hdr->sr_code = get_bits(gbc, 2);
105 if (hdr->sr_code == 3) { 105 if (hdr->sr_code == 3) {
106 int sr_code2 = get_bits(gbc, 2); 106 int sr_code2 = get_bits(gbc, 2);
107 if(sr_code2 == 3) 107 if(sr_code2 == 3)
108 return AC3_PARSE_ERROR_SAMPLE_RATE; 108 return AAC_AC3_PARSE_ERROR_SAMPLE_RATE;
109 hdr->sample_rate = ff_ac3_sample_rate_tab[sr_code2] / 2; 109 hdr->sample_rate = ff_ac3_sample_rate_tab[sr_code2] / 2;
110 hdr->sr_shift = 1; 110 hdr->sr_shift = 1;
111 } else { 111 } else {
112 hdr->num_blocks = eac3_blocks[get_bits(gbc, 2)]; 112 hdr->num_blocks = eac3_blocks[get_bits(gbc, 2)];
113 hdr->sample_rate = ff_ac3_sample_rate_tab[hdr->sr_code]; 113 hdr->sample_rate = ff_ac3_sample_rate_tab[hdr->sr_code];