15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// IPC messages for the audio. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Multiply-included message file, hence no include guard. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/shared_memory.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sync_socket.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/media/media_param_traits.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message_macros.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/audio_buffers_state.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/audio_input_ipc.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/audio_output_ipc.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/audio_parameters.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef IPC_MESSAGE_EXPORT 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPC_MESSAGE_EXPORT CONTENT_EXPORT 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPC_MESSAGE_START AudioMsgStart 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IPC_ENUM_TRAITS_MAX_VALUE(media::AudioInputIPCDelegate::State, 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) media::AudioInputIPCDelegate::kStateLast) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IPC_ENUM_TRAITS_MAX_VALUE(media::AudioOutputIPCDelegate::State, 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) media::AudioOutputIPCDelegate::kStateLast) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IPC_STRUCT_BEGIN(AudioInputHostMsg_CreateStream_Config) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_STRUCT_MEMBER(media::AudioParameters, params) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_STRUCT_MEMBER(bool, automatic_gain_control) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_STRUCT_MEMBER(uint32, shared_memory_count) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IPC_STRUCT_END() 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Messages sent from the browser to the renderer. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tell the renderer process that an audio stream has been created. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The renderer process is given a shared memory handle for the audio data 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// buffer it shares with the browser process. It is also given a SyncSocket that 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// it uses to communicate with the browser process about the state of the 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// buffered audio data. 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIPC_MESSAGE_CONTROL4( 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AudioMsg_NotifyStreamCreated, 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int /* stream id */, 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::SharedMemoryHandle /* handle */, 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::SyncSocket::TransitDescriptor /* socket descriptor */, 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 /* length */) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tell the renderer process that an audio input stream has been created. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The renderer process would be given a SyncSocket that it should read 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// from from then on. It is also given number of segments in shared memory. 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIPC_MESSAGE_CONTROL5( 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AudioInputMsg_NotifyStreamCreated, 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int /* stream id */, 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::SharedMemoryHandle /* handle */, 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::SyncSocket::TransitDescriptor /* socket descriptor */, 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 /* length */, 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 /* segment count */) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Notification message sent from AudioRendererHost to renderer after an output 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// device change has occurred. 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IPC_MESSAGE_CONTROL3(AudioMsg_NotifyDeviceChanged, 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int /* stream_id */, 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int /* new_buffer_size */, 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int /* new_sample_rate */) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Notification message sent from AudioRendererHost to renderer for state 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// update after the renderer has requested a Create/Start/Close. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL2(AudioMsg_NotifyStreamStateChanged, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream id */, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) media::AudioOutputIPCDelegate::State /* new state */) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Notification message sent from browser to renderer for state update. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL2(AudioInputMsg_NotifyStreamStateChanged, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream id */, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) media::AudioInputIPCDelegate::State /* new state */) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL2(AudioInputMsg_NotifyStreamVolume, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream id */, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double /* volume */) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Messages sent from the renderer to the browser. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Request that is sent to the browser for creating an audio output stream. 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |render_view_id| is the routing ID for the render view producing the audio 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// data. 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IPC_MESSAGE_CONTROL5(AudioHostMsg_CreateStream, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream_id */, 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int /* render_view_id */, 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int /* render_frame_id */, 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int /* session_id */, 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media::AudioParameters /* params */) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Request that is sent to the browser for creating an audio input stream. 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |render_view_id| is the routing ID for the render view consuming the audio 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// data. 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IPC_MESSAGE_CONTROL4(AudioInputHostMsg_CreateStream, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream_id */, 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int /* render_view_id */, 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int /* session_id */, 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AudioInputHostMsg_CreateStream_Config) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Start buffering and play the audio stream specified by stream_id. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL1(AudioHostMsg_PlayStream, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream_id */) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Start recording the audio input stream specified by stream_id. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL1(AudioInputHostMsg_RecordStream, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream_id */) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Pause the audio stream specified by stream_id. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL1(AudioHostMsg_PauseStream, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream_id */) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Close an audio stream specified by stream_id. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL1(AudioHostMsg_CloseStream, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream_id */) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Close an audio input stream specified by stream_id. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL1(AudioInputHostMsg_CloseStream, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream_id */) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set audio volume of the stream specified by stream_id. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(hclam): change this to vector if we have channel numbers other than 2. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL2(AudioHostMsg_SetVolume, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream_id */, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double /* volume */) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set audio volume of the input stream specified by stream_id. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_MESSAGE_CONTROL2(AudioInputHostMsg_SetVolume, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int /* stream_id */, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double /* volume */) 133