1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MEDIA_AUDIO_AUDIO_INPUT_IPC_H_ 6 #define MEDIA_AUDIO_AUDIO_INPUT_IPC_H_ 7 8 #include "base/memory/shared_memory.h" 9 #include "base/sync_socket.h" 10 #include "media/audio/audio_parameters.h" 11 #include "media/base/media_export.h" 12 13 namespace media { 14 15 // Contains IPC notifications for the state of the server side 16 // (AudioInputController) audio state changes and when an AudioInputController 17 // has been created. Implemented by AudioInputDevice. 18 class MEDIA_EXPORT AudioInputIPCDelegate { 19 public: 20 // Valid states for the input stream. 21 enum State { 22 kRecording, 23 kStopped, 24 kError, 25 kStateLast = kError 26 }; 27 28 // Called when an AudioInputController has been created. 29 // The shared memory |handle| points to a memory section that's used to 30 // transfer data between the AudioInputDevice and AudioInputController 31 // objects. The implementation of OnStreamCreated takes ownership. 32 // The |socket_handle| is used by the AudioInputController to signal 33 // notifications that more data is available and can optionally provide 34 // parameter changes back. The AudioInputDevice must read from this socket 35 // and process the shared memory whenever data is read from the socket. 36 virtual void OnStreamCreated(base::SharedMemoryHandle handle, 37 base::SyncSocket::Handle socket_handle, 38 int length, 39 int total_segments) = 0; 40 41 // Called when state of an audio stream has changed. 42 virtual void OnStateChanged(State state) = 0; 43 44 // Called when the input stream volume has changed. 45 virtual void OnVolume(double volume) = 0; 46 47 // Called when the AudioInputIPC object is going away and/or when the 48 // IPC channel has been closed and no more IPC requests can be made. 49 // Implementations should delete their owned AudioInputIPC instance 50 // immediately. 51 virtual void OnIPCClosed() = 0; 52 53 protected: 54 virtual ~AudioInputIPCDelegate(); 55 }; 56 57 // Provides IPC functionality for an AudioInputIPCDelegate (e.g., an 58 // AudioInputDevice). The implementation should asynchronously deliver the 59 // messages to an AudioInputController object (or create one in the case of 60 // CreateStream()), that may live in a separate process. 61 class MEDIA_EXPORT AudioInputIPC { 62 public: 63 virtual ~AudioInputIPC(); 64 65 // Sends a request to create an AudioInputController object in the peer 66 // process, and configures it to use the specified audio |params|. The 67 // |total_segments| indidates number of equal-lengthed segments in the shared 68 // memory buffer. Once the stream has been created, the implementation will 69 // notify |delegate| by calling OnStreamCreated(). 70 virtual void CreateStream(AudioInputIPCDelegate* delegate, 71 int session_id, 72 const AudioParameters& params, 73 bool automatic_gain_control, 74 uint32 total_segments) = 0; 75 76 // Corresponds to a call to AudioInputController::Record() on the server side. 77 virtual void RecordStream() = 0; 78 79 // Sets the volume of the audio stream. 80 virtual void SetVolume(double volume) = 0; 81 82 // Closes the audio stream, which should shut down the corresponding 83 // AudioInputController in the peer process. 84 virtual void CloseStream() = 0; 85 }; 86 87 } // namespace media 88 89 #endif // MEDIA_AUDIO_AUDIO_INPUT_IPC_H_ 90