Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1943)

Unified Diff: content/renderer/media/audio_input_device.h

Issue 10834033: Move AudioDevice and AudioInputDevice to media. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments and fixed a few lint issues Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/media/audio_device_unittest.cc ('k') | content/renderer/media/audio_input_device.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « content/renderer/media/audio_device_unittest.cc ('k') | content/renderer/media/audio_input_device.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698