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