blob: 264bd355512f5b5ab4c333e8a47ff7119432bc22 [file] [log] [blame]
// Copyright (c) 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/media/webrtc/rtc_rtp_receiver.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "content/renderer/media/webrtc/rtc_rtp_contributing_source.h"
#include "third_party/webrtc/rtc_base/scoped_ref_ptr.h"
namespace content {
uintptr_t RTCRtpReceiver::getId(
const webrtc::RtpReceiverInterface* webrtc_rtp_receiver) {
return reinterpret_cast<uintptr_t>(webrtc_rtp_receiver);
}
RTCRtpReceiver::RTCRtpReceiver(
scoped_refptr<webrtc::RtpReceiverInterface> webrtc_rtp_receiver,
std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> track_adapter)
: webrtc_rtp_receiver_(std::move(webrtc_rtp_receiver)),
track_adapter_(std::move(track_adapter)) {
DCHECK(webrtc_rtp_receiver_);
DCHECK(track_adapter_);
DCHECK_EQ(track_adapter_->webrtc_track(), webrtc_rtp_receiver_->track());
}
RTCRtpReceiver::~RTCRtpReceiver() {}
uintptr_t RTCRtpReceiver::Id() const {
return getId(webrtc_rtp_receiver_.get());
}
const blink::WebMediaStreamTrack& RTCRtpReceiver::Track() const {
DCHECK(track_adapter_->webrtc_track() == webrtc_rtp_receiver_->track());
return track_adapter_->web_track();
}
blink::WebVector<std::unique_ptr<blink::WebRTCRtpContributingSource>>
RTCRtpReceiver::GetSources() {
auto webrtc_sources = webrtc_rtp_receiver_->GetSources();
blink::WebVector<std::unique_ptr<blink::WebRTCRtpContributingSource>> sources(
webrtc_sources.size());
for (size_t i = 0; i < webrtc_sources.size(); ++i) {
sources[i] = base::MakeUnique<RTCRtpContributingSource>(webrtc_sources[i]);
}
return sources;
}
const webrtc::MediaStreamTrackInterface& RTCRtpReceiver::webrtc_track() const {
DCHECK(track_adapter_->webrtc_track() == webrtc_rtp_receiver_->track());
DCHECK(track_adapter_->webrtc_track());
return *track_adapter_->webrtc_track();
}
} // namespace content