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@6669 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc
index ea5f7a7..c53dd21 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc
@@ -434,17 +434,18 @@
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/webrtc/modules/video_coding/main/source/video_sender_unittest.cc b/webrtc/modules/video_coding/main/source/video_sender_unittest.cc
index 67b3e7a..0b8193b 100644
--- a/webrtc/modules/video_coding/main/source/video_sender_unittest.cc
+++ b/webrtc/modules/video_coding/main/source/video_sender_unittest.cc
@@ -141,10 +141,10 @@
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 @@
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;
}