diff options
author | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-07 18:36:51 +0000 |
---|---|---|
committer | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-07 18:36:51 +0000 |
commit | 94155a6b13969e7bb5cd96a6acf03277d12d9ae7 (patch) | |
tree | 773bbc2df939c85cb41ee1ae5fd6044f7199d3ed /chrome/browser/renderer_host/audio_sync_reader.h | |
parent | 62ede11c038242e242579cb312549acb7e64b518 (diff) | |
download | chromium_src-94155a6b13969e7bb5cd96a6acf03277d12d9ae7.zip chromium_src-94155a6b13969e7bb5cd96a6acf03277d12d9ae7.tar.gz chromium_src-94155a6b13969e7bb5cd96a6acf03277d12d9ae7.tar.bz2 |
Rewrite AudioRendererHost to use AudioController
This change will move all the audio device methods calls to
AudioController so we can move all the audio related methods calls off the IO
thread. This change will let AudioRendererHost to use the AudioController API.
This involves rewriting the whole AudioRendererHost.
After this patch we can implement proper pause operations that is only possible
if they are hosted on a separated thread due to their blocking nature.
Normal latency mode is fully covered by unit tests, including audio control
operations and data conversation.
Low latency mode using SyncSocket is tested only for stream creation and still
need to handle cases during shutdown when we want SyncSocket to return
immediately.
TEST=unit_tests --gtest_filter=AudioRendererTest.*
BUG=39885
Review URL: http://codereview.chromium.org/2850016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51743 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host/audio_sync_reader.h')
-rw-r--r-- | chrome/browser/renderer_host/audio_sync_reader.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/chrome/browser/renderer_host/audio_sync_reader.h b/chrome/browser/renderer_host/audio_sync_reader.h new file mode 100644 index 0000000..87783cd --- /dev/null +++ b/chrome/browser/renderer_host/audio_sync_reader.h @@ -0,0 +1,54 @@ +// Copyright (c) 2010 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 CHROME_BROWSER_RENDERER_HOST_AUDIO_SYNC_READER_ +#define CHROME_BROWSER_RENDERER_HOST_AUDIO_SYNC_READER_ + +#include "base/file_descriptor_posix.h" +#include "base/process.h" +#include "base/sync_socket.h" +#include "media/audio/audio_controller.h" + +namespace base { + +class SharedMemory; + +} + +// A AudioController::SyncReader implementation using SyncSocket. This is used +// by AudioController to provide a low latency data source for transmitting +// audio packets between the browser process and the renderer process. +class AudioSyncReader : public media::AudioController::SyncReader { + public: + explicit AudioSyncReader(base::SharedMemory* shared_memory); + + virtual ~AudioSyncReader(); + + // media::AudioController::SyncReader implementations. + virtual void UpdatePendingBytes(uint32 bytes); + virtual uint32 Read(void* data, uint32 size); + virtual void Close(); + + bool Init(); + bool PrepareForeignSocketHandle(base::ProcessHandle process_handle, +#if defined(OS_WIN) + base::SyncSocket::Handle* foreign_handle); +#else + base::FileDescriptor* foreign_handle); +#endif + + private: + base::SharedMemory* shared_memory_; + + // A pair of SyncSocket for transmitting audio data. + scoped_ptr<base::SyncSocket> socket_; + + // SyncSocket to be used by the renderer. The reference is released after + // PrepareForeignSocketHandle() is called and ran successfully. + scoped_ptr<base::SyncSocket> foreign_socket_; + + DISALLOW_COPY_AND_ASSIGN(AudioSyncReader); +}; + +#endif // CHROME_BROWSER_RENDERER_HOST_AUDIO_SYNC_READER_ |