Index: chrome/browser/renderer_host/audio_renderer_host.h |
=================================================================== |
--- chrome/browser/renderer_host/audio_renderer_host.h (revision 75488) |
+++ chrome/browser/renderer_host/audio_renderer_host.h (working copy) |
@@ -1,223 +1,12 @@ |
// 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. |
-// |
-// AudioRendererHost serves audio related requests from AudioRenderer which |
-// lives inside the render process and provide access to audio hardware. |
-// |
-// This class is owned by BrowserRenderProcessHost, and instantiated on UI |
-// thread, but all other operations and method calls happen on IO thread, so we |
-// need to be extra careful about the lifetime of this object. AudioManager is a |
-// singleton and created in IO thread, audio output streams are also created in |
-// the IO thread, so we need to destroy them also in IO thread. After this class |
-// is created, a task of OnInitialized() is posted on IO thread in which |
-// singleton of AudioManager is created and. |
-// |
-// Here's an example of a typical IPC dialog for audio: |
-// |
-// Renderer AudioRendererHost |
-// | | |
-// | CreateStream > | |
-// | < Created | |
-// | | |
-// | Play > | |
-// | < Playing | time |
-// | | |
-// | < RequestAudioPacket | |
-// | AudioPacketReady > | |
-// | ... | |
-// | < RequestAudioPacket | |
-// | AudioPacketReady > | |
-// | | |
-// | ... | |
-// | < RequestAudioPacket | |
-// | AudioPacketReady > | |
-// | ... | |
-// | Pause > | |
-// | < Paused | |
-// | ... | |
-// | Start > | |
-// | < Started | |
-// | ... | |
-// | Close > | |
-// v v |
-// The above mode of operation uses relatively big buffers and has latencies |
-// of 50 ms or more. There is a second mode of operation which is low latency. |
-// For low latency audio, the picture above is modified by not having the |
-// RequestAudioPacket and the AudioPacketReady messages, instead a SyncSocket |
-// pair is used to signal buffer readiness without having to route messages |
-// using the IO thread. |
- |
#ifndef CHROME_BROWSER_RENDERER_HOST_AUDIO_RENDERER_HOST_H_ |
#define CHROME_BROWSER_RENDERER_HOST_AUDIO_RENDERER_HOST_H_ |
#pragma once |
-#include <map> |
+// TODO(jam): remove this file when all files have been converted. |
+#include "content/browser/renderer_host/audio_renderer_host.h" |
-#include "base/gtest_prod_util.h" |
-#include "base/process.h" |
-#include "base/ref_counted.h" |
-#include "base/scoped_ptr.h" |
-#include "base/shared_memory.h" |
-#include "chrome/browser/browser_message_filter.h" |
-#include "chrome/browser/browser_thread.h" |
-#include "ipc/ipc_message.h" |
-#include "media/audio/audio_io.h" |
-#include "media/audio/audio_output_controller.h" |
-#include "media/audio/simple_sources.h" |
- |
-class AudioManager; |
-struct ViewHostMsg_Audio_CreateStream_Params; |
- |
-class AudioRendererHost : public BrowserMessageFilter, |
- public media::AudioOutputController::EventHandler { |
- public: |
- typedef std::pair<int32, int> AudioEntryId; |
- |
- struct AudioEntry { |
- AudioEntry(); |
- ~AudioEntry(); |
- |
- // The AudioOutputController that manages the audio stream. |
- scoped_refptr<media::AudioOutputController> controller; |
- |
- // Render view ID that requested the audio stream. |
- int32 render_view_id; |
- |
- // The audio stream ID in the render view. |
- int stream_id; |
- |
- // Shared memory for transmission of the audio data. |
- base::SharedMemory shared_memory; |
- |
- // The synchronous reader to be used by the controller. We have the |
- // ownership of the reader. |
- scoped_ptr<media::AudioOutputController::SyncReader> reader; |
- |
- bool pending_buffer_request; |
- |
- // Set to true after we called Close() for the controller. |
- bool pending_close; |
- }; |
- |
- typedef std::map<AudioEntryId, AudioEntry*> AudioEntryMap; |
- |
- // Called from UI thread from the owner of this object. |
- AudioRendererHost(); |
- |
- |
- // BrowserMessageFilter implementation. |
- virtual void OnChannelClosing(); |
- virtual void OnDestruct() const; |
- virtual bool OnMessageReceived(const IPC::Message& message, |
- bool* message_was_ok); |
- |
- ///////////////////////////////////////////////////////////////////////////// |
- // AudioOutputController::EventHandler implementations. |
- virtual void OnCreated(media::AudioOutputController* controller); |
- virtual void OnPlaying(media::AudioOutputController* controller); |
- virtual void OnPaused(media::AudioOutputController* controller); |
- virtual void OnError(media::AudioOutputController* controller, |
- int error_code); |
- virtual void OnMoreData(media::AudioOutputController* controller, |
- AudioBuffersState buffers_state); |
- |
- private: |
- friend class AudioRendererHostTest; |
- friend class BrowserThread; |
- friend class DeleteTask<AudioRendererHost>; |
- friend class MockAudioRendererHost; |
- FRIEND_TEST_ALL_PREFIXES(AudioRendererHostTest, CreateMockStream); |
- FRIEND_TEST_ALL_PREFIXES(AudioRendererHostTest, MockStreamDataConversation); |
- |
- virtual ~AudioRendererHost(); |
- |
- //////////////////////////////////////////////////////////////////////////// |
- // Methods called on IO thread. |
- // Returns true if the message is an audio related message and should be |
- // handled by this class. |
- bool IsAudioRendererHostMessage(const IPC::Message& message); |
- |
- // Audio related IPC message handlers. |
- // Creates an audio output stream with the specified format. If this call is |
- // successful this object would keep an internal entry of the stream for the |
- // required properties. |
- void OnCreateStream(const IPC::Message& msg, int stream_id, |
- const ViewHostMsg_Audio_CreateStream_Params& params, |
- bool low_latency); |
- |
- // Play the audio stream referenced by |stream_id|. |
- void OnPlayStream(const IPC::Message& msg, int stream_id); |
- |
- // Pause the audio stream referenced by |stream_id|. |
- void OnPauseStream(const IPC::Message& msg, int stream_id); |
- |
- // Discard all audio data in stream referenced by |stream_id|. |
- void OnFlushStream(const IPC::Message& msg, int stream_id); |
- |
- // Close the audio stream referenced by |stream_id|. |
- void OnCloseStream(const IPC::Message& msg, int stream_id); |
- |
- // Set the volume of the audio stream referenced by |stream_id|. |
- void OnSetVolume(const IPC::Message& msg, int stream_id, double volume); |
- |
- // Get the volume of the audio stream referenced by |stream_id|. |
- void OnGetVolume(const IPC::Message& msg, int stream_id); |
- |
- // Notify packet has been prepared for the audio stream. |
- void OnNotifyPacketReady(const IPC::Message& msg, int stream_id, |
- uint32 packet_size); |
- |
- // Complete the process of creating an audio stream. This will set up the |
- // shared memory or shared socket in low latency mode. |
- void DoCompleteCreation(media::AudioOutputController* controller); |
- |
- // Send a state change message to the renderer. |
- void DoSendPlayingMessage(media::AudioOutputController* controller); |
- void DoSendPausedMessage(media::AudioOutputController* controller); |
- |
- // Request more data from the renderer. This method is used only in normal |
- // latency mode. |
- void DoRequestMoreData(media::AudioOutputController* controller, |
- AudioBuffersState buffers_state); |
- |
- // Handle error coming from audio stream. |
- void DoHandleError(media::AudioOutputController* controller, int error_code); |
- |
- // Send an error message to the renderer. |
- void SendErrorMessage(int32 render_view_id, int32 stream_id); |
- |
- // Delete all audio entry and all audio streams |
- void DeleteEntries(); |
- |
- // Closes the stream. The stream is then deleted in DeleteEntry() after it |
- // is closed. |
- void CloseAndDeleteStream(AudioEntry* entry); |
- |
- // Called on the audio thread after the audio stream is closed. |
- void OnStreamClosed(AudioEntry* entry); |
- |
- // Delete an audio entry and close the related audio stream. |
- void DeleteEntry(AudioEntry* entry); |
- |
- // Delete audio entry and close the related audio stream due to an error, |
- // and error message is send to the renderer. |
- void DeleteEntryOnError(AudioEntry* entry); |
- |
- // A helper method to look up a AudioEntry with a tuple of render view |
- // id and stream id. Returns NULL if not found. |
- AudioEntry* LookupById(int render_view_id, int stream_id); |
- |
- // Search for a AudioEntry having the reference to |controller|. |
- // This method is used to look up an AudioEntry after a controller |
- // event is received. |
- AudioEntry* LookupByController(media::AudioOutputController* controller); |
- |
- // A map of id to audio sources. |
- AudioEntryMap audio_entries_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AudioRendererHost); |
-}; |
- |
#endif // CHROME_BROWSER_RENDERER_HOST_AUDIO_RENDERER_HOST_H_ |