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

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

Issue 10834033: Move AudioDevice and AudioInputDevice to media. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
Index: content/renderer/media/audio_device.h
===================================================================
--- content/renderer/media/audio_device.h (revision 148738)
+++ content/renderer/media/audio_device.h (working copy)
@@ -1,169 +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.
-//
-// Audio rendering unit utilizing audio output stream provided by browser
-// process through IPC.
-//
-// Relationship of classes.
-//
-// AudioOutputController AudioDevice
-// ^ ^
-// | |
-// v IPC v
-// AudioRendererHost <---------> AudioMessageFilter
-//
-// Transportation of audio samples from the render to the browser process
-// is done by using shared memory in combination with a sync socket pair
-// to generate a low latency transport. The AudioDevice user registers an
-// AudioDevice::RenderCallback at construction and will be polled by the
-// AudioDevice for audio to be played out by the underlying audio layers.
-//
-// State sequences.
-//
-// Task [IO thread] IPC [IO thread]
-//
-// Start -> CreateStreamOnIOThread -----> CreateStream ------>
-// <- OnStreamCreated <- AudioMsg_NotifyStreamCreated <-
-// ---> PlayOnIOThread -----------> PlayStream -------->
-//
-// Optionally Play() / Pause() sequences may occur:
-// Play -> PlayOnIOThread --------------> PlayStream --------->
-// Pause -> PauseOnIOThread ------------> PauseStream -------->
-// (note that Play() / Pause() sequences before OnStreamCreated are
-// deferred until OnStreamCreated, with the last valid state being used)
-//
-// AudioDevice::Render => audio transport on audio thread =>
-// |
-// Stop --> ShutDownOnIOThread --------> CloseStream -> Close
-//
-// This class utilizes several threads during its lifetime, namely:
-// 1. Creating thread.
-// Must be the main render thread.
-// 2. Control thread (may be the main render thread or another thread).
-// The methods: Start(), Stop(), Play(), Pause(), SetVolume()
-// must be called on the same thread.
-// 3. IO thread (internal implementation detail - not exposed to public API)
-// The thread within which this class receives all the IPC messages and
-// IPC communications can only happen in this thread.
-// 4. Audio transport thread (See AudioDeviceThread).
-// Responsible for calling the AudioThreadCallback implementation that in
-// turn calls AudioRendererSink::RenderCallback which feeds audio samples to
-// the audio layer in the browser process using sync sockets and shared
-// memory.
-//
-// Implementation notes:
-//
-// - Start() is asynchronous/non-blocking.
-// - Stop() is asynchronous/non-blocking.
-// - Play() is asynchronous/non-blocking.
-// - Pause() is asynchronous/non-blocking.
-// - The user must call Stop() before deleting the class instance.
-
-#ifndef CONTENT_RENDERER_MEDIA_AUDIO_DEVICE_H_
-#define CONTENT_RENDERER_MEDIA_AUDIO_DEVICE_H_
-
-#include "base/basictypes.h"
-#include "base/bind.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop.h"
-#include "base/shared_memory.h"
-#include "content/common/content_export.h"
-#include "content/renderer/media/audio_device_thread.h"
-#include "content/renderer/media/scoped_loop_observer.h"
-#include "media/audio/audio_output_ipc.h"
-#include "media/audio/audio_parameters.h"
-#include "media/base/audio_renderer_sink.h"
-
-namespace media {
-class AudioParameters;
-}
-
-class CONTENT_EXPORT AudioDevice
- : NON_EXPORTED_BASE(public media::AudioRendererSink),
- public media::AudioOutputIPCDelegate,
- NON_EXPORTED_BASE(public ScopedLoopObserver) {
- public:
- // Methods called on main render thread -------------------------------------
-
- // AudioRendererSink implementation.
- virtual void Initialize(const media::AudioParameters& params,
- RenderCallback* callback) OVERRIDE;
- virtual void Start() OVERRIDE;
- virtual void Stop() OVERRIDE;
- virtual void Play() OVERRIDE;
- virtual void Pause(bool flush) OVERRIDE;
- virtual bool SetVolume(double volume) OVERRIDE;
-
- // Methods called on IO thread ----------------------------------------------
- // AudioOutputIPCDelegate methods.
- virtual void OnStateChanged(
- media::AudioOutputIPCDelegate::State state) OVERRIDE;
- virtual void OnStreamCreated(base::SharedMemoryHandle handle,
- base::SyncSocket::Handle socket_handle,
- int length) OVERRIDE;
- virtual void OnIPCClosed() OVERRIDE;
-
- // Creates an uninitialized AudioDevice. Clients must call Initialize()
- // before using.
- // TODO(tommi): When all dependencies on |content| have been removed
- // from AudioDevice, move this class over to media/audio.
- AudioDevice(media::AudioOutputIPC* ipc,
- const scoped_refptr<base::MessageLoopProxy>& io_loop);
-
- protected:
- // Magic required by ref_counted.h to avoid any code deleting the object
- // accidentally while there are references to it.
- friend class base::RefCountedThreadSafe<AudioDevice>;
- virtual ~AudioDevice();
-
- 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 AudioMessageFilter and
- // sends IPC messages on that thread.
- void CreateStreamOnIOThread(const media::AudioParameters& params);
- void PlayOnIOThread();
- void PauseOnIOThread(bool flush);
- void ShutDownOnIOThread();
- void SetVolumeOnIOThread(double volume);
-
- // 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_;
-
- RenderCallback* callback_;
-
- // A pointer to the IPC layer that takes care of sending requests over to
- // the AudioRendererHost.
- media::AudioOutputIPC* ipc_;
-
- // Our stream ID on the message filter. Only accessed on the IO thread.
- // Must only be modified on the IO thread.
- int stream_id_;
-
- // State of Play() / Pause() calls before OnStreamCreated() is called.
- bool play_on_start_;
-
- // Set to |true| when OnStreamCreated() is called.
- // Set to |false| when ShutDownOnIOThread() is called.
- // This is for use with play_on_start_ to track Play() / Pause() state.
- // Must only be touched from the IO thread.
- bool is_started_;
-
- // 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<AudioDevice::AudioThreadCallback> audio_callback_;
-
-
- DISALLOW_COPY_AND_ASSIGN(AudioDevice);
-};
-
-#endif // CONTENT_RENDERER_MEDIA_AUDIO_DEVICE_H_

Powered by Google App Engine
This is Rietveld 408576698