From af38f4e5116a9963015695e4bdc81bb03352800a Mon Sep 17 00:00:00 2001 From: "pbos@webrtc.org" Date: Tue, 8 Jul 2014 07:38:12 +0000 Subject: [PATCH] Extract RTP-header SSRC inline in Call. Prevents unknown-RTP-header-extension warnings to be flooding from the RTP-header parsing as there's no way to register RTP extensions for the parser in Call as they're allowed to differ between RTP streams. RTP-header parsing should instead be done separately in every VideoReceiveStream. BUG= R=stefan@webrtc.org Review URL: https://webrtc-codereview.appspot.com/16829004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6619 4adac7df-926f-26a2-2b94-8c16560cd09d --- webrtc/video/call.cc | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/webrtc/video/call.cc b/webrtc/video/call.cc index 2ae0ae564c..e45b549b16 100644 --- a/webrtc/video/call.cc +++ b/webrtc/video/call.cc @@ -89,9 +89,7 @@ class Call : public webrtc::Call, public PacketReceiver { private: DeliveryStatus DeliverRtcp(const uint8_t* packet, size_t length); - DeliveryStatus DeliverRtp(const RTPHeader& header, - const uint8_t* packet, - size_t length); + DeliveryStatus DeliverRtp(const uint8_t* packet, size_t length); Call::Config config_; @@ -288,7 +286,7 @@ uint32_t Call::ReceiveBitrateEstimate() { return 0; } -Call::PacketReceiver::DeliveryStatus Call::DeliverRtcp(const uint8_t* packet, +PacketReceiver::DeliveryStatus Call::DeliverRtcp(const uint8_t* packet, size_t length) { // TODO(pbos): Figure out what channel needs it actually. // Do NOT broadcast! Also make sure it's a valid packet. @@ -319,32 +317,32 @@ Call::PacketReceiver::DeliveryStatus Call::DeliverRtcp(const uint8_t* packet, return rtcp_delivered ? DELIVERY_OK : DELIVERY_PACKET_ERROR; } -Call::PacketReceiver::DeliveryStatus Call::DeliverRtp(const RTPHeader& header, - const uint8_t* packet, - size_t length) { +PacketReceiver::DeliveryStatus Call::DeliverRtp(const uint8_t* packet, + size_t length) { + // Minimum RTP header size. + if (length < 12) + return DELIVERY_PACKET_ERROR; + + const uint8_t* ptr = &packet[8]; + uint32_t ssrc = ptr[0] << 24 | ptr[1] << 16 | ptr[2] << 8 | ptr[3] ; + ReadLockScoped read_lock(*receive_lock_); std::map::iterator it = - receive_ssrcs_.find(header.ssrc); + receive_ssrcs_.find(ssrc); if (it == receive_ssrcs_.end()) return DELIVERY_UNKNOWN_SSRC; - return it->second->DeliverRtp(static_cast(packet), length) - ? DELIVERY_OK - : DELIVERY_PACKET_ERROR; + return it->second->DeliverRtp(packet, length) ? DELIVERY_OK + : DELIVERY_PACKET_ERROR; } -Call::PacketReceiver::DeliveryStatus Call::DeliverPacket(const uint8_t* packet, - size_t length) { - // TODO(pbos): ExtensionMap if there are extensions. +PacketReceiver::DeliveryStatus Call::DeliverPacket(const uint8_t* packet, + size_t length) { if (RtpHeaderParser::IsRtcp(packet, static_cast(length))) return DeliverRtcp(packet, length); - RTPHeader rtp_header; - if (!rtp_header_parser_->Parse(packet, static_cast(length), &rtp_header)) - return DELIVERY_PACKET_ERROR; - - return DeliverRtp(rtp_header, packet, length); + return DeliverRtp(packet, length); } } // namespace internal