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

Unified Diff: media/audio/audio_input_device.h

Issue 12383016: Merge AssociateStreamWithProducer message into CreateStream message for both audio output and input. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 10 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: media/audio/audio_input_device.h
diff --git a/media/audio/audio_input_device.h b/media/audio/audio_input_device.h
index edefdf16962f225ab395c777779cf235d3885442..02bd14c7fc424a835ed0f7ccf8405953f3731837 100644
--- a/media/audio/audio_input_device.h
+++ b/media/audio/audio_input_device.h
@@ -11,8 +11,8 @@
// ^ ^
// | |
// v IPC v
-// AudioInputRendererHost <---------> AudioInputIPCDelegate
-// ^ (impl in AudioInputMessageFilter)
+// AudioInputRendererHost <-----------> AudioInputIPC
+// ^ (AudioInputMessageFilter)
// |
// v
// AudioInputDeviceManager
@@ -62,7 +62,6 @@
#define MEDIA_AUDIO_AUDIO_INPUT_DEVICE_H_
#include <string>
-#include <vector>
#include "base/basictypes.h"
#include "base/compiler_specific.h"
@@ -79,6 +78,7 @@ namespace media {
// TODO(henrika): This class is based on the AudioOutputDevice class and it has
// many components in common. Investigate potential for re-factoring.
+// See http://crbug.com/179597.
// 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.
@@ -87,7 +87,8 @@ class MEDIA_EXPORT AudioInputDevice
NON_EXPORTED_BASE(public AudioInputIPCDelegate),
NON_EXPORTED_BASE(public ScopedLoopObserver) {
public:
- AudioInputDevice(AudioInputIPC* ipc,
+ // NOTE: Clients must call Initialize() before using.
+ AudioInputDevice(scoped_ptr<AudioInputIPC> ipc,
const scoped_refptr<base::MessageLoopProxy>& io_loop);
// AudioCapturerSource implementation.
@@ -101,6 +102,9 @@ class MEDIA_EXPORT AudioInputDevice
virtual void SetAutomaticGainControl(bool enabled) OVERRIDE;
protected:
+ friend class base::RefCountedThreadSafe<AudioInputDevice>;
+ virtual ~AudioInputDevice();
+
// Methods called on IO thread ----------------------------------------------
// AudioInputIPCDelegate implementation.
virtual void OnStreamCreated(base::SharedMemoryHandle handle,
@@ -112,17 +116,22 @@ class MEDIA_EXPORT AudioInputDevice
virtual void OnDeviceReady(const std::string& device_id) OVERRIDE;
virtual void OnIPCClosed() OVERRIDE;
- friend class base::RefCountedThreadSafe<AudioInputDevice>;
- virtual ~AudioInputDevice();
-
private:
+ // Note: The ordering of members in this enum is critical to correct behavior!
palmer 2013/03/05 21:09:32 Maybe therefore assign them explicit values (IPC_C
miu 2013/03/06 22:36:52 C++ spec requires enum values assigned as 0, 1, 2,
+ enum State {
+ IPC_CLOSED, // No more IPCs can take place.
+ IDLE, // Not started.
+ STARTING_DEVICE, // Waiting for OnDeviceReady() to be called back.
+ CREATING_STREAM, // Waiting for OnStreamCreated() to be called back.
+ RECORDING, // Receiving audio data.
+ };
+
// 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 StartUpOnIOThread();
void ShutDownOnIOThread();
void SetVolumeOnIOThread(double volume);
void SetAutomaticGainControlOnIOThread(bool enabled);
@@ -136,19 +145,19 @@ class MEDIA_EXPORT AudioInputDevice
CaptureCallback* callback_;
CaptureEventHandler* event_handler_;
- AudioInputIPC* ipc_;
+ // A pointer to the IPC layer that takes care of sending requests over to
+ // the AudioInputRendererHost. Only valid when state_ != IPC_CLOSED and must
+ // only be accessed on the IO thread.
+ scoped_ptr<AudioInputIPC> ipc_;
- // Our stream ID on the message filter. Only modified on the IO thread.
- int stream_id_;
+ // Current state (must only be accessed from the IO thread). See comments for
+ // State enum above.
+ State state_;
// 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_;
@@ -162,6 +171,14 @@ class MEDIA_EXPORT AudioInputDevice
AudioDeviceThread audio_thread_;
scoped_ptr<AudioInputDevice::AudioThreadCallback> audio_callback_;
+ // Temporary hack to ignore OnStreamCreated() due to the user calling Stop()
+ // so we don't start the audio thread pointing to a potentially freed
+ // |callback_|.
+ //
+ // TODO(miu): Replace this by changing AudioCapturerSource to accept the
+ // callback via Start(). See http://crbug.com/151051 for details.
+ bool stopping_hack_;
+
DISALLOW_IMPLICIT_CONSTRUCTORS(AudioInputDevice);
};

Powered by Google App Engine
This is Rietveld 408576698