| Index: content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc
|
| diff --git a/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc
|
| index ead38c2da12fc785f410036b45c64bc79e869458..f23e403c60ded9b7a5dfaa81f4f266cfc478e362 100644
|
| --- a/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc
|
| +++ b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc
|
| @@ -6,8 +6,10 @@
|
|
|
| #include "base/logging.h"
|
| #include "content/renderer/media/media_stream_audio_processor.h"
|
| +#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
|
| #include "content/renderer/media/webrtc/webrtc_audio_sink_adapter.h"
|
| #include "content/renderer/media/webrtc_local_audio_track.h"
|
| +#include "content/renderer/render_thread_impl.h"
|
| #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
|
|
|
| namespace content {
|
| @@ -18,20 +20,34 @@ scoped_refptr<WebRtcLocalAudioTrackAdapter>
|
| WebRtcLocalAudioTrackAdapter::Create(
|
| const std::string& label,
|
| webrtc::AudioSourceInterface* track_source) {
|
| + // TODO(tommi): Change this so that the signaling thread is one of the
|
| + // parameters to this method.
|
| + scoped_refptr<base::MessageLoopProxy> signaling_thread;
|
| + RenderThreadImpl* current = RenderThreadImpl::current();
|
| + if (current) {
|
| + PeerConnectionDependencyFactory* pc_factory =
|
| + current->GetPeerConnectionDependencyFactory();
|
| + signaling_thread = pc_factory->GetWebRtcSignalingThread();
|
| + }
|
| +
|
| + LOG_IF(ERROR, !signaling_thread.get()) << "No signaling thread!";
|
| +
|
| rtc::RefCountedObject<WebRtcLocalAudioTrackAdapter>* adapter =
|
| new rtc::RefCountedObject<WebRtcLocalAudioTrackAdapter>(
|
| - label, track_source);
|
| + label, track_source, signaling_thread);
|
| return adapter;
|
| }
|
|
|
| WebRtcLocalAudioTrackAdapter::WebRtcLocalAudioTrackAdapter(
|
| const std::string& label,
|
| - webrtc::AudioSourceInterface* track_source)
|
| + webrtc::AudioSourceInterface* track_source,
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& signaling_thread)
|
| : webrtc::MediaStreamTrack<webrtc::AudioTrackInterface>(label),
|
| owner_(NULL),
|
| track_source_(track_source),
|
| + signaling_thread_(signaling_thread),
|
| signal_level_(0) {
|
| - signaling_thread_.DetachFromThread();
|
| + signaling_thread_checker_.DetachFromThread();
|
| capture_thread_.DetachFromThread();
|
| }
|
|
|
| @@ -59,9 +75,24 @@ std::string WebRtcLocalAudioTrackAdapter::kind() const {
|
| return kAudioTrackKind;
|
| }
|
|
|
| +bool WebRtcLocalAudioTrackAdapter::set_enabled(bool enable) {
|
| + // If we're not called on the signaling thread, we need to post a task to
|
| + // change the state on the correct thread.
|
| + if (signaling_thread_.get() && !signaling_thread_->BelongsToCurrentThread()) {
|
| + signaling_thread_->PostTask(FROM_HERE,
|
| + base::Bind(
|
| + base::IgnoreResult(&WebRtcLocalAudioTrackAdapter::set_enabled),
|
| + this, enable));
|
| + return true;
|
| + }
|
| +
|
| + return webrtc::MediaStreamTrack<webrtc::AudioTrackInterface>::
|
| + set_enabled(enable);
|
| +}
|
| +
|
| void WebRtcLocalAudioTrackAdapter::AddSink(
|
| webrtc::AudioTrackSinkInterface* sink) {
|
| - DCHECK(signaling_thread_.CalledOnValidThread());
|
| + DCHECK(signaling_thread_checker_.CalledOnValidThread());
|
| DCHECK(sink);
|
| #ifndef NDEBUG
|
| // Verify that |sink| has not been added.
|
| @@ -80,7 +111,7 @@ void WebRtcLocalAudioTrackAdapter::AddSink(
|
|
|
| void WebRtcLocalAudioTrackAdapter::RemoveSink(
|
| webrtc::AudioTrackSinkInterface* sink) {
|
| - DCHECK(signaling_thread_.CalledOnValidThread());
|
| + DCHECK(signaling_thread_checker_.CalledOnValidThread());
|
| DCHECK(sink);
|
| for (ScopedVector<WebRtcAudioSinkAdapter>::iterator it =
|
| sink_adapters_.begin();
|
| @@ -94,7 +125,7 @@ void WebRtcLocalAudioTrackAdapter::RemoveSink(
|
| }
|
|
|
| bool WebRtcLocalAudioTrackAdapter::GetSignalLevel(int* level) {
|
| - DCHECK(signaling_thread_.CalledOnValidThread());
|
| + DCHECK(signaling_thread_checker_.CalledOnValidThread());
|
|
|
| // It is required to provide the signal level after audio processing. In
|
| // case the audio processing is not enabled for the track, we return
|
| @@ -111,7 +142,7 @@ bool WebRtcLocalAudioTrackAdapter::GetSignalLevel(int* level) {
|
|
|
| rtc::scoped_refptr<webrtc::AudioProcessorInterface>
|
| WebRtcLocalAudioTrackAdapter::GetAudioProcessor() {
|
| - DCHECK(signaling_thread_.CalledOnValidThread());
|
| + DCHECK(signaling_thread_checker_.CalledOnValidThread());
|
| base::AutoLock auto_lock(lock_);
|
| return audio_processor_.get();
|
| }
|
| @@ -129,7 +160,7 @@ void WebRtcLocalAudioTrackAdapter::SetSignalLevel(int signal_level) {
|
| }
|
|
|
| void WebRtcLocalAudioTrackAdapter::AddChannel(int channel_id) {
|
| - DCHECK(signaling_thread_.CalledOnValidThread());
|
| + DCHECK(signaling_thread_checker_.CalledOnValidThread());
|
| DVLOG(1) << "WebRtcLocalAudioTrack::AddChannel(channel_id="
|
| << channel_id << ")";
|
| base::AutoLock auto_lock(lock_);
|
| @@ -144,7 +175,7 @@ void WebRtcLocalAudioTrackAdapter::AddChannel(int channel_id) {
|
| }
|
|
|
| void WebRtcLocalAudioTrackAdapter::RemoveChannel(int channel_id) {
|
| - DCHECK(signaling_thread_.CalledOnValidThread());
|
| + DCHECK(signaling_thread_checker_.CalledOnValidThread());
|
| DVLOG(1) << "WebRtcLocalAudioTrack::RemoveChannel(channel_id="
|
| << channel_id << ")";
|
| base::AutoLock auto_lock(lock_);
|
| @@ -155,7 +186,7 @@ void WebRtcLocalAudioTrackAdapter::RemoveChannel(int channel_id) {
|
| }
|
|
|
| webrtc::AudioSourceInterface* WebRtcLocalAudioTrackAdapter::GetSource() const {
|
| - DCHECK(signaling_thread_.CalledOnValidThread());
|
| + DCHECK(signaling_thread_checker_.CalledOnValidThread());
|
| return track_source_;
|
| }
|
|
|
|
|