Index: webrtc/modules/video_coding/packet.cc |
diff --git a/webrtc/modules/video_coding/packet.cc b/webrtc/modules/video_coding/packet.cc |
index e8c06a69771e86aaaa57aacc8e9237ba455927ec..aa27c5da6b868c73e7fa6fe65b136314d3d7b706 100644 |
--- a/webrtc/modules/video_coding/packet.cc |
+++ b/webrtc/modules/video_coding/packet.cc |
@@ -32,7 +32,9 @@ VCMPacket::VCMPacket() |
insertStartCode(false), |
width(0), |
height(0), |
- codecSpecificHeader() {} |
+ video_header() { |
+ video_header.playout_delay = {-1, -1}; |
+} |
VCMPacket::VCMPacket(const uint8_t* ptr, |
const size_t size, |
@@ -45,7 +47,6 @@ VCMPacket::VCMPacket(const uint8_t* ptr, |
sizeBytes(size), |
markerBit(rtpHeader.header.markerBit), |
timesNacked(-1), |
- |
frameType(rtpHeader.frameType), |
codec(kVideoCodecUnknown), |
isFirstPacket(rtpHeader.type.Video.isFirstPacket), |
@@ -53,8 +54,18 @@ VCMPacket::VCMPacket(const uint8_t* ptr, |
insertStartCode(false), |
width(rtpHeader.type.Video.width), |
height(rtpHeader.type.Video.height), |
- codecSpecificHeader(rtpHeader.type.Video) { |
+ video_header(rtpHeader.type.Video) { |
CopyCodecSpecifics(rtpHeader.type.Video); |
+ |
+ if (markerBit) { |
+ video_header.rotation = rtpHeader.type.Video.rotation; |
+ } |
+ // Playout decisions are made entirely based on first packet in a frame. |
+ if (isFirstPacket) { |
+ video_header.playout_delay = rtpHeader.type.Video.playout_delay; |
+ } else { |
+ video_header.playout_delay = {-1, -1}; |
+ } |
} |
VCMPacket::VCMPacket(const uint8_t* ptr, |
@@ -70,7 +81,6 @@ VCMPacket::VCMPacket(const uint8_t* ptr, |
sizeBytes(size), |
markerBit(mBit), |
timesNacked(-1), |
- |
frameType(kVideoFrameDelta), |
codec(kVideoCodecUnknown), |
isFirstPacket(false), |
@@ -78,7 +88,7 @@ VCMPacket::VCMPacket(const uint8_t* ptr, |
insertStartCode(false), |
width(0), |
height(0), |
- codecSpecificHeader() {} |
+ video_header() {} |
void VCMPacket::Reset() { |
payloadType = 0; |
@@ -96,13 +106,10 @@ void VCMPacket::Reset() { |
insertStartCode = false; |
width = 0; |
height = 0; |
- memset(&codecSpecificHeader, 0, sizeof(RTPVideoHeader)); |
+ memset(&video_header, 0, sizeof(RTPVideoHeader)); |
} |
void VCMPacket::CopyCodecSpecifics(const RTPVideoHeader& videoHeader) { |
- if (markerBit) { |
- codecSpecificHeader.rotation = videoHeader.rotation; |
- } |
switch (videoHeader.codec) { |
case kRtpVideoVp8: |
// Handle all packets within a frame as depending on the previous packet |