| Index: content/renderer/media/audio_input_device.h
|
| ===================================================================
|
| --- content/renderer/media/audio_input_device.h (revision 148738)
|
| +++ content/renderer/media/audio_input_device.h (working copy)
|
| @@ -1,207 +0,0 @@
|
| -// Copyright (c) 2012 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.
|
| -
|
| -// Low-latency audio capturing class utilizing audio input stream provided
|
| -// by a server (browser) process by use of an IPC interface.
|
| -//
|
| -// Relationship of classes:
|
| -//
|
| -// AudioInputController AudioInputDevice
|
| -// ^ ^
|
| -// | |
|
| -// v IPC v
|
| -// AudioInputRendererHost <---------> media::AudioInputIPCDelegate
|
| -// ^ (impl in AudioInputMessageFilter)
|
| -// |
|
| -// v
|
| -// AudioInputDeviceManager
|
| -//
|
| -// Transportation of audio samples from the browser to the render process
|
| -// is done by using shared memory in combination with a SyncSocket.
|
| -// The AudioInputDevice user registers an AudioInputDevice::CaptureCallback by
|
| -// calling Initialize(). The callback will be called with recorded audio from
|
| -// the underlying audio layers.
|
| -// The session ID is used by the AudioInputRendererHost to start the device
|
| -// referenced by this ID.
|
| -//
|
| -// State sequences:
|
| -//
|
| -// Sequence where session_id has not been set using SetDevice():
|
| -// ('<-' signifies callbacks, -> signifies calls made by AudioInputDevice)
|
| -// Start -> InitializeOnIOThread -> CreateStream ->
|
| -// <- OnStreamCreated <-
|
| -// -> StartOnIOThread -> PlayStream ->
|
| -//
|
| -// Sequence where session_id has been set using SetDevice():
|
| -// Start -> InitializeOnIOThread -> StartDevice ->
|
| -// <- OnDeviceReady <-
|
| -// -> CreateStream ->
|
| -// <- OnStreamCreated <-
|
| -// -> StartOnIOThread -> PlayStream ->
|
| -//
|
| -// AudioInputDevice::Capture => low latency audio transport on audio thread =>
|
| -// |
|
| -// Stop --> ShutDownOnIOThread ------> CloseStream -> Close
|
| -//
|
| -// This class depends on two threads to function:
|
| -//
|
| -// 1. An IO thread.
|
| -// This thread is used to asynchronously process Start/Stop etc operations
|
| -// that are available via the public interface. The public methods are
|
| -// asynchronous and simply post a task to the IO thread to actually perform
|
| -// the work.
|
| -// 2. Audio transport thread.
|
| -// Responsible for calling the CaptureCallback and feed audio samples from
|
| -// the server side audio layer using a socket and shared memory.
|
| -//
|
| -// Implementation notes:
|
| -// - The user must call Stop() before deleting the class instance.
|
| -
|
| -#ifndef CONTENT_RENDERER_MEDIA_AUDIO_INPUT_DEVICE_H_
|
| -#define CONTENT_RENDERER_MEDIA_AUDIO_INPUT_DEVICE_H_
|
| -
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/compiler_specific.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/shared_memory.h"
|
| -#include "content/common/content_export.h"
|
| -#include "content/renderer/media/audio_device_thread.h"
|
| -#include "content/renderer/media/audio_input_message_filter.h"
|
| -#include "content/renderer/media/scoped_loop_observer.h"
|
| -#include "media/audio/audio_parameters.h"
|
| -
|
| -// TODO(henrika): This class is based on the AudioDevice class and it has
|
| -// many components in common. Investigate potential for re-factoring.
|
| -// TODO(henrika): Add support for event handling (e.g. OnStateChanged,
|
| -// OnCaptureStopped etc.) and ensure that we can deliver these notifications
|
| -// to any clients using this class.
|
| -class CONTENT_EXPORT AudioInputDevice
|
| - : NON_EXPORTED_BASE(public media::AudioInputIPCDelegate),
|
| - NON_EXPORTED_BASE(public ScopedLoopObserver),
|
| - public base::RefCountedThreadSafe<AudioInputDevice> {
|
| - public:
|
| - class CONTENT_EXPORT CaptureCallback {
|
| - public:
|
| - virtual void Capture(const std::vector<float*>& audio_data,
|
| - int number_of_frames,
|
| - int audio_delay_milliseconds,
|
| - double volume) = 0;
|
| - virtual void OnCaptureError() = 0;
|
| - protected:
|
| - virtual ~CaptureCallback() {}
|
| - };
|
| -
|
| - class CONTENT_EXPORT CaptureEventHandler {
|
| - public:
|
| - // Notification to the client that the device with the specific |device_id|
|
| - // has been started.
|
| - // This callback is triggered as a result of StartDevice().
|
| - virtual void OnDeviceStarted(const std::string& device_id) = 0;
|
| -
|
| - // Notification to the client that the device has been stopped.
|
| - virtual void OnDeviceStopped() = 0;
|
| -
|
| - protected:
|
| - virtual ~CaptureEventHandler() {}
|
| - };
|
| -
|
| - AudioInputDevice(media::AudioInputIPC* ipc,
|
| - const scoped_refptr<base::MessageLoopProxy>& io_loop);
|
| -
|
| - // Initializes the AudioInputDevice. This method must be called before
|
| - // any other methods can be used.
|
| - void Initialize(const media::AudioParameters& params,
|
| - CaptureCallback* callback,
|
| - CaptureEventHandler* event_handler);
|
| -
|
| - // Specify the |session_id| to query which device to use.
|
| - // Start() will use the second sequence if this method is called before.
|
| - void SetDevice(int session_id);
|
| -
|
| - // Starts audio capturing.
|
| - // TODO(henrika): add support for notification when recording has started.
|
| - void Start();
|
| -
|
| - // Stops audio capturing.
|
| - // TODO(henrika): add support for notification when recording has stopped.
|
| - void Stop();
|
| -
|
| - // Sets the capture volume scaling, with range [0.0, 1.0] inclusive.
|
| - // Returns |true| on success.
|
| - void SetVolume(double volume);
|
| -
|
| - // Sets the Automatic Gain Control state to on or off.
|
| - // This method must be called before Start(). It will not have any effect
|
| - // if it is called while capturing has already started.
|
| - void SetAutomaticGainControl(bool enabled);
|
| -
|
| - protected:
|
| - // Methods called on IO thread ----------------------------------------------
|
| - // media::AudioInputIPCDelegate implementation.
|
| - virtual void OnStreamCreated(base::SharedMemoryHandle handle,
|
| - base::SyncSocket::Handle socket_handle,
|
| - int length) OVERRIDE;
|
| - virtual void OnVolume(double volume) OVERRIDE;
|
| - virtual void OnStateChanged(
|
| - media::AudioInputIPCDelegate::State state) OVERRIDE;
|
| - virtual void OnDeviceReady(const std::string& device_id) OVERRIDE;
|
| - virtual void OnIPCClosed() OVERRIDE;
|
| -
|
| - friend class base::RefCountedThreadSafe<AudioInputDevice>;
|
| - virtual ~AudioInputDevice();
|
| -
|
| - private:
|
| - // Methods called on IO thread ----------------------------------------------
|
| - // The following methods are tasks posted on the IO thread that needs to
|
| - // be executed on that thread. They interact with AudioInputMessageFilter and
|
| - // sends IPC messages on that thread.
|
| - void InitializeOnIOThread();
|
| - void SetSessionIdOnIOThread(int session_id);
|
| - void StartOnIOThread();
|
| - void ShutDownOnIOThread();
|
| - void SetVolumeOnIOThread(double volume);
|
| - void SetAutomaticGainControlOnIOThread(bool enabled);
|
| -
|
| - // MessageLoop::DestructionObserver implementation for the IO loop.
|
| - // If the IO loop dies before we do, we shut down the audio thread from here.
|
| - virtual void WillDestroyCurrentMessageLoop() OVERRIDE;
|
| -
|
| - media::AudioParameters audio_parameters_;
|
| -
|
| - CaptureCallback* callback_;
|
| - CaptureEventHandler* event_handler_;
|
| -
|
| - media::AudioInputIPC* ipc_;
|
| -
|
| - // Our stream ID on the message filter. Only modified on the IO thread.
|
| - int stream_id_;
|
| -
|
| - // The media session ID used to identify which input device to be started.
|
| - // Only modified on the IO thread.
|
| - int session_id_;
|
| -
|
| - // State variable used to indicate it is waiting for a OnDeviceReady()
|
| - // callback. Only modified on the IO thread.
|
| - bool pending_device_ready_;
|
| -
|
| - // Stores the Automatic Gain Control state. Default is false.
|
| - // Only modified on the IO thread.
|
| - bool agc_is_enabled_;
|
| -
|
| - // Our audio thread callback class. See source file for details.
|
| - class AudioThreadCallback;
|
| -
|
| - // In order to avoid a race between OnStreamCreated and Stop(), we use this
|
| - // guard to control stopping and starting the audio thread.
|
| - base::Lock audio_thread_lock_;
|
| - AudioDeviceThread audio_thread_;
|
| - scoped_ptr<AudioInputDevice::AudioThreadCallback> audio_callback_;
|
| -
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(AudioInputDevice);
|
| -};
|
| -
|
| -#endif // CONTENT_RENDERER_MEDIA_AUDIO_INPUT_DEVICE_H_
|
|
|