blob: 2e5ae8592151ea23bb301a53a38ebabe92dd6ad3 [file] [log] [blame]
// Copyright 2016 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_LOCAL_MEDIA_STREAM_AUDIO_SOURCE_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_LOCAL_MEDIA_STREAM_AUDIO_SOURCE_H_
#include "third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h"
#include <string>
#include "media/base/audio_capturer_source.h"
#include "third_party/blink/renderer/modules/modules_export.h"
namespace blink {
class LocalFrame;
// Represents a local source of audio data generated by an AudioInputDevice.
// Uses content::AudioDeviceFactory (indirectly through
// Platform::NewAudioRendererSink) to auto-create the AudioInputDevice,
// using the parameters and session ID found in MediaStreamDevice, just before
// the first track is connected. Audio data is transported directly to the
// tracks (i.e., there is no audio processing).
class MODULES_EXPORT LocalMediaStreamAudioSource final
: public MediaStreamAudioSource,
public media::AudioCapturerSource::CaptureCallback {
public:
// |consumer_frame| references the RenderFrame that will consume the
// audio data. Audio parameters and (optionally) a pre-existing audio session
// ID are read from |device_info|. |requested_buffer_size| is the desired
// buffer size for the audio hardware, a nullptr means to use the default.
LocalMediaStreamAudioSource(
LocalFrame* consumer_frame,
const MediaStreamDevice& device,
const int* requested_buffer_size,
bool disable_local_echo,
ConstraintsRepeatingCallback started_callback,
scoped_refptr<base::SingleThreadTaskRunner> task_runner);
~LocalMediaStreamAudioSource() final;
// MediaStreamAudioSource implementation.
void ChangeSourceImpl(const MediaStreamDevice& new_device) final;
base::Optional<AudioProcessingProperties> GetAudioProcessingProperties()
const final;
private:
// MediaStreamAudioSource implementation.
bool EnsureSourceIsStarted() final;
void EnsureSourceIsStopped() final;
// media::AudioCapturerSource::CaptureCallback implementation.
void OnCaptureStarted() final;
void Capture(const media::AudioBus* audio_bus,
base::TimeTicks audio_capture_time,
double volume,
bool key_pressed) final;
void OnCaptureError(const std::string& message) final;
void OnCaptureMuted(bool is_muted) final;
// The LocalFrame that will consume the audio data. Used when creating
// AudioInputDevices via the AudioDeviceFactory (indirectly through
// Platform).
//
// TODO(crbug.com/704136): Consider moving LocalMediaStreamAudioSource to
// Oilpan and use Member<> here.
WeakPersistent<LocalFrame> consumer_frame_;
// The device created by the AudioDeviceFactory in EnsureSourceIsStarted().
scoped_refptr<media::AudioCapturerSource> source_;
// Callback that's called when the audio source has been initialized.
ConstraintsRepeatingCallback started_callback_;
// In debug builds, check that all methods that could cause object graph
// or data flow changes are being called on the main thread.
THREAD_CHECKER(thread_checker_);
DISALLOW_COPY_AND_ASSIGN(LocalMediaStreamAudioSource);
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_LOCAL_MEDIA_STREAM_AUDIO_SOURCE_H_