MCPcopy Create free account
hub / github.com/FastLED/FastLED / parseMp4

Function parseMp4

src/fl/codec/mp4_parser.cpp.hpp:106–281  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

104} // namespace
105
106Mp4TrackInfo parseMp4(fl::span<const fl::u8> data, fl::string* error) {
107 Mp4TrackInfo info;
108
109 if (data.size() < 8) {
110 if (error) *error = "Data too small for MP4";
111 return info;
112 }
113
114 // Find moov box at top level
115 fl::size moovPos = findBox(data, 0, data.size(), "moov");
116 if (moovPos == fl::size(-1)) {
117 if (error) *error = "No moov box found";
118 return info;
119 }
120
121 bool ok = true;
122 fl::u32 moovSize = readU32BE(data, moovPos, ok);
123 if (!ok) {
124 if (error) *error = "Invalid moov box size";
125 return info;
126 }
127 fl::size moovEnd = moovPos + moovSize;
128 if (moovEnd > data.size()) moovEnd = data.size();
129 fl::size moovBody = moovPos + 8;
130
131 // Find trak box inside moov
132 fl::size trakPos = findBox(data, moovBody, moovEnd, "trak");
133 if (trakPos == fl::size(-1)) {
134 if (error) *error = "No trak box found";
135 return info;
136 }
137
138 fl::u32 trakSize = readU32BE(data, trakPos, ok);
139 if (!ok) {
140 if (error) *error = "Invalid trak box size";
141 return info;
142 }
143 fl::size trakEnd = trakPos + trakSize;
144 if (trakEnd > moovEnd) trakEnd = moovEnd;
145 fl::size trakBody = trakPos + 8;
146
147 // Find mdia box inside trak
148 fl::size mdiaPos = findBox(data, trakBody, trakEnd, "mdia");
149 if (mdiaPos == fl::size(-1)) {
150 if (error) *error = "No mdia box found";
151 return info;
152 }
153
154 fl::u32 mdiaSize = readU32BE(data, mdiaPos, ok);
155 if (!ok) {
156 if (error) *error = "Invalid mdia box size";
157 return info;
158 }
159 fl::size mdiaEnd = mdiaPos + mdiaSize;
160 if (mdiaEnd > trakEnd) mdiaEnd = trakEnd;
161 fl::size mdiaBody = mdiaPos + 8;
162
163 // Find minf box inside mdia

Callers 5

parseH264InfoMethod · 0.85
beginMethod · 0.85
validateMp4Function · 0.85
mp4_parser.hppFile · 0.85
h264.hppFile · 0.85

Calls 6

findBoxFunction · 0.85
readU32BEFunction · 0.85
readU16BEFunction · 0.85
parseAvcCFunction · 0.85
sizeFunction · 0.50
sizeMethod · 0.45

Tested by

no test coverage detected