1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.googlecode.mp4parser.authoring.tracks;
2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
3dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.boxes.*;
4dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.boxes.sampleentry.AudioSampleEntry;
5dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.authoring.AbstractTrack;
6dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.authoring.TrackMetaData;
7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.boxes.AC3SpecificBox;
8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.boxes.mp4.objectdescriptors.BitReaderBuffer;
9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.InputStream;
11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.IOException;
12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.nio.ByteBuffer;
13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.Date;
14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.LinkedList;
15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.List;
16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class AC3TrackImpl extends AbstractTrack {
18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    TrackMetaData trackMetaData = new TrackMetaData();
19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    SampleDescriptionBox sampleDescriptionBox;
20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int samplerate;
22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int bitrate;
23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int channelCount;
24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int fscod;
26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int bsid;
27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int bsmod;
28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int acmod;
29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int lfeon;
30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int frmsizecod;
31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int frameSize;
33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int[][][][] bitRateAndFrameSizeTable;
34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private InputStream inputStream;
36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private List<ByteBuffer> samples;
37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    boolean readSamples = false;
38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    List<TimeToSampleBox.Entry> stts;
39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private String lang = "und";
40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public AC3TrackImpl(InputStream fin, String lang) throws IOException {
42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.lang = lang;
43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        parse(fin);
44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public AC3TrackImpl(InputStream fin) throws IOException {
47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        parse(fin);
48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private void parse(InputStream fin) throws IOException {
51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        inputStream = fin;
52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable = new int[19][2][3][2];
53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        stts = new LinkedList<TimeToSampleBox.Entry>();
54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        initBitRateAndFrameSizeTable();
55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (!readVariables()) {
56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            throw new IOException();
57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        sampleDescriptionBox = new SampleDescriptionBox();
60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        AudioSampleEntry audioSampleEntry = new AudioSampleEntry("ac-3");
61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        audioSampleEntry.setChannelCount(2);  // According to  ETSI TS 102 366 Annex F
62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        audioSampleEntry.setSampleRate(samplerate);
63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        audioSampleEntry.setDataReferenceIndex(1);
64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        audioSampleEntry.setSampleSize(16);
65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        AC3SpecificBox ac3 = new AC3SpecificBox();
67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        ac3.setAcmod(acmod);
68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        ac3.setBitRateCode(frmsizecod >> 1);
69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        ac3.setBsid(bsid);
70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        ac3.setBsmod(bsmod);
71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        ac3.setFscod(fscod);
72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        ac3.setLfeon(lfeon);
73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        ac3.setReserved(0);
74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        audioSampleEntry.addBox(ac3);
76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        sampleDescriptionBox.addBox(audioSampleEntry);
77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        trackMetaData.setCreationTime(new Date());
79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        trackMetaData.setModificationTime(new Date());
80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        trackMetaData.setLanguage(lang);
81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        trackMetaData.setTimescale(samplerate); // Audio tracks always use samplerate as timescale
82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        samples = new LinkedList<ByteBuffer>();
84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (!readSamples()) {
85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            throw new IOException();
86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public List<ByteBuffer> getSamples() {
91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return samples;
93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public SampleDescriptionBox getSampleDescriptionBox() {
96dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return sampleDescriptionBox;
97dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
98dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
99dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public List<TimeToSampleBox.Entry> getDecodingTimeEntries() {
100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return stts;
101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
102dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
103dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public List<CompositionTimeToSample.Entry> getCompositionTimeEntries() {
104dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return null;
105dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
106dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
107dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public long[] getSyncSamples() {
108dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return null;
109dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
110dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
111dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public List<SampleDependencyTypeBox.Entry> getSampleDependencies() {
112dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return null;
113dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
114dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
115dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public TrackMetaData getTrackMetaData() {
116dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return trackMetaData;
117dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
118dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
119dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public String getHandler() {
120dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return "soun";
121dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
122dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
123dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public Box getMediaHeaderBox() {
124dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return new SoundMediaHeaderBox();
125dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
126dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
127dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public SubSampleInformationBox getSubsampleInformationBox() {
128dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return null;
129dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
130dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
131dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private boolean readVariables() throws IOException {
132dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byte[] data = new byte[100];
133dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        inputStream.mark(100);
134dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (100 != inputStream.read(data, 0, 100)) {
135dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return false;
136dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
137dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        inputStream.reset(); // Rewind
138dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        ByteBuffer bb = ByteBuffer.wrap(data);
139dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        BitReaderBuffer brb = new BitReaderBuffer(bb);
140dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int syncword = brb.readBits(16);
141dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (syncword != 0xb77) {
142dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return false;
143dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
144dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        brb.readBits(16); // CRC-1
145dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        fscod = brb.readBits(2);
146dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
147dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        switch (fscod) {
148dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 0:
149dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                samplerate = 48000;
150dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
151dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
152dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 1:
153dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                samplerate = 44100;
154dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
155dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
156dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 2:
157dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                samplerate = 32000;
158dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
159dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
160dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 3:
161dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                samplerate = 0;
162dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
163dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
164dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
165dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (samplerate == 0) {
166dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return false;
167dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
168dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
169dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        frmsizecod = brb.readBits(6);
170dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
171dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (!calcBitrateAndFrameSize(frmsizecod)) {
172dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return false;
173dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
174dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
175dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (frameSize == 0) {
176dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return false;
177dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
178dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bsid = brb.readBits(5);
179dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bsmod = brb.readBits(3);
180dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        acmod = brb.readBits(3);
181dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
182dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (bsid == 9) {
183dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            samplerate /= 2;
184dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else if (bsid != 8 && bsid != 6) {
185dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return false;
186dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
187dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
188dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if ((acmod != 1) && ((acmod & 1) == 1)) {
189dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            brb.readBits(2);
190dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
191dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
192dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (0 != (acmod & 4)) {
193dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            brb.readBits(2);
194dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
195dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
196dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (acmod == 2) {
197dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            brb.readBits(2);
198dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
199dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
200dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        switch (acmod) {
201dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 0:
202dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                channelCount = 2;
203dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
204dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
205dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 1:
206dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                channelCount = 1;
207dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
208dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
209dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 2:
210dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                channelCount = 2;
211dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
212dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
213dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 3:
214dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                channelCount = 3;
215dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
216dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
217dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 4:
218dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                channelCount = 3;
219dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
220dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
221dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 5:
222dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                channelCount = 4;
223dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
224dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
225dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 6:
226dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                channelCount = 4;
227dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
228dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
229dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            case 7:
230dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                channelCount = 5;
231dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                break;
232dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
233dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
234dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
235dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        lfeon = brb.readBits(1);
236dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
237dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (lfeon == 1) {
238dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            channelCount++;
239dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
240dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return true;
241dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
242dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
243dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private boolean calcBitrateAndFrameSize(int code) {
244dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int frmsizecode = code >>> 1;
245dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int flag = code & 1;
246dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (frmsizecode > 18 || flag > 1 || fscod > 2) {
247dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return false;
248dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
249dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitrate = bitRateAndFrameSizeTable[frmsizecode][flag][fscod][0];
250dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        frameSize = 2 * bitRateAndFrameSizeTable[frmsizecode][flag][fscod][1];
251dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return true;
252dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
253dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
254dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private boolean readSamples() throws IOException {
255dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (readSamples) {
256dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return true;
257dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
258dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        readSamples = true;
259dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byte[] header = new byte[5];
260dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        boolean ret = false;
261dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        inputStream.mark(5);
262dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        while (-1 != inputStream.read(header)) {
263dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            ret = true;
264dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            int frmsizecode = header[4] & 63;
265dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            calcBitrateAndFrameSize(frmsizecode);
266dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            inputStream.reset();
267dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            byte[] data = new byte[frameSize];
268dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            inputStream.read(data);
269dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            samples.add(ByteBuffer.wrap(data));
270dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            stts.add(new TimeToSampleBox.Entry(1, 1536));
271dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            inputStream.mark(5);
272dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
273dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return ret;
274dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
275dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
276dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private void initBitRateAndFrameSizeTable() {
277dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        // ETSI 102 366 Table 4.13, in frmsizecod, flag, fscod, bitrate/size order. Note that all sizes are in words, and all bitrates in kbps
278dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
279dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        // 48kHz
280dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][0][0][0] = 32;
281dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][1][0][0] = 32;
282dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][0][0][1] = 64;
283dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][1][0][1] = 64;
284dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][0][0][0] = 40;
285dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][1][0][0] = 40;
286dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][0][0][1] = 80;
287dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][1][0][1] = 80;
288dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][0][0][0] = 48;
289dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][1][0][0] = 48;
290dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][0][0][1] = 96;
291dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][1][0][1] = 96;
292dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][0][0][0] = 56;
293dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][1][0][0] = 56;
294dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][0][0][1] = 112;
295dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][1][0][1] = 112;
296dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][0][0][0] = 64;
297dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][1][0][0] = 64;
298dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][0][0][1] = 128;
299dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][1][0][1] = 128;
300dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][0][0][0] = 80;
301dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][1][0][0] = 80;
302dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][0][0][1] = 160;
303dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][1][0][1] = 160;
304dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][0][0][0] = 96;
305dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][1][0][0] = 96;
306dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][0][0][1] = 192;
307dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][1][0][1] = 192;
308dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][0][0][0] = 112;
309dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][1][0][0] = 112;
310dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][0][0][1] = 224;
311dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][1][0][1] = 224;
312dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][0][0][0] = 128;
313dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][1][0][0] = 128;
314dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][0][0][1] = 256;
315dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][1][0][1] = 256;
316dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][0][0][0] = 160;
317dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][1][0][0] = 160;
318dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][0][0][1] = 320;
319dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][1][0][1] = 320;
320dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][0][0][0] = 192;
321dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][1][0][0] = 192;
322dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][0][0][1] = 384;
323dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][1][0][1] = 384;
324dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][0][0][0] = 224;
325dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][1][0][0] = 224;
326dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][0][0][1] = 448;
327dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][1][0][1] = 448;
328dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][0][0][0] = 256;
329dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][1][0][0] = 256;
330dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][0][0][1] = 512;
331dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][1][0][1] = 512;
332dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][0][0][0] = 320;
333dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][1][0][0] = 320;
334dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][0][0][1] = 640;
335dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][1][0][1] = 640;
336dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][0][0][0] = 384;
337dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][1][0][0] = 384;
338dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][0][0][1] = 768;
339dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][1][0][1] = 768;
340dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][0][0][0] = 448;
341dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][1][0][0] = 448;
342dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][0][0][1] = 896;
343dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][1][0][1] = 896;
344dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][0][0][0] = 512;
345dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][1][0][0] = 512;
346dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][0][0][1] = 1024;
347dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][1][0][1] = 1024;
348dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][0][0][0] = 576;
349dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][1][0][0] = 576;
350dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][0][0][1] = 1152;
351dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][1][0][1] = 1152;
352dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][0][0][0] = 640;
353dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][1][0][0] = 640;
354dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][0][0][1] = 1280;
355dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][1][0][1] = 1280;
356dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
357dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        // 44.1 kHz
358dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][0][1][0] = 32;
359dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][1][1][0] = 32;
360dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][0][1][1] = 69;
361dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][1][1][1] = 70;
362dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][0][1][0] = 40;
363dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][1][1][0] = 40;
364dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][0][1][1] = 87;
365dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][1][1][1] = 88;
366dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][0][1][0] = 48;
367dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][1][1][0] = 48;
368dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][0][1][1] = 104;
369dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][1][1][1] = 105;
370dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][0][1][0] = 56;
371dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][1][1][0] = 56;
372dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][0][1][1] = 121;
373dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][1][1][1] = 122;
374dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][0][1][0] = 64;
375dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][1][1][0] = 64;
376dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][0][1][1] = 139;
377dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][1][1][1] = 140;
378dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][0][1][0] = 80;
379dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][1][1][0] = 80;
380dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][0][1][1] = 174;
381dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][1][1][1] = 175;
382dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][0][1][0] = 96;
383dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][1][1][0] = 96;
384dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][0][1][1] = 208;
385dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][1][1][1] = 209;
386dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][0][1][0] = 112;
387dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][1][1][0] = 112;
388dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][0][1][1] = 243;
389dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][1][1][1] = 244;
390dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][0][1][0] = 128;
391dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][1][1][0] = 128;
392dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][0][1][1] = 278;
393dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][1][1][1] = 279;
394dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][0][1][0] = 160;
395dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][1][1][0] = 160;
396dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][0][1][1] = 348;
397dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][1][1][1] = 349;
398dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][0][1][0] = 192;
399dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][1][1][0] = 192;
400dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][0][1][1] = 417;
401dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][1][1][1] = 418;
402dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][0][1][0] = 224;
403dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][1][1][0] = 224;
404dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][0][1][1] = 487;
405dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][1][1][1] = 488;
406dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][0][1][0] = 256;
407dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][1][1][0] = 256;
408dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][0][1][1] = 557;
409dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][1][1][1] = 558;
410dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][0][1][0] = 320;
411dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][1][1][0] = 320;
412dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][0][1][1] = 696;
413dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][1][1][1] = 697;
414dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][0][1][0] = 384;
415dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][1][1][0] = 384;
416dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][0][1][1] = 835;
417dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][1][1][1] = 836;
418dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][0][1][0] = 448;
419dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][1][1][0] = 448;
420dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][0][1][1] = 975;
421dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][1][1][1] = 975;
422dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][0][1][0] = 512;
423dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][1][1][0] = 512;
424dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][0][1][1] = 1114;
425dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][1][1][1] = 1115;
426dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][0][1][0] = 576;
427dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][1][1][0] = 576;
428dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][0][1][1] = 1253;
429dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][1][1][1] = 1254;
430dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][0][1][0] = 640;
431dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][1][1][0] = 640;
432dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][0][1][1] = 1393;
433dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][1][1][1] = 1394;
434dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
435dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        // 32kHz
436dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][0][2][0] = 32;
437dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][1][2][0] = 32;
438dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][0][2][1] = 96;
439dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[0][1][2][1] = 96;
440dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][0][2][0] = 40;
441dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][1][2][0] = 40;
442dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][0][2][1] = 120;
443dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[1][1][2][1] = 120;
444dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][0][2][0] = 48;
445dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][1][2][0] = 48;
446dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][0][2][1] = 144;
447dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[2][1][2][1] = 144;
448dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][0][2][0] = 56;
449dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][1][2][0] = 56;
450dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][0][2][1] = 168;
451dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[3][1][2][1] = 168;
452dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][0][2][0] = 64;
453dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][1][2][0] = 64;
454dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][0][2][1] = 192;
455dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[4][1][2][1] = 192;
456dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][0][2][0] = 80;
457dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][1][2][0] = 80;
458dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][0][2][1] = 240;
459dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[5][1][2][1] = 240;
460dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][0][2][0] = 96;
461dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][1][2][0] = 96;
462dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][0][2][1] = 288;
463dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[6][1][2][1] = 288;
464dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][0][2][0] = 112;
465dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][1][2][0] = 112;
466dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][0][2][1] = 336;
467dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[7][1][2][1] = 336;
468dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][0][2][0] = 128;
469dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][1][2][0] = 128;
470dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][0][2][1] = 384;
471dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[8][1][2][1] = 384;
472dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][0][2][0] = 160;
473dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][1][2][0] = 160;
474dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][0][2][1] = 480;
475dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[9][1][2][1] = 480;
476dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][0][2][0] = 192;
477dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][1][2][0] = 192;
478dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][0][2][1] = 576;
479dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[10][1][2][1] = 576;
480dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][0][2][0] = 224;
481dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][1][2][0] = 224;
482dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][0][2][1] = 672;
483dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[11][1][2][1] = 672;
484dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][0][2][0] = 256;
485dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][1][2][0] = 256;
486dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][0][2][1] = 768;
487dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[12][1][2][1] = 768;
488dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][0][2][0] = 320;
489dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][1][2][0] = 320;
490dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][0][2][1] = 960;
491dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[13][1][2][1] = 960;
492dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][0][2][0] = 384;
493dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][1][2][0] = 384;
494dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][0][2][1] = 1152;
495dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[14][1][2][1] = 1152;
496dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][0][2][0] = 448;
497dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][1][2][0] = 448;
498dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][0][2][1] = 1344;
499dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[15][1][2][1] = 1344;
500dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][0][2][0] = 512;
501dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][1][2][0] = 512;
502dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][0][2][1] = 1536;
503dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[16][1][2][1] = 1536;
504dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][0][2][0] = 576;
505dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][1][2][0] = 576;
506dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][0][2][1] = 1728;
507dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[17][1][2][1] = 1728;
508dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][0][2][0] = 640;
509dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][1][2][0] = 640;
510dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][0][2][1] = 1920;
511dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        bitRateAndFrameSizeTable[18][1][2][1] = 1920;
512dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
513dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu}