/* * Copyright (c) 2012 Yoann Blein * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #include #include namespace Swift { VP8RTPParser::VP8RTPParser(VP8Decoder* decoder) : decoder(decoder), firstPacket(true) { } void VP8RTPParser::newPayloadReceived(const uint8_t* data, size_t len, bool hasMarker) { // Payload descriptor uint8_t req = data[0]; if (firstPacket && !(req & SBit)) { /* Error */ } size_t headerSize; // Payload header if (firstPacket) { firstPacket = false; uint8_t o1 = data[1]; showFrame = (o1 & 1); isKeyFrame = (o1 & HBit); o1 >>= Size0BitShift; frameSize = o1 + 8 * data[2] + 2048 * data[3]; headerSize = 4; } else { headerSize = 1; } buffer.insert(buffer.end(), data + headerSize, data + len); if (hasMarker || buffer.size() >= frameSize) { // Frame received decoder->decodeFrame(buffer); buffer.clear(); firstPacket = true; } } }