diff options
author | andrew@webrtc.org <andrew@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2012-10-22 18:19:23 +0000 |
---|---|---|
committer | andrew@webrtc.org <andrew@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2012-10-22 18:19:23 +0000 |
commit | 14b43beb7ce4440b30dcea31196de5b4a529cb6b (patch) | |
tree | 7084ca9d70956417df0bd953736203704b88644e /webrtc/modules/video_coding/main/source/packet.cc | |
parent | 24a419c0c755dea56933cd81fd88d2d334fd7565 (diff) | |
download | webrtc-14b43beb7ce4440b30dcea31196de5b4a529cb6b.tar.gz |
Move src/ -> webrtc/
TBR=niklas.enbom@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/915006
git-svn-id: http://webrtc.googlecode.com/svn/trunk@2963 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'webrtc/modules/video_coding/main/source/packet.cc')
-rw-r--r-- | webrtc/modules/video_coding/main/source/packet.cc | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/webrtc/modules/video_coding/main/source/packet.cc b/webrtc/modules/video_coding/main/source/packet.cc new file mode 100644 index 0000000000..e52cbdd8bf --- /dev/null +++ b/webrtc/modules/video_coding/main/source/packet.cc @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "packet.h" +#include "module_common_types.h" + +#include <assert.h> + +namespace webrtc { + +VCMPacket::VCMPacket() + : + payloadType(0), + timestamp(0), + seqNum(0), + dataPtr(NULL), + sizeBytes(0), + markerBit(false), + frameType(kFrameEmpty), + codec(kVideoCodecUnknown), + isFirstPacket(false), + completeNALU(kNaluUnset), + insertStartCode(false), + codecSpecificHeader() { +} + +VCMPacket::VCMPacket(const WebRtc_UWord8* ptr, + const WebRtc_UWord32 size, + const WebRtcRTPHeader& rtpHeader) : + payloadType(rtpHeader.header.payloadType), + timestamp(rtpHeader.header.timestamp), + seqNum(rtpHeader.header.sequenceNumber), + dataPtr(ptr), + sizeBytes(size), + markerBit(rtpHeader.header.markerBit), + + frameType(rtpHeader.frameType), + codec(kVideoCodecUnknown), + isFirstPacket(rtpHeader.type.Video.isFirstPacket), + completeNALU(kNaluComplete), + insertStartCode(false), + codecSpecificHeader(rtpHeader.type.Video) +{ + CopyCodecSpecifics(rtpHeader.type.Video); +} + +VCMPacket::VCMPacket(const WebRtc_UWord8* ptr, WebRtc_UWord32 size, WebRtc_UWord16 seq, WebRtc_UWord32 ts, bool mBit) : + payloadType(0), + timestamp(ts), + seqNum(seq), + dataPtr(ptr), + sizeBytes(size), + markerBit(mBit), + + frameType(kVideoFrameDelta), + codec(kVideoCodecUnknown), + isFirstPacket(false), + completeNALU(kNaluComplete), + insertStartCode(false), + codecSpecificHeader() +{} + +void VCMPacket::Reset() { + payloadType = 0; + timestamp = 0; + seqNum = 0; + dataPtr = NULL; + sizeBytes = 0; + markerBit = false; + frameType = kFrameEmpty; + codec = kVideoCodecUnknown; + isFirstPacket = false; + completeNALU = kNaluUnset; + insertStartCode = false; + memset(&codecSpecificHeader, 0, sizeof(RTPVideoHeader)); +} + +void VCMPacket::CopyCodecSpecifics(const RTPVideoHeader& videoHeader) +{ + switch(videoHeader.codec) + { + case kRTPVideoVP8: + { + // Handle all packets within a frame as depending on the previous packet + // TODO(holmer): This should be changed to make fragments independent + // when the VP8 RTP receiver supports fragments. + if (isFirstPacket && markerBit) + completeNALU = kNaluComplete; + else if (isFirstPacket) + completeNALU = kNaluStart; + else if (markerBit) + completeNALU = kNaluEnd; + else + completeNALU = kNaluIncomplete; + + codec = kVideoCodecVP8; + break; + } + case kRTPVideoI420: + { + codec = kVideoCodecI420; + break; + } + default: + { + codec = kVideoCodecUnknown; + break; + } + } +} + +} |