annotate libmpdemux/parse_mp4.c @ 34175:a345e7162d0a

Move TranslateFilename() to util/string.c. Now that the Win32 GUI uses symbolic constants for its messages, the code of TranslateFilename() both GUIs use is almost identical. So, share the code.
author ib
date Wed, 26 Oct 2011 15:14:06 +0000
parents 32725ca88fed
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28106
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
1 /*
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
2 * MP4 file format parser code
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
3 *
28110
fc04fa771074 license header consistency cosmetics
diego
parents: 28106
diff changeset
4 * Copyright (C) 2002 Felix Buenemann <atmosfear at users.sourceforge.net>
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
5 * Code inspired by libmp4 from http://mpeg4ip.sourceforge.net/.
28106
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
6 *
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
7 * This file is part of MPlayer.
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
8 *
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
9 * MPlayer is free software; you can redistribute it and/or modify
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
10 * it under the terms of the GNU General Public License as published by
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
12 * (at your option) any later version.
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
13 *
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
14 * MPlayer is distributed in the hope that it will be useful,
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
17 * GNU General Public License for more details.
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
18 *
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
19 * You should have received a copy of the GNU General Public License along
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
20 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
22 */
28106
4932a522100e Replace informal GPL notes by standard GPL header.
diego
parents: 22605
diff changeset
23
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
24 #include <stdio.h>
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
25 #include <inttypes.h>
5404
534580bc88a8 FreeBSD require stdlib.h
nexus
parents: 5403
diff changeset
26 #include <stdlib.h>
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
27 #include "parse_mp4.h"
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
28 #include "mp_msg.h"
22605
4d81dbdf46b9 Add explicit location for headers from the stream/ directory.
diego
parents: 18666
diff changeset
29 #include "stream/stream.h"
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
30
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
31 //#define MP4_DUMPATOM
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
32
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
33 #define MP4_DL MSGL_V
5303
534f16f50c17 10l fix memory allocation
atmos4
parents: 5301
diff changeset
34 #define freereturn(a,b) free(a); return b
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
35
30570
98dc6ae7ede2 libmpdemux: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
36 static int mp4_read_descr_len(stream_t *s)
98dc6ae7ede2 libmpdemux: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
37 {
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
38 uint8_t b;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
39 uint8_t numBytes = 0;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
40 uint32_t length = 0;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
41
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
42 do {
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
43 b = stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
44 numBytes++;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
45 length = (length << 7) | (b & 0x7F);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
46 } while ((b & 0x80) && numBytes < 4);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
47
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
48 //printf("MP4 read desc len: %d\n", length);
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
49 return length;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
50 }
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
51
5305
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
52 /* parse the data part of MP4 esds atoms */
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
53 int mp4_parse_esds(unsigned char *data, int datalen, esds_t *esds) {
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
54 /* create memory stream from data */
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
55 stream_t *s = new_memory_stream(data, datalen);
18666
492c6d674c3e decoderConfigLen can be larger than 255 bytes
nicodvb
parents: 6929
diff changeset
56 uint16_t len;
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
57 #ifdef MP4_DUMPATOM
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
58 {int i;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
59 printf("ESDS Dump (%dbyte):\n", datalen);
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
60 for(i = 0; i < datalen; i++)
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
61 printf("%02X ", data[i]);
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
62 printf("\nESDS Dumped\n");}
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
63 #endif
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
64 memset(esds, 0, sizeof(esds_t));
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
65
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
66 esds->version = stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
67 esds->flags = stream_read_int24(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
68 mp_msg(MSGT_DEMUX, MP4_DL,
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
69 "ESDS MPEG4 version: %d flags: 0x%06X\n",
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
70 esds->version, esds->flags);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
71
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
72 /* get and verify ES_DescrTag */
5305
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
73 if (stream_read_char(s) == MP4ESDescrTag) {
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
74 /* read length */
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
75 len = mp4_read_descr_len(s);
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
76
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
77 esds->ESId = stream_read_word(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
78 esds->streamPriority = stream_read_char(s);
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
79 mp_msg(MSGT_DEMUX, MP4_DL,
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
80 "ESDS MPEG4 ES Descriptor (%dBytes):\n"
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
81 " -> ESId: %d\n"
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
82 " -> streamPriority: %d\n",
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
83 len, esds->ESId, esds->streamPriority);
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
84
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
85 if (len < (5 + 15)) {
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
86 freereturn(s,1);
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
87 }
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
88 } else {
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
89 esds->ESId = stream_read_word(s);
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
90 mp_msg(MSGT_DEMUX, MP4_DL,
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
91 "ESDS MPEG4 ES Descriptor (%dBytes):\n"
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
92 " -> ESId: %d\n", 2, esds->ESId);
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
93 }
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
94
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
95 /* get and verify DecoderConfigDescrTab */
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
96 if (stream_read_char(s) != MP4DecConfigDescrTag) {
5303
534f16f50c17 10l fix memory allocation
atmos4
parents: 5301
diff changeset
97 freereturn(s,1);
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
98 }
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
99
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
100 /* read length */
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
101 len = mp4_read_descr_len(s);
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
102
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
103 esds->objectTypeId = stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
104 esds->streamType = stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
105 esds->bufferSizeDB = stream_read_int24(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
106 esds->maxBitrate = stream_read_dword(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
107 esds->avgBitrate = stream_read_dword(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
108 mp_msg(MSGT_DEMUX, MP4_DL,
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
109 "ESDS MPEG4 Decoder Config Descriptor (%dBytes):\n"
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
110 " -> objectTypeId: %d\n"
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
111 " -> streamType: 0x%02X\n"
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
112 " -> bufferSizeDB: 0x%06X\n"
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
113 " -> maxBitrate: %.3fkbit/s\n"
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
114 " -> avgBitrate: %.3fkbit/s\n",
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
115 len, esds->objectTypeId, esds->streamType,
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
116 esds->bufferSizeDB, esds->maxBitrate/1000.0,
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
117 esds->avgBitrate/1000.0);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
118
6929
a3aac765967d allow early exit from esds parsing, so decoder info (type & bitrate) are
arpi
parents: 5404
diff changeset
119 esds->decoderConfigLen=0;
a3aac765967d allow early exit from esds parsing, so decoder info (type & bitrate) are
arpi
parents: 5404
diff changeset
120
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
121 if (len < 15) {
6929
a3aac765967d allow early exit from esds parsing, so decoder info (type & bitrate) are
arpi
parents: 5404
diff changeset
122 freereturn(s,0);
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
123 }
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
124
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
125 /* get and verify DecSpecificInfoTag */
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
126 if (stream_read_char(s) != MP4DecSpecificDescrTag) {
6929
a3aac765967d allow early exit from esds parsing, so decoder info (type & bitrate) are
arpi
parents: 5404
diff changeset
127 freereturn(s,0);
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
128 }
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
129
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
130 /* read length */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
131 esds->decoderConfigLen = len = mp4_read_descr_len(s);
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
132
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
133 esds->decoderConfig = malloc(esds->decoderConfigLen);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
134 if (esds->decoderConfig) {
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
135 stream_read(s, esds->decoderConfig, esds->decoderConfigLen);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
136 } else {
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
137 esds->decoderConfigLen = 0;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
138 }
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
139 mp_msg(MSGT_DEMUX, MP4_DL,
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
140 "ESDS MPEG4 Decoder Specific Descriptor (%dBytes)\n", len);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
141
5305
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
142 /* get and verify SLConfigDescrTag */
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
143 if(stream_read_char(s) != MP4SLConfigDescrTag) {
6929
a3aac765967d allow early exit from esds parsing, so decoder info (type & bitrate) are
arpi
parents: 5404
diff changeset
144 freereturn(s,0);
5305
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
145 }
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
146
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
147 /* Note: SLConfig is usually constant value 2, size 1Byte */
5333
c4f6ab72300a eeh 10l, removed one line too much :(
atmos4
parents: 5332
diff changeset
148 esds->SLConfigLen = len = mp4_read_descr_len(s);
5305
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
149 esds->SLConfig = malloc(esds->SLConfigLen);
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
150 if (esds->SLConfig) {
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
151 stream_read(s, esds->SLConfig, esds->SLConfigLen);
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
152 } else {
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
153 esds->SLConfigLen = 0;
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
154 }
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
155 mp_msg(MSGT_DEMUX, MP4_DL,
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
156 "ESDS MPEG4 Sync Layer Config Descriptor (%dBytes)\n"
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
157 " -> predefined: %d\n", len, esds->SLConfig[0]);
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
158
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
159 /* will skip the remainder of the atom */
5303
534f16f50c17 10l fix memory allocation
atmos4
parents: 5301
diff changeset
160 freereturn(s,0);
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
161
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
162 }
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents:
diff changeset
163
5305
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
164 /* cleanup all mem occupied by mp4_parse_esds */
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
165 void mp4_free_esds(esds_t *esds) {
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
166 if(esds->decoderConfigLen)
5305
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
167 free(esds->decoderConfig);
5332
a3874da21700 Fix some silly logical bugs and fix memory cleanup in case mp4_parse_es returned with an error by memsetting the esds struct to 0 on init.
atmos4
parents: 5305
diff changeset
168 if(esds->SLConfigLen)
5305
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
169 free(esds->SLConfig);
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
170 }
77ac28af44ec - Add parsing of Sync Layer Descriptor
atmos4
parents: 5303
diff changeset
171
5303
534f16f50c17 10l fix memory allocation
atmos4
parents: 5301
diff changeset
172 #undef freereturn
534f16f50c17 10l fix memory allocation
atmos4
parents: 5301
diff changeset
173 #undef MP4_DL