summaryrefslogtreecommitdiff
path: root/chromium/media/cast/rtp_receiver/rtp_receiver.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/cast/rtp_receiver/rtp_receiver.cc')
-rw-r--r--chromium/media/cast/rtp_receiver/rtp_receiver.cc21
1 files changed, 17 insertions, 4 deletions
diff --git a/chromium/media/cast/rtp_receiver/rtp_receiver.cc b/chromium/media/cast/rtp_receiver/rtp_receiver.cc
index 97e9b03032c..3c804d9bd9b 100644
--- a/chromium/media/cast/rtp_receiver/rtp_receiver.cc
+++ b/chromium/media/cast/rtp_receiver/rtp_receiver.cc
@@ -5,18 +5,21 @@
#include "media/cast/rtp_receiver/rtp_receiver.h"
#include "base/logging.h"
-#include "media/cast/rtp_common/rtp_defines.h"
#include "media/cast/rtp_receiver/receiver_stats.h"
#include "media/cast/rtp_receiver/rtp_parser/rtp_parser.h"
+#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "net/base/big_endian.h"
namespace media {
namespace cast {
-RtpReceiver::RtpReceiver(const AudioReceiverConfig* audio_config,
+RtpReceiver::RtpReceiver(base::TickClock* clock,
+ const AudioReceiverConfig* audio_config,
const VideoReceiverConfig* video_config,
RtpData* incoming_payload_callback) {
DCHECK(incoming_payload_callback) << "Invalid argument";
DCHECK(audio_config || video_config) << "Invalid argument";
+
// Configure parser.
RtpParserConfig config;
if (audio_config) {
@@ -29,13 +32,23 @@ RtpReceiver::RtpReceiver(const AudioReceiverConfig* audio_config,
config.payload_type = video_config->rtp_payload_type;
config.video_codec = video_config->codec;
}
- stats_.reset(new ReceiverStats(config.ssrc));
+ stats_.reset(new ReceiverStats(clock));
parser_.reset(new RtpParser(incoming_payload_callback, config));
}
RtpReceiver::~RtpReceiver() {}
-bool RtpReceiver::ReceivedPacket(const uint8* packet, int length) {
+// static
+uint32 RtpReceiver::GetSsrcOfSender(const uint8* rtcp_buffer, size_t length) {
+ DCHECK_GE(length, kMinLengthOfRtp) << "Invalid RTP packet";
+ uint32 ssrc_of_sender;
+ net::BigEndianReader big_endian_reader(rtcp_buffer, length);
+ big_endian_reader.Skip(8); // Skip header
+ big_endian_reader.ReadU32(&ssrc_of_sender);
+ return ssrc_of_sender;
+}
+
+bool RtpReceiver::ReceivedPacket(const uint8* packet, size_t length) {
RtpCastHeader rtp_header;
if (!parser_->ParsePacket(packet, length, &rtp_header)) return false;