diff options
author | tommi@webrtc.org <tommi@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-07-11 20:33:39 +0000 |
---|---|---|
committer | tommi@webrtc.org <tommi@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-07-11 20:33:39 +0000 |
commit | 5faa6d1febfbd0751fdebf4b4106050be29c6637 (patch) | |
tree | 1cb79c5e096a88214676ebd90da5f1072a30b7eb /modules | |
parent | 502a271a36b009a2d4efbe2741772d582e69a6c2 (diff) | |
download | webrtc-5faa6d1febfbd0751fdebf4b4106050be29c6637.tar.gz |
Fix bugs introduced by https://code.google.com/p/webrtc/source/detail?r=6667 .
A few places were relying on temporalIdx being signed. Fix to explicitly check
for kNoTemporalIdx.
TBR=pbos,stefan
Review URL: https://webrtc-codereview.appspot.com/13939005
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@6669 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'modules')
-rw-r--r-- | modules/rtp_rtcp/source/rtp_sender_video.cc | 11 | ||||
-rw-r--r-- | modules/video_coding/main/source/video_sender_unittest.cc | 12 |
2 files changed, 12 insertions, 11 deletions
diff --git a/modules/rtp_rtcp/source/rtp_sender_video.cc b/modules/rtp_rtcp/source/rtp_sender_video.cc index ea5f7a7e..c53dd21d 100644 --- a/modules/rtp_rtcp/source/rtp_sender_video.cc +++ b/modules/rtp_rtcp/source/rtp_sender_video.cc @@ -434,17 +434,18 @@ RTPSenderVideo::SendVP8(const FrameType frameType, if (rtpTypeHdr->VP8.temporalIdx == 0 && !(_retransmissionSettings & kRetransmitBaseLayer)) { storage = kDontRetransmit; - } - if (rtpTypeHdr->VP8.temporalIdx > 0 && + } else if (rtpTypeHdr->VP8.temporalIdx != kNoTemporalIdx && !(_retransmissionSettings & kRetransmitHigherLayers)) { storage = kDontRetransmit; } bool last = false; _numberFirstPartition = 0; - // |rtpTypeHdr->VP8.temporalIdx| is zero for base layers, or -1 if the field - // isn't used. We currently only protect base layers. - bool protect = (rtpTypeHdr->VP8.temporalIdx < 1); + // |rtpTypeHdr->VP8.temporalIdx| is zero for base layers, or kNoTemporalIdx + // if the field isn't used (so all layers are the base layer). We currently + // only protect base layers, so look for these two cases. + bool protect = rtpTypeHdr->VP8.temporalIdx == 0 || + rtpTypeHdr->VP8.temporalIdx == kNoTemporalIdx; while (!last) { // Write VP8 Payload Descriptor and VP8 payload. diff --git a/modules/video_coding/main/source/video_sender_unittest.cc b/modules/video_coding/main/source/video_sender_unittest.cc index 67b3e7ae..0b8193b2 100644 --- a/modules/video_coding/main/source/video_sender_unittest.cc +++ b/modules/video_coding/main/source/video_sender_unittest.cc @@ -141,10 +141,10 @@ class PacketizationCallback : public VCMPacketizationCallback { int frames = 0; for (size_t i = 0; i < frame_data_.size(); ++i) { EXPECT_EQ(kRtpVideoVp8, frame_data_[i].rtp_video_header.codec); - if (frame_data_[i].rtp_video_header.codecHeader.VP8.temporalIdx <= - temporal_layer) { + const uint8_t temporal_idx = + frame_data_[i].rtp_video_header.codecHeader.VP8.temporalIdx; + if (temporal_idx <= temporal_layer || temporal_idx == kNoTemporalIdx) frames++; - } } return frames; } @@ -153,10 +153,10 @@ class PacketizationCallback : public VCMPacketizationCallback { int payload_size = 0; for (size_t i = 0; i < frame_data_.size(); ++i) { EXPECT_EQ(kRtpVideoVp8, frame_data_[i].rtp_video_header.codec); - if (frame_data_[i].rtp_video_header.codecHeader.VP8.temporalIdx <= - temporal_layer) { + const uint8_t temporal_idx = + frame_data_[i].rtp_video_header.codecHeader.VP8.temporalIdx; + if (temporal_idx <= temporal_layer || temporal_idx == kNoTemporalIdx) payload_size += frame_data_[i].payload_size; - } } return payload_size; } |