#include <list>
#include <string>
+#include "base/memory/ref_counted.h"
#include "base/synchronization/lock.h"
#include "base/threading/thread_checker.h"
-#include "content/renderer/media/media_stream_audio_track_sink.h"
+#include "content/renderer/media/media_stream_track_extra_data.h"
#include "content/renderer/media/tagged_list.h"
#include "content/renderer/media/webrtc_audio_device_impl.h"
#include "content/renderer/media/webrtc_local_audio_source_provider.h"
-#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
-#include "third_party/libjingle/source/talk/app/webrtc/mediastreamtrack.h"
-#include "third_party/libjingle/source/talk/media/base/audiorenderer.h"
-
-namespace cricket {
-class AudioRenderer;
-} // namespace cricket
-
-namespace media {
-class AudioBus;
-} // namespace media
namespace content {
class MediaStreamAudioSink;
class MediaStreamAudioSinkOwner;
+class MediaStreamAudioTrackSink;
class PeerConnectionAudioSink;
class WebAudioCapturerSource;
class WebRtcAudioCapturer;
+class WebRtcLocalAudioTrackAdapter;
// A WebRtcLocalAudioTrack instance contains the implementations of
-// MediaStreamTrack and MediaStreamAudioSink.
+// MediaStreamTrackExtraData.
// When an instance is created, it will register itself as a track to the
// WebRtcAudioCapturer to get the captured data, and forward the data to
// its |sinks_|. The data flow can be stopped by disabling the audio track.
class CONTENT_EXPORT WebRtcLocalAudioTrack
- : NON_EXPORTED_BASE(public cricket::AudioRenderer),
- NON_EXPORTED_BASE(
- public webrtc::MediaStreamTrack<webrtc::AudioTrackInterface>) {
+ : NON_EXPORTED_BASE(public MediaStreamTrackExtraData) {
public:
- static scoped_refptr<WebRtcLocalAudioTrack> Create(
- const std::string& id,
- const scoped_refptr<WebRtcAudioCapturer>& capturer,
- WebAudioCapturerSource* webaudio_source,
- webrtc::AudioSourceInterface* track_source);
+ WebRtcLocalAudioTrack(WebRtcLocalAudioTrackAdapter* adapter,
+ const scoped_refptr<WebRtcAudioCapturer>& capturer,
+ WebAudioCapturerSource* webaudio_source);
+
+ virtual ~WebRtcLocalAudioTrack();
// Add a sink to the track. This function will trigger a OnSetFormat()
// call on the |sink|.
return source_provider_.get();
}
- protected:
- WebRtcLocalAudioTrack(
- const std::string& label,
- const scoped_refptr<WebRtcAudioCapturer>& capturer,
- WebAudioCapturerSource* webaudio_source,
- webrtc::AudioSourceInterface* track_source);
-
- virtual ~WebRtcLocalAudioTrack();
-
private:
typedef TaggedList<MediaStreamAudioTrackSink> SinkList;
- // cricket::AudioCapturer implementation.
- virtual void AddChannel(int channel_id) OVERRIDE;
- virtual void RemoveChannel(int channel_id) OVERRIDE;
-
- // webrtc::AudioTrackInterface implementation.
- virtual webrtc::AudioSourceInterface* GetSource() const OVERRIDE;
- virtual cricket::AudioRenderer* GetRenderer() OVERRIDE;
-
- // webrtc::MediaStreamTrack implementation.
- virtual std::string kind() const OVERRIDE;
+ // All usage of libjingle is through this adapter. The adapter holds
+ // a reference on this object, but not vice versa.
+ WebRtcLocalAudioTrackAdapter* adapter_;
// The provider of captured data to render.
- // The WebRtcAudioCapturer is today created by WebRtcAudioDeviceImpl.
scoped_refptr<WebRtcAudioCapturer> capturer_;
// The source of the audio track which is used by WebAudio, which provides
// data to the audio track when hooking up with WebAudio.
scoped_refptr<WebAudioCapturerSource> webaudio_source_;
- // The source of the audio track which handles the audio constraints.
- // TODO(xians): merge |track_source_| to |capturer_|.
- talk_base::scoped_refptr<webrtc::AudioSourceInterface> track_source_;
-
// A tagged list of sinks that the audio data is fed to. Tags
// indicate tracks that need to be notified that the audio format
// has changed.
// Protects |params_| and |sinks_|.
mutable base::Lock lock_;
- // A vector of WebRtc VoE channels that the capturer sends data to.
- std::vector<int> voe_channels_;
-
// Audio parameters of the audio capture stream.
// Accessed on only the audio capture thread.
media::AudioParameters audio_parameters_;