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

Method parseMpeg1Info

src/fl/codec/mpeg1.cpp.hpp:19–122  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

17}
18
19Mpeg1Info Mpeg1::parseMpeg1Info(fl::span<const fl::u8> data, fl::string* error_message) {
20 Mpeg1Info info;
21
22 // Validate input data
23 if (data.empty()) {
24 if (error_message) {
25 *error_message = "Empty MPEG1 data";
26 }
27 return info; // returns invalid info
28 }
29
30 // Minimum size check - MPEG1 needs at least the pack header and system header
31 if (data.size() < 12) {
32 if (error_message) {
33 *error_message = "MPEG1 data too small";
34 }
35 return info;
36 }
37
38 // Check for MPEG1 start codes
39 // Look for Pack Start Code (0x000001BA) or System Start Code (0x000001BB)
40 bool foundMpegHeader = false;
41 fl::size headerOffset = 0;
42
43 for (fl::size i = 0; i <= data.size() - 4; i++) {
44 if (data[i] == 0x00 && data[i + 1] == 0x00 && data[i + 2] == 0x01) {
45 if (data[i + 3] == 0xBA || data[i + 3] == 0xBB) {
46 foundMpegHeader = true;
47 headerOffset = i;
48 break;
49 }
50 }
51 }
52
53 if (!foundMpegHeader) {
54 if (error_message) {
55 *error_message = "Invalid MPEG1 stream - no valid start code found";
56 }
57 return info;
58 }
59
60 // For detailed parsing, we need to use the actual decoder to extract metadata
61 // Since MPEG1 headers are complex, we'll use a temporary decoder instance
62 Mpeg1Config tempConfig;
63 tempConfig.mode = Mpeg1Config::SingleFrame;
64 tempConfig.skipAudio = true;
65
66 auto decoder = fl::make_shared<third_party::SoftwareMpeg1Decoder>(tempConfig);
67 auto stream = fl::make_shared<fl::memorybuf>(data.size());
68 stream->write(data);
69
70 if (decoder->begin(stream)) {
71 // Extract metadata using decoder methods
72 info.width = decoder->getWidth();
73 info.height = decoder->getHeight();
74 info.frameRate = decoder->getFrameRate();
75 info.frameCount = decoder->getFrameCount();
76

Callers

nothing calls this directly

Calls 8

getFrameCountMethod · 0.80
emptyMethod · 0.45
sizeMethod · 0.45
writeMethod · 0.45
beginMethod · 0.45
getWidthMethod · 0.45
getHeightMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected