Revert of Use VoiceChannel/VideoChannel directly from RtpSender/RtpReceiver. (patchset #3 id:40001 of https://codereview.webrtc.org/2046173002/ )
Reason for revert:
Broke peerconnection_unittest somehow, due to introduction of thread check. Will fix and reland.
Original issue's description:
> Use VoiceChannel/VideoChannel directly from RtpSender/RtpReceiver.
>
> This eliminates the need for the extra layer of indirection provided by
> mediastreamprovider.h. It will thus make it easier to implement new
> functionality in RtpSender/RtpReceiver.
>
> It also brings us one step closer to the end goal of combining "senders"
> and "send streams". Currently the sender still needs to go through the
> BaseChannel and MediaChannel, using an SSRC as a key.
>
> R=pthatcher@webrtc.org
>
> Committed: https://crrev.com/bc5831999d3354509d75357b659b4bb8e39f8a6c
> Cr-Commit-Position: refs/heads/master@{#13285}
TBR=pthatcher@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
Review-Url: https://codereview.webrtc.org/2099843003
Cr-Commit-Position: refs/heads/master@{#13286}
diff --git a/webrtc/api/rtpreceiver.cc b/webrtc/api/rtpreceiver.cc
index 8fde438..882bc2b 100644
--- a/webrtc/api/rtpreceiver.cc
+++ b/webrtc/api/rtpreceiver.cc
@@ -21,24 +21,22 @@
AudioRtpReceiver::AudioRtpReceiver(MediaStreamInterface* stream,
const std::string& track_id,
uint32_t ssrc,
- cricket::VoiceChannel* channel)
+ AudioProviderInterface* provider)
: id_(track_id),
ssrc_(ssrc),
- channel_(channel),
+ provider_(provider),
track_(AudioTrackProxy::Create(
rtc::Thread::Current(),
AudioTrack::Create(track_id,
- RemoteAudioSource::Create(ssrc, channel)))),
+ RemoteAudioSource::Create(ssrc, provider)))),
cached_track_enabled_(track_->enabled()) {
RTC_DCHECK(track_->GetSource()->remote());
track_->RegisterObserver(this);
track_->GetSource()->RegisterAudioObserver(this);
Reconfigure();
stream->AddTrack(track_);
- if (channel_) {
- channel_->SignalFirstPacketReceived.connect(
- this, &AudioRtpReceiver::OnFirstPacketReceived);
- }
+ provider_->SignalFirstAudioPacketReceived.connect(
+ this, &AudioRtpReceiver::OnFirstAudioPacketReceived);
}
AudioRtpReceiver::~AudioRtpReceiver() {
@@ -55,78 +53,48 @@
}
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 (!stopped_ && track_->enabled()) {
- RTC_DCHECK(channel_->SetOutputVolume(ssrc_, cached_volume_));
- }
+ if (provider_ && track_->enabled())
+ provider_->SetAudioPlayoutVolume(ssrc_, volume);
}
RtpParameters AudioRtpReceiver::GetParameters() const {
- if (!channel_ || stopped_) {
- return RtpParameters();
- }
- return channel_->GetRtpReceiveParameters(ssrc_);
+ return provider_->GetAudioRtpReceiveParameters(ssrc_);
}
bool AudioRtpReceiver::SetParameters(const RtpParameters& parameters) {
TRACE_EVENT0("webrtc", "AudioRtpReceiver::SetParameters");
- if (!channel_ || stopped_) {
- return false;
- }
- return channel_->SetRtpReceiveParameters(ssrc_, parameters);
+ return provider_->SetAudioRtpReceiveParameters(ssrc_, parameters);
}
void AudioRtpReceiver::Stop() {
// TODO(deadbeef): Need to do more here to fully stop receiving packets.
- if (stopped_) {
+ if (!provider_) {
return;
}
- 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;
+ provider_->SetAudioPlayout(ssrc_, false);
+ provider_ = nullptr;
}
void AudioRtpReceiver::Reconfigure() {
- RTC_DCHECK(!stopped_);
- if (!channel_) {
- LOG(LS_ERROR) << "AudioRtpReceiver::Reconfigure: No audio channel exists.";
+ if (!provider_) {
return;
}
- RTC_DCHECK(
- channel_->SetOutputVolume(ssrc_, track_->enabled() ? cached_volume_ : 0));
+ provider_->SetAudioPlayout(ssrc_, track_->enabled());
}
void AudioRtpReceiver::SetObserver(RtpReceiverObserverInterface* observer) {
observer_ = observer;
- // Deliver any notifications the observer may have missed by being set late.
+ // If received the first packet before setting the observer, call the
+ // observer.
if (received_first_packet_) {
observer_->OnFirstPacketReceived(media_type());
}
}
-void AudioRtpReceiver::SetChannel(cricket::VoiceChannel* channel) {
- if (channel_) {
- channel_->SignalFirstPacketReceived.disconnect(this);
- }
- channel_ = channel;
- if (channel_) {
- channel_->SignalFirstPacketReceived.connect(
- this, &AudioRtpReceiver::OnFirstPacketReceived);
- }
-}
-
-void AudioRtpReceiver::OnFirstPacketReceived(cricket::BaseChannel* channel) {
+void AudioRtpReceiver::OnFirstAudioPacketReceived() {
if (observer_) {
observer_->OnFirstPacketReceived(media_type());
}
@@ -137,10 +105,10 @@
const std::string& track_id,
rtc::Thread* worker_thread,
uint32_t ssrc,
- cricket::VideoChannel* channel)
+ VideoProviderInterface* provider)
: id_(track_id),
ssrc_(ssrc),
- channel_(channel),
+ provider_(provider),
source_(new RefCountedObject<VideoTrackSource>(&broadcaster_,
true /* remote */)),
track_(VideoTrackProxy::Create(
@@ -152,77 +120,48 @@
worker_thread,
source_)))) {
source_->SetState(MediaSourceInterface::kLive);
- if (!channel_) {
- LOG(LS_ERROR)
- << "VideoRtpReceiver::VideoRtpReceiver: No video channel exists.";
- } else {
- RTC_DCHECK(channel_->SetSink(ssrc_, &broadcaster_));
- }
+ provider_->SetVideoPlayout(ssrc_, true, &broadcaster_);
stream->AddTrack(track_);
- if (channel_) {
- channel_->SignalFirstPacketReceived.connect(
- this, &VideoRtpReceiver::OnFirstPacketReceived);
- }
+ provider_->SignalFirstVideoPacketReceived.connect(
+ this, &VideoRtpReceiver::OnFirstVideoPacketReceived);
}
VideoRtpReceiver::~VideoRtpReceiver() {
// Since cricket::VideoRenderer is not reference counted,
- // we need to remove it from the channel before we are deleted.
+ // we need to remove it from the provider before we are deleted.
Stop();
}
RtpParameters VideoRtpReceiver::GetParameters() const {
- if (!channel_ || stopped_) {
- return RtpParameters();
- }
- return channel_->GetRtpReceiveParameters(ssrc_);
+ return provider_->GetVideoRtpReceiveParameters(ssrc_);
}
bool VideoRtpReceiver::SetParameters(const RtpParameters& parameters) {
TRACE_EVENT0("webrtc", "VideoRtpReceiver::SetParameters");
- if (!channel_ || stopped_) {
- return false;
- }
- return channel_->SetRtpReceiveParameters(ssrc_, parameters);
+ return provider_->SetVideoRtpReceiveParameters(ssrc_, parameters);
}
void VideoRtpReceiver::Stop() {
// TODO(deadbeef): Need to do more here to fully stop receiving packets.
- if (stopped_) {
+ if (!provider_) {
return;
}
source_->SetState(MediaSourceInterface::kEnded);
source_->OnSourceDestroyed();
- 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;
+ provider_->SetVideoPlayout(ssrc_, false, nullptr);
+ provider_ = nullptr;
}
void VideoRtpReceiver::SetObserver(RtpReceiverObserverInterface* observer) {
observer_ = observer;
- // Deliver any notifications the observer may have missed by being set late.
+ // If received the first packet before setting the observer, call the
+ // observer.
if (received_first_packet_) {
observer_->OnFirstPacketReceived(media_type());
}
}
-void VideoRtpReceiver::SetChannel(cricket::VideoChannel* channel) {
- if (channel_) {
- channel_->SignalFirstPacketReceived.disconnect(this);
- }
- channel_ = channel;
- if (channel_) {
- channel_->SignalFirstPacketReceived.connect(
- this, &VideoRtpReceiver::OnFirstPacketReceived);
- }
-}
-
-void VideoRtpReceiver::OnFirstPacketReceived(cricket::BaseChannel* channel) {
+void VideoRtpReceiver::OnFirstVideoPacketReceived() {
if (observer_) {
observer_->OnFirstPacketReceived(media_type());
}