Home | History | Annotate | Download | only in base

Lines Matching refs:buffer

32 // Helper function to read 2 bytes (16 bits, big endian) from a buffer.
37 // Helper function to read 3 bytes (24 bits, big endian) from a buffer.
42 // Helper function to read 4 bytes (32 bits, big endian) from a buffer.
47 // Helper function to read 4 bytes (32 bits, little endian) from a buffer.
52 // Helper function to do buffer comparisons with a string without going off the
53 // end of the buffer.
54 static bool StartsWith(const uint8* buffer,
59 memcmp(buffer, prefix, prefix_size) == 0);
62 // Helper function to do buffer comparisons with another buffer (to allow for
63 // embedded \0 in the comparison) without going off the end of the buffer.
64 static bool StartsWith(const uint8* buffer,
69 memcmp(buffer, prefix, prefix_size) == 0);
96 static bool CheckAac(const uint8* buffer, int buffer_size) {
103 BitReader reader(buffer + offset, 6);
135 static bool CheckAc3(const uint8* buffer, int buffer_size) {
145 BitReader reader(buffer + offset, 6);
170 static bool CheckEac3(const uint8* buffer, int buffer_size) {
180 BitReader reader(buffer + offset, 6);
208 static bool CheckBink(const uint8* buffer, int buffer_size) {
213 RCHECK(Read32LE(buffer + 8) > 0);
216 int width = Read32LE(buffer + 20);
220 int height = Read32LE(buffer + 24);
224 RCHECK(Read32LE(buffer + 28) > 0);
227 RCHECK(Read32LE(buffer + 32) > 0);
230 return (Read32LE(buffer + 40) <= 256);
234 static bool CheckCaf(const uint8* buffer, int buffer_size) {
238 BitReader reader(buffer, buffer_size);
275 static bool CheckDts(const uint8* buffer, int buffer_size) {
282 BitReader reader(buffer + offset, 11);
330 static bool CheckDV(const uint8* buffer, int buffer_size) {
339 BitReader reader(buffer + offset, 11);
393 static bool CheckGsm(const uint8* buffer, int buffer_size) {
403 RCHECK((buffer[offset] & 0xf0) == 0xd0);
410 // is the current location in the buffer, and is updated. |bytes_needed| is the
411 // number of bytes that must remain in the buffer when |start_code| is found.
412 // Returns true if start_code found (and enough space in the buffer after it),
414 static bool AdvanceToStartCode(const uint8* buffer,
427 uint32 next = Read24(buffer + *offset);
436 static bool CheckH261(const uint8* buffer, int buffer_size) {
445 if (!AdvanceToStartCode(buffer, buffer_size, &offset, 4, 20, 0x10)) {
446 // No start code found (or off end of buffer), so success if
452 // at least 4 bytes remaining in the buffer.
453 BitReader reader(buffer + offset, buffer_size - offset);
460 // out of bits assume that the buffer is correctly formatted.
470 // bits, then assume that the buffer up to here is correct, and the buffer
484 static bool CheckH263(const uint8* buffer, int buffer_size) {
494 if (!AdvanceToStartCode(buffer, buffer_size, &offset, 9, 22, 0x20)) {
495 // No start code found (or off end of buffer), so success if
501 // at least 9 bytes remaining in the buffer.
502 BitReader reader(buffer + offset, 9);
552 static bool CheckH264(const uint8* buffer, int buffer_size) {
562 if (!AdvanceToStartCode(buffer, buffer_size, &offset, 4, 24, 1)) {
563 // No start code found (or off end of buffer), so success if
569 // at least 4 bytes remaining in the buffer.
570 BitReader reader(buffer + offset, 4);
608 static bool CheckHls(const uint8* buffer, int buffer_size) {
613 if (StartsWith(buffer, buffer_size, kHlsSignature)) {
615 // "#EXT-X-MEDIA-SEQUENCE:" somewhere in the buffer. Other playlists (like
620 if (buffer[offset] == '#') {
621 if (StartsWith(buffer + offset, buffer_size - offset, kHls1) ||
622 StartsWith(buffer + offset, buffer_size - offset, kHls2) ||
623 StartsWith(buffer + offset, buffer_size - offset, kHls3)) {
634 static bool CheckMJpeg(const uint8* buffer, int buffer_size) {
644 RCHECK(buffer[offset] == 0xff);
645 uint8 code = buffer[offset + 1];
671 int length = Read16(buffer + offset + 2) + 2;
677 int number_components = buffer[offset + 4];
683 if (buffer[offset] == 0xff && buffer[offset + 1] != 0)
703 static bool CheckMpeg2ProgramStream(const uint8* buffer, int buffer_size) {
709 BitReader reader(buffer + offset, 14);
772 while (offset + 6 < buffer_size && Read24(buffer + offset) == 1) {
774 int stream_id = buffer[offset + 3];
788 int pes_length = Read16(buffer + offset + 4);
793 // Success as we are off the end of the buffer and liked everything
794 // in the buffer.
801 static bool CheckMpeg2TransportStream(const uint8* buffer, int buffer_size) {
811 while (buffer[offset] != kMpeg2SyncWord && offset < 20) {
817 BitReader reader(buffer + offset, 6);
852 if (buffer[offset + 188] == kMpeg2SyncWord)
854 else if (buffer[offset + 192] == kMpeg2SyncWord)
856 else if (buffer[offset + 204] == kMpeg2SyncWord)
874 static bool CheckMpeg4BitStream(const uint8* buffer, int buffer_size) {
887 if (!AdvanceToStartCode(buffer, buffer_size, &offset, 6, 24, 1)) {
894 // at least 6 bytes remaining in the buffer.
895 BitReader reader(buffer + offset, 6);
950 static bool CheckMov(const uint8* buffer, int buffer_size) {
957 uint32 atomsize = Read32(buffer + offset);
958 uint32 atomtype = Read32(buffer + offset + 4);
984 if (Read32(buffer + offset + 8) != 0)
985 break; // Offset is way past buffer size.
986 atomsize = Read32(buffer + offset + 12);
1085 static int GetMp3HeaderSize(const uint8* buffer, int buffer_size) {
1087 int size = ((buffer[6] & 0x7f) << 21) + ((buffer[7] & 0x7f) << 14) +
1088 ((buffer[8] & 0x7f) << 7) + (buffer[9] & 0x7f) + 10;
1089 if (buffer[5] & 0x10) // Footer added?
1095 static bool CheckMp3(const uint8* buffer, int buffer_size, bool seenHeader) {
1102 offset = GetMp3HeaderSize(buffer, buffer_size);
1105 while (offset < buffer_size && buffer[offset] == 0)
1111 buffer + offset, buffer_size - offset, &framesize));
1118 // Off the end of the buffer, return success if a few valid headers seen.
1122 // Check that the next characters in |buffer| represent a number. The format
1126 static bool VerifyNumber(const uint8* buffer,
1133 while (isspace(buffer[*offset])) {
1140 while (--max_digits >= 0 && isdigit(buffer[*offset])) {
1151 // Check that the next character in |buffer| is one of |c1| or |c2|. |c2| is
1154 static inline bool VerifyCharacters(const uint8* buffer,
1160 char c = static_cast<char>(buffer[(*offset)++]);
1165 static bool CheckSrt(const uint8* buffer, int buffer_size) {
1170 int offset = StartsWith(buffer, buffer_size, UTF8_BYTE_ORDER_MARK) ? 3 : 0;
1171 RCHECK(VerifyNumber(buffer, buffer_size, &offset, 100));
1172 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, '\n', '\r'));
1175 while (VerifyCharacters(buffer, buffer_size, &offset, '\n', '\r')) {}
1181 RCHECK(VerifyNumber(buffer, buffer_size, &offset, 100));
1182 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ':', 0));
1183 RCHECK(VerifyNumber(buffer, buffer_size, &offset, 2));
1184 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ':', 0));
1185 RCHECK(VerifyNumber(buffer, buffer_size, &offset, 2));
1186 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ',', '.'));
1187 RCHECK(VerifyNumber(buffer, buffer_size, &offset, 3));
1188 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ' ', 0));
1189 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, '-', 0));
1190 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, '-', 0));
1191 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, '>', 0));
1192 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ' ', 0));
1193 RCHECK(VerifyNumber(buffer, buffer_size, &offset, 100));
1194 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ':', 0));
1195 RCHECK(VerifyNumber(buffer, buffer_size, &offset, 2));
1196 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ':', 0));
1197 RCHECK(VerifyNumber(buffer, buffer_size, &offset, 2));
1198 RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ',', '.'));
1199 RCHECK(VerifyNumber(buffer, buffer_size, &offset, 3));
1206 // If it is an invalid encoding or the end of the buffer is reached,
1228 // If it is an invalid coding or the end of the buffer is reached,
1229 // return something that will go off the end of the buffer.
1241 // Incorrect format (more than 7 leading 0's) or off the end of the buffer.
1248 static bool CheckWebm(const uint8* buffer, int buffer_size) {
1252 BitReader reader(buffer, buffer_size);
1301 static bool CheckVC1(const uint8* buffer, int buffer_size) {
1311 if (buffer[0] == 0xc5 &&
1312 Read32(buffer + 4) == 0x04 &&
1313 Read32(buffer + 20) == 0x0c) {
1315 BitReader reader(buffer + 8, 12);
1355 // Buffer isn't Bitstream Metadata, so scan for start codes.
1361 if (!AdvanceToStartCode(buffer, buffer_size, &offset, 5, 24, 1)) {
1369 // at least 5 bytes remaining in the buffer.
1370 BitReader reader(buffer + offset, 5);
1420 // Attempt to determine the container type from the buffer provided. This is
1421 // a simple pass, that uses the first 4 bytes of the buffer as an index to get
1423 static MediaContainerName LookupContainerByFirst4(const uint8* buffer,
1429 uint32 first4 = Read32(buffer);
1432 if (CheckWebm(buffer, buffer_size))
1437 if (StartsWith(buffer,
1446 if (StartsWith(buffer, buffer_size, kAmrSignature))
1451 if (CheckHls(buffer, buffer_size))
1456 if (buffer[4] == 0 && buffer[5] == 0)
1469 if (CheckBink(buffer, buffer_size))
1474 if (CheckCaf(buffer, buffer_size))
1480 Read16(buffer + 11) <= 2048 &&
1481 Read16(buffer + 13) <= 2048) {
1487 if (Read32(buffer
1498 if (Read32(buffer + 4) != 0 && Read32(buffer + 8) != 0)
1510 if (buffer[5] == 0 && Read32(buffer + 5) > 8)
1515 switch (Read32(buffer + 8)) {
1526 if (Read32(buffer + 8) == TAG('O','N','2','f'))
1531 if (buffer[5] <= 7)
1536 if (buffer_size > 16 && Read32(buffer + 12) == TAG('d','s','6','4'))
1541 switch (Read32(buffer + 8)) {
1553 if (StartsWith(buffer, buffer_size, kAssSignature))
1558 if (StartsWith(buffer, buffer_size, kAssBomSignature))
1566 if (CheckDts(buffer, buffer_size))
1571 if (StartsWith(buffer,
1589 if (CheckMp3(buffer, buffer_size, true))
1595 uint32 first2 = Read16(buffer);
1598 if (CheckAc3(buffer, buffer_size))
1600 if (CheckEac3(buffer, buffer_size))
1608 if (CheckAac(buffer, buffer_size))
1614 if (CheckMp3(buffer, buffer_size, false))
1620 // Attempt to determine the container name from the buffer provided.
1621 MediaContainerName DetermineContainer(const uint8* buffer, int buffer_size) {
1622 DCHECK(buffer);
1625 if (CheckMov(buffer, buffer_size))
1630 MediaContainerName result = LookupContainerByFirst4(buffer, buffer_size);
1634 // Additional checks that may scan a portion of the buffer.
1635 if (CheckMpeg2ProgramStream(buffer, buffer_size))
1637 if (CheckMpeg2TransportStream(buffer, buffer_size))
1639 if (CheckMJpeg(buffer, buffer_size))
1641 if (CheckDV(buffer, buffer_size))
1643 if (CheckH261(buffer, buffer_size))
1645 if (CheckH263(buffer, buffer_size))
1647 if (CheckH264(buffer, buffer_size))
1649 if (CheckMpeg4BitStream(buffer, buffer_size))
1651 if (CheckVC1(buffer, buffer_size))
1653 if (CheckSrt(buffer, buffer_size))
1655 if (CheckGsm(buffer, buffer_size))
1661 if (AdvanceToStartCode(buffer, buffer_size, &offset, 4, 16, kAc3SyncWord)) {
1662 if (CheckAc3(buffer + offset, buffer_size - offset))
1664 if (CheckEac3(buffer + offset, buffer_size - offset))