diff options
author | dknn <yoann.blein@free.fr> | 2012-06-26 14:05:35 (GMT) |
---|---|---|
committer | dknn <yoann.blein@free.fr> | 2012-09-22 08:53:12 (GMT) |
commit | 39ac2af90938aec4f4e43b81a6e043e0ebcdd798 (patch) | |
tree | add99f9eb287778191ebde47917adbaa96a39b8a /Swiften/ScreenSharing/VP8RTPParser.cpp | |
parent | f374887e7a27831771304a09a74d6cd54f8ef4e4 (diff) | |
download | swift-contrib-39ac2af90938aec4f4e43b81a6e043e0ebcdd798.zip swift-contrib-39ac2af90938aec4f4e43b81a6e043e0ebcdd798.tar.bz2 |
Single threaded codec
Diffstat (limited to 'Swiften/ScreenSharing/VP8RTPParser.cpp')
-rw-r--r-- | Swiften/ScreenSharing/VP8RTPParser.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Swiften/ScreenSharing/VP8RTPParser.cpp b/Swiften/ScreenSharing/VP8RTPParser.cpp new file mode 100644 index 0000000..5a725ea --- /dev/null +++ b/Swiften/ScreenSharing/VP8RTPParser.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2012 Yoann Blein + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#include <Swiften/ScreenSharing/VP8RTPParser.h> + +#include <Swiften/ScreenSharing/VP8Decoder.h> + +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; + } +} + +} |