25 *error_message =
"Empty MPEG1 data";
31 if (data.
size() < 12) {
33 *error_message =
"MPEG1 data too small";
40 bool foundMpegHeader =
false;
41 fl::size headerOffset = 0;
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;
53 if (!foundMpegHeader) {
55 *error_message =
"Invalid MPEG1 stream - no valid start code found";
70 if (decoder->begin(stream)) {
72 info.
width = decoder->getWidth();
73 info.
height = decoder->getHeight();
91 for (fl::size i = headerOffset; i <= data.
size() - 8; i++) {
92 if (data[i] == 0x00 && data[i + 1] == 0x00 &&
93 data[i + 2] == 0x01 && data[i + 3] == 0xB3) {
96 if (i + 7 < data.
size()) {
99 fl::u16
width = ((data[i + 4] << 4) | ((data[i + 5] & 0xF0) >> 4));
100 fl::u16
height = (((data[i + 5] & 0x0F) << 8) | data[i + 6]);
116 if (!info.
isValid && error_message) {
117 *error_message =
"Failed to parse MPEG1 stream metadata";