From 9e1acc872859ffd6dc2827af81a9446b50a9a53f Mon Sep 17 00:00:00 2001 From: "tommi@webrtc.org" Date: Fri, 11 Jul 2014 20:33:39 +0000 Subject: [PATCH] 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 --- webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc | 11 ++++++----- .../main/source/video_sender_unittest.cc | 12 ++++++------ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc index ea5f7a7e3a..c53dd21d79 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 @@ 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/webrtc/modules/video_coding/main/source/video_sender_unittest.cc b/webrtc/modules/video_coding/main/source/video_sender_unittest.cc index 67b3e7aecc..0b8193b21c 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 @@ 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; }