Home | History | Annotate | Download | only in media
      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 // IPC messages for the audio.
      6 // Multiply-included message file, hence no include guard.
      7 
      8 #include "base/basictypes.h"
      9 #include "base/memory/shared_memory.h"
     10 #include "base/sync_socket.h"
     11 #include "content/common/content_export.h"
     12 #include "content/common/media/media_param_traits.h"
     13 #include "ipc/ipc_message_macros.h"
     14 #include "media/audio/audio_buffers_state.h"
     15 #include "media/audio/audio_input_ipc.h"
     16 #include "media/audio/audio_output_ipc.h"
     17 #include "media/audio/audio_parameters.h"
     18 
     19 #undef IPC_MESSAGE_EXPORT
     20 #define IPC_MESSAGE_EXPORT CONTENT_EXPORT
     21 #define IPC_MESSAGE_START AudioMsgStart
     22 
     23 IPC_ENUM_TRAITS_MAX_VALUE(media::AudioInputIPCDelegate::State,
     24                           media::AudioInputIPCDelegate::kStateLast)
     25 
     26 IPC_ENUM_TRAITS_MAX_VALUE(media::AudioOutputIPCDelegate::State,
     27                           media::AudioOutputIPCDelegate::kStateLast)
     28 
     29 IPC_STRUCT_BEGIN(AudioInputHostMsg_CreateStream_Config)
     30   IPC_STRUCT_MEMBER(media::AudioParameters, params)
     31   IPC_STRUCT_MEMBER(bool, automatic_gain_control)
     32   IPC_STRUCT_MEMBER(uint32, shared_memory_count)
     33 IPC_STRUCT_END()
     34 
     35 // Messages sent from the browser to the renderer.
     36 
     37 // Tell the renderer process that an audio stream has been created.
     38 // The renderer process is given a shared memory handle for the audio data
     39 // buffer it shares with the browser process. It is also given a SyncSocket that
     40 // it uses to communicate with the browser process about the state of the
     41 // buffered audio data.
     42 #if defined(OS_WIN)
     43 IPC_MESSAGE_CONTROL4(AudioMsg_NotifyStreamCreated,
     44                      int /* stream id */,
     45                      base::SharedMemoryHandle /* handle */,
     46                      base::SyncSocket::Handle /* socket handle */,
     47                      uint32 /* length */)
     48 #else
     49 IPC_MESSAGE_CONTROL4(AudioMsg_NotifyStreamCreated,
     50                      int /* stream id */,
     51                      base::SharedMemoryHandle /* handle */,
     52                      base::FileDescriptor /* socket handle */,
     53                      uint32 /* length */)
     54 #endif
     55 
     56 // Tell the renderer process that an audio input stream has been created.
     57 // The renderer process would be given a SyncSocket that it should read
     58 // from from then on. It is also given number of segments in shared memory.
     59 #if defined(OS_WIN)
     60 IPC_MESSAGE_CONTROL5(AudioInputMsg_NotifyStreamCreated,
     61                      int /* stream id */,
     62                      base::SharedMemoryHandle /* handle */,
     63                      base::SyncSocket::Handle /* socket handle */,
     64                      uint32 /* length */,
     65                      uint32 /* segment count */)
     66 #else
     67 IPC_MESSAGE_CONTROL5(AudioInputMsg_NotifyStreamCreated,
     68                      int /* stream id */,
     69                      base::SharedMemoryHandle /* handle */,
     70                      base::FileDescriptor /* socket handle */,
     71                      uint32 /* length */,
     72                      uint32 /* segment count */)
     73 #endif
     74 
     75 // Notification message sent from AudioRendererHost to renderer after an output
     76 // device change has occurred.
     77 IPC_MESSAGE_CONTROL3(AudioMsg_NotifyDeviceChanged,
     78                      int /* stream_id */,
     79                      int /* new_buffer_size */,
     80                      int /* new_sample_rate */)
     81 
     82 // Notification message sent from AudioRendererHost to renderer for state
     83 // update after the renderer has requested a Create/Start/Close.
     84 IPC_MESSAGE_CONTROL2(AudioMsg_NotifyStreamStateChanged,
     85                      int /* stream id */,
     86                      media::AudioOutputIPCDelegate::State /* new state */)
     87 
     88 // Notification message sent from browser to renderer for state update.
     89 IPC_MESSAGE_CONTROL2(AudioInputMsg_NotifyStreamStateChanged,
     90                      int /* stream id */,
     91                      media::AudioInputIPCDelegate::State /* new state */)
     92 
     93 IPC_MESSAGE_CONTROL2(AudioInputMsg_NotifyStreamVolume,
     94                      int /* stream id */,
     95                      double /* volume */)
     96 
     97 // Messages sent from the renderer to the browser.
     98 
     99 // Request that is sent to the browser for creating an audio output stream.
    100 // |render_view_id| is the routing ID for the render view producing the audio
    101 // data.
    102 IPC_MESSAGE_CONTROL5(AudioHostMsg_CreateStream,
    103                      int /* stream_id */,
    104                      int /* render_view_id */,
    105                      int /* render_frame_id */,
    106                      int /* session_id */,
    107                      media::AudioParameters /* params */)
    108 
    109 // Request that is sent to the browser for creating an audio input stream.
    110 // |render_view_id| is the routing ID for the render view consuming the audio
    111 // data.
    112 IPC_MESSAGE_CONTROL4(AudioInputHostMsg_CreateStream,
    113                      int /* stream_id */,
    114                      int /* render_view_id */,
    115                      int /* session_id */,
    116                      AudioInputHostMsg_CreateStream_Config)
    117 
    118 // Start buffering and play the audio stream specified by stream_id.
    119 IPC_MESSAGE_CONTROL1(AudioHostMsg_PlayStream,
    120                      int /* stream_id */)
    121 
    122 // Start recording the audio input stream specified by stream_id.
    123 IPC_MESSAGE_CONTROL1(AudioInputHostMsg_RecordStream,
    124                      int /* stream_id */)
    125 
    126 // Pause the audio stream specified by stream_id.
    127 IPC_MESSAGE_CONTROL1(AudioHostMsg_PauseStream,
    128                      int /* stream_id */)
    129 
    130 // Close an audio stream specified by stream_id.
    131 IPC_MESSAGE_CONTROL1(AudioHostMsg_CloseStream,
    132                      int /* stream_id */)
    133 
    134 // Close an audio input stream specified by stream_id.
    135 IPC_MESSAGE_CONTROL1(AudioInputHostMsg_CloseStream,
    136                      int /* stream_id */)
    137 
    138 // Set audio volume of the stream specified by stream_id.
    139 // TODO(hclam): change this to vector if we have channel numbers other than 2.
    140 IPC_MESSAGE_CONTROL2(AudioHostMsg_SetVolume,
    141                      int /* stream_id */,
    142                      double /* volume */)
    143 
    144 // Set audio volume of the input stream specified by stream_id.
    145 IPC_MESSAGE_CONTROL2(AudioInputHostMsg_SetVolume,
    146                      int /* stream_id */,
    147                      double /* volume */)
    148