-static uint32_t mp4ff_read_mp4_descr_length(mp4ff_t * f)
-{
- uint8_t b;
- uint8_t numBytes = 0;
- uint32_t length = 0;
-
- do {
- b = mp4ff_read_char(f);
- numBytes++;
- length = (length << 7) | (b & 0x7F);
- } while ((b & 0x80) && numBytes < 4);
-
- return length;
-}
-static int32_t mp4ff_read_esds(mp4ff_t * f)
-{
- uint8_t tag;
- uint32_t temp;
-
- if (f->total_tracks == 0)
- return f->error++;
-
- mp4ff_read_char(f); /* version */
- mp4ff_read_int24(f); /* flags */
-
- /* get and verify ES_DescrTag */
- tag = mp4ff_read_char(f);
- if (tag == 0x03) {
- /* read length */
- if (mp4ff_read_mp4_descr_length(f) < 5 + 15) {
- return 1;
- }
- /* skip 3 bytes */
- mp4ff_read_int24(f);
- } else {
- /* skip 2 bytes */
- mp4ff_read_int16(f);
- }
-
- /* get and verify DecoderConfigDescrTab */
- if (mp4ff_read_char(f) != 0x04) {
- return 1;
- }
-
- /* read length */
- temp = mp4ff_read_mp4_descr_length(f);
- if (temp < 13)
- return 1;
-
- f->track[f->total_tracks - 1]->audioType = mp4ff_read_char(f);
- mp4ff_read_int32(f); //0x15000414 ????
- f->track[f->total_tracks - 1]->maxBitrate = mp4ff_read_int32(f);
- f->track[f->total_tracks - 1]->avgBitrate = mp4ff_read_int32(f);
-
- /* get and verify DecSpecificInfoTag */
- if (mp4ff_read_char(f) != 0x05) {
- return 1;
- }
-
- /* read length */
- f->track[f->total_tracks - 1]->decoderConfigLen =
- mp4ff_read_mp4_descr_length(f);
-
- free(f->track[f->total_tracks - 1]->decoderConfig);
- f->track[f->total_tracks - 1]->decoderConfig =
- para_malloc(f->track[f->total_tracks - 1]->decoderConfigLen);
- if (f->track[f->total_tracks - 1]->decoderConfig) {
- mp4ff_read_data(f, f->track[f->total_tracks - 1]->decoderConfig,
- f->track[f->total_tracks -
- 1]->decoderConfigLen);
- }
- /* will skip the remainder of the atom */
- return 0;
-}
-static int32_t mp4ff_read_mp4a(mp4ff_t * f)