Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1037)

Unified Diff: webrtc/api/rtpreceiver.cc

Issue 2046173002: Use VoiceChannel/VideoChannel directly from RtpSender/RtpReceiver. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Comment formatting. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/api/rtpreceiver.cc
diff --git a/webrtc/api/rtpreceiver.cc b/webrtc/api/rtpreceiver.cc
index 9df336e1f042ca79afb2814905af52c2840a7753..64ad09c426296970fc471ff7c2ed6cd6c9905ca9 100644
--- a/webrtc/api/rtpreceiver.cc
+++ b/webrtc/api/rtpreceiver.cc
@@ -21,14 +21,14 @@ namespace webrtc {
AudioRtpReceiver::AudioRtpReceiver(MediaStreamInterface* stream,
const std::string& track_id,
uint32_t ssrc,
- AudioProviderInterface* provider)
+ cricket::VoiceChannel* channel)
: id_(track_id),
ssrc_(ssrc),
- provider_(provider),
+ channel_(channel),
track_(AudioTrackProxy::Create(
rtc::Thread::Current(),
AudioTrack::Create(track_id,
- RemoteAudioSource::Create(ssrc, provider)))),
+ RemoteAudioSource::Create(ssrc, channel)))),
cached_track_enabled_(track_->enabled()) {
RTC_DCHECK(track_->GetSource()->remote());
track_->RegisterObserver(this);
@@ -51,46 +51,66 @@ void AudioRtpReceiver::OnChanged() {
}
void AudioRtpReceiver::OnSetVolume(double volume) {
+ RTC_DCHECK(volume >= 0 && volume <= 10);
+ cached_volume_ = volume;
+ if (!channel_) {
+ LOG(LS_ERROR) << "AudioRtpReceiver::OnSetVolume: No audio channel exists.";
+ return;
+ }
// When the track is disabled, the volume of the source, which is the
// corresponding WebRtc Voice Engine channel will be 0. So we do not allow
// setting the volume to the source when the track is disabled.
- if (provider_ && track_->enabled())
- provider_->SetAudioPlayoutVolume(ssrc_, volume);
+ if (!stopped_ && track_->enabled()) {
+ RTC_DCHECK(channel_->SetOutputVolume(ssrc_, cached_volume_));
+ }
}
RtpParameters AudioRtpReceiver::GetParameters() const {
- return provider_->GetAudioRtpReceiveParameters(ssrc_);
+ if (!channel_ || stopped_) {
+ return RtpParameters();
+ }
+ return channel_->GetRtpReceiveParameters(ssrc_);
}
bool AudioRtpReceiver::SetParameters(const RtpParameters& parameters) {
TRACE_EVENT0("webrtc", "AudioRtpReceiver::SetParameters");
- return provider_->SetAudioRtpReceiveParameters(ssrc_, parameters);
+ if (!channel_ || stopped_) {
+ return false;
+ }
+ return channel_->SetRtpReceiveParameters(ssrc_, parameters);
}
void AudioRtpReceiver::Stop() {
// TODO(deadbeef): Need to do more here to fully stop receiving packets.
- if (!provider_) {
+ if (stopped_) {
return;
}
- provider_->SetAudioPlayout(ssrc_, false);
- provider_ = nullptr;
+ if (channel_) {
+ // Allow that SetOutputVolume fail. This is the normal case when the
+ // underlying media channel has already been deleted.
+ channel_->SetOutputVolume(ssrc_, 0);
+ }
+ stopped_ = true;
pthatcher1 2016/06/21 07:45:41 Would it make sense to make channel_ = nullptr?
Taylor Brandstetter 2016/06/22 00:50:17 I don't see why. As long as the channel is availab
}
void AudioRtpReceiver::Reconfigure() {
- if (!provider_) {
+ RTC_DCHECK(!stopped_);
+ if (!channel_) {
+ LOG(LS_ERROR) << "AudioRtpReceiver::Reconfigure: No audio channel exists.";
return;
}
- provider_->SetAudioPlayout(ssrc_, track_->enabled());
+ RTC_DCHECK(
+ channel_->SetOutputVolume(ssrc_, track_->enabled() ? cached_volume_ : 0));
}
VideoRtpReceiver::VideoRtpReceiver(MediaStreamInterface* stream,
const std::string& track_id,
rtc::Thread* worker_thread,
uint32_t ssrc,
- VideoProviderInterface* provider)
+ cricket::VideoChannel* channel)
: id_(track_id),
ssrc_(ssrc),
- provider_(provider),
+ channel_(channel),
source_(new RefCountedObject<VideoTrackSource>(&broadcaster_,
true /* remote */)),
track_(VideoTrackProxy::Create(
@@ -102,34 +122,51 @@ VideoRtpReceiver::VideoRtpReceiver(MediaStreamInterface* stream,
worker_thread,
source_)))) {
source_->SetState(MediaSourceInterface::kLive);
- provider_->SetVideoPlayout(ssrc_, true, &broadcaster_);
+ if (!channel_) {
+ LOG(LS_ERROR)
+ << "VideoRtpReceiver::VideoRtpReceiver: No video channel exists.";
+ } else {
+ RTC_DCHECK(channel_->SetSink(ssrc_, &broadcaster_));
+ }
stream->AddTrack(track_);
}
VideoRtpReceiver::~VideoRtpReceiver() {
// Since cricket::VideoRenderer is not reference counted,
- // we need to remove it from the provider before we are deleted.
+ // we need to remove it from the channel before we are deleted.
Stop();
}
RtpParameters VideoRtpReceiver::GetParameters() const {
- return provider_->GetVideoRtpReceiveParameters(ssrc_);
+ if (!channel_ || stopped_) {
+ return RtpParameters();
+ }
+ return channel_->GetRtpReceiveParameters(ssrc_);
}
bool VideoRtpReceiver::SetParameters(const RtpParameters& parameters) {
TRACE_EVENT0("webrtc", "VideoRtpReceiver::SetParameters");
- return provider_->SetVideoRtpReceiveParameters(ssrc_, parameters);
+ if (!channel_ || stopped_) {
+ return false;
+ }
+ return channel_->SetRtpReceiveParameters(ssrc_, parameters);
}
void VideoRtpReceiver::Stop() {
// TODO(deadbeef): Need to do more here to fully stop receiving packets.
- if (!provider_) {
+ if (stopped_) {
return;
}
source_->SetState(MediaSourceInterface::kEnded);
source_->OnSourceDestroyed();
- provider_->SetVideoPlayout(ssrc_, false, nullptr);
- provider_ = nullptr;
+ if (!channel_) {
+ LOG(LS_WARNING) << "VideoRtpReceiver::Stop: No video channel exists.";
+ } else {
+ // Allow that SetSink fail. This is the normal case when the underlying
+ // media channel has already been deleted.
+ channel_->SetSink(ssrc_, nullptr);
+ }
+ stopped_ = true;
}
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698