1f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin/* 2f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * Copyright (C) 2011 The Android Open Source Project 3f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 4f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * Licensed under the Apache License, Version 2.0 (the "License"); 5f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * you may not use this file except in compliance with the License. 6f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * You may obtain a copy of the License at 7f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 8f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * http://www.apache.org/licenses/LICENSE-2.0 9f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 10f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * Unless required by applicable law or agreed to in writing, software 11f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * distributed under the License is distributed on an "AS IS" BASIS, 12f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * See the License for the specific language governing permissions and 14f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * limitations under the License. 15f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 16f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 17f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 18f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin#ifndef ANDROID_AUDIO_POLICY_INTERFACE_H 19f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin#define ANDROID_AUDIO_POLICY_INTERFACE_H 20f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 21f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin#include <stdint.h> 22f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin#include <sys/cdefs.h> 23f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin#include <sys/types.h> 24f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 25f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin#include <hardware/hardware.h> 26f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 27aa21172bcd4c332eec78d34ffdafd8cc0178ea95Dima Zavin#include <system/audio.h> 281199865d0cb68750e2b959cb3ed04e1bc0f1c9d1Dima Zavin#include <system/audio_policy.h> 29f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 30f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin__BEGIN_DECLS 31f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 32f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin/** 33f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * The id of this module 34f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 35f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin#define AUDIO_POLICY_HARDWARE_MODULE_ID "audio_policy" 36f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 37f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin/** 38f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * Name of the audio devices to open 39f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 40f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin#define AUDIO_POLICY_INTERFACE "policy" 41f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 42f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin/* ---------------------------------------------------------------------------- */ 43f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 44f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin/* 45f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * The audio_policy and audio_policy_service_ops structs define the 46f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * communication interfaces between the platform specific audio policy manager 47f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * and Android generic audio policy manager. 48f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * The platform specific audio policy manager must implement methods of the 49f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * audio_policy struct. 50f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * This implementation makes use of the audio_policy_service_ops to control 51f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * the activity and configuration of audio input and output streams. 52f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 53f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * The platform specific audio policy manager is in charge of the audio 54f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * routing and volume control policies for a given platform. 55f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * The main roles of this module are: 56f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * - keep track of current system state (removable device connections, phone 57f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * state, user requests...). 58f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * System state changes and user actions are notified to audio policy 59f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * manager with methods of the audio_policy. 60f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 61f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * - process get_output() queries received when AudioTrack objects are 62f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * created: Those queries return a handler on an output that has been 63f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * selected, configured and opened by the audio policy manager and that 64f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * must be used by the AudioTrack when registering to the AudioFlinger 65f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * with the createTrack() method. 66f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * When the AudioTrack object is released, a release_output() query 67f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * is received and the audio policy manager can decide to close or 68f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * reconfigure the output depending on other streams using this output and 69f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * current system state. 70f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 71f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * - similarly process get_input() and release_input() queries received from 72f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * AudioRecord objects and configure audio inputs. 73f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * - process volume control requests: the stream volume is converted from 74f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * an index value (received from UI) to a float value applicable to each 75f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * output as a function of platform specific settings and current output 76f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * route (destination device). It also make sure that streams are not 77f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * muted if not allowed (e.g. camera shutter sound in some countries). 78f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 79f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 80f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin/* XXX: this should be defined OUTSIDE of frameworks/base */ 81f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavinstruct effect_descriptor_s; 82f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 83f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavinstruct audio_policy { 84f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* 85f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * configuration functions 86f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 87f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 88f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* indicate a change in device connection status */ 89f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*set_device_connection_state)(struct audio_policy *pol, 90f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_devices_t device, 91f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_policy_dev_state_t state, 92f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin const char *device_address); 93f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 94ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent /* retrieve a device connection status */ 95f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_policy_dev_state_t (*get_device_connection_state)( 96f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin const struct audio_policy *pol, 97f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_devices_t device, 98f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin const char *device_address); 99f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 100f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* indicate a change in phone state. Valid phones states are defined 101f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * by audio_mode_t */ 1026df641e269639dbb81bb1c19f47d3b9e5e3ff7d7Glenn Kasten void (*set_phone_state)(struct audio_policy *pol, audio_mode_t state); 103f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 104080a80212b6ec954fe8a424d9fb286c5cf1d5021Glenn Kasten /* deprecated, never called (was "indicate a change in ringer mode") */ 105f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin void (*set_ringer_mode)(struct audio_policy *pol, uint32_t mode, 106f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin uint32_t mask); 107f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 108f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* force using a specific device category for the specified usage */ 109f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin void (*set_force_use)(struct audio_policy *pol, 110f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_policy_force_use_t usage, 111f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_policy_forced_cfg_t config); 112f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 113ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent /* retrieve current device category forced for a given usage */ 114f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_policy_forced_cfg_t (*get_force_use)(const struct audio_policy *pol, 115f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_policy_force_use_t usage); 116f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 117f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* if can_mute is true, then audio streams that are marked ENFORCED_AUDIBLE 118f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * can still be muted. */ 119f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin void (*set_can_mute_enforced_audible)(struct audio_policy *pol, 120f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin bool can_mute); 121f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 122f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* check proper initialization */ 123f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*init_check)(const struct audio_policy *pol); 124f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 125f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* 126f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * Audio routing query functions 127f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 128f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 1290cacd8d44b3f6ff6ec947bb6b2db1e382ee73bdbGlenn Kasten /* request an output appropriate for playback of the supplied stream type and 130f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * parameters */ 131f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t (*get_output)(struct audio_policy *pol, 132f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_stream_type_t stream, 133f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin uint32_t samplingRate, 134fe79eb3f06967f863a637e546eb4421d0da2283bGlenn Kasten audio_format_t format, 135a635449697a2df5de98e72cfc24e926b641d5544Glenn Kasten audio_channel_mask_t channelMask, 136f37f187bbac1fd7bf884eb3ea5c47aa78cb68cdcRichard Fitzgerald audio_output_flags_t flags, 137f37f187bbac1fd7bf884eb3ea5c47aa78cb68cdcRichard Fitzgerald const audio_offload_info_t *offloadInfo); 138f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 139f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* indicates to the audio policy manager that the output starts being used 140f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * by corresponding stream. */ 141f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*start_output)(struct audio_policy *pol, 142f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t output, 143f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_stream_type_t stream, 14413091fe19a019b2613a149d63a0e13087973f40eGlenn Kasten audio_session_t session); 145f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 146f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* indicates to the audio policy manager that the output stops being used 147f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * by corresponding stream. */ 148f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*stop_output)(struct audio_policy *pol, 149f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t output, 150f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_stream_type_t stream, 15113091fe19a019b2613a149d63a0e13087973f40eGlenn Kasten audio_session_t session); 152f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 153f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* releases the output. */ 154f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin void (*release_output)(struct audio_policy *pol, audio_io_handle_t output); 155f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 156ae2e42b2447d011bd6cf9d5b4413dd3557de0035Glenn Kasten /* request an input appropriate for record from the supplied device with 157f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * supplied parameters. */ 158ae2e42b2447d011bd6cf9d5b4413dd3557de0035Glenn Kasten audio_io_handle_t (*get_input)(struct audio_policy *pol, audio_source_t inputSource, 159f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin uint32_t samplingRate, 160fe79eb3f06967f863a637e546eb4421d0da2283bGlenn Kasten audio_format_t format, 161a635449697a2df5de98e72cfc24e926b641d5544Glenn Kasten audio_channel_mask_t channelMask, 162f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_in_acoustics_t acoustics); 163f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 164f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* indicates to the audio policy manager that the input starts being used */ 165f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*start_input)(struct audio_policy *pol, audio_io_handle_t input); 166f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 167f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* indicates to the audio policy manager that the input stops being used. */ 168f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*stop_input)(struct audio_policy *pol, audio_io_handle_t input); 169f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 170f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* releases the input. */ 171f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin void (*release_input)(struct audio_policy *pol, audio_io_handle_t input); 172f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 173f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* 174f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * volume control functions 175f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 176f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 177f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* initialises stream volume conversion parameters by specifying volume 178ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent * index range. The index range for each stream is defined by AudioService. */ 179f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin void (*init_stream_volume)(struct audio_policy *pol, 180f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_stream_type_t stream, 181f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int index_min, 182f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int index_max); 183f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 184f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* sets the new stream volume at a level corresponding to the supplied 185ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent * index. The index is within the range specified by init_stream_volume() */ 186f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*set_stream_volume_index)(struct audio_policy *pol, 187f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_stream_type_t stream, 188f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int index); 189f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 190ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent /* retrieve current volume index for the specified stream */ 191f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*get_stream_volume_index)(const struct audio_policy *pol, 192f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_stream_type_t stream, 193f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int *index); 194f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 195ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent /* sets the new stream volume at a level corresponding to the supplied 196ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent * index for the specified device. 197ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent * The index is within the range specified by init_stream_volume() */ 198ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent int (*set_stream_volume_index_for_device)(struct audio_policy *pol, 199ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent audio_stream_type_t stream, 200ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent int index, 201ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent audio_devices_t device); 202ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent 203ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent /* retrieve current volume index for the specified stream for the specified device */ 204ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent int (*get_stream_volume_index_for_device)(const struct audio_policy *pol, 205ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent audio_stream_type_t stream, 206ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent int *index, 207ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent audio_devices_t device); 208ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent 209f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* return the strategy corresponding to a given stream type */ 210f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin uint32_t (*get_strategy_for_stream)(const struct audio_policy *pol, 211f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_stream_type_t stream); 212f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 213f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* return the enabled output devices for the given stream type */ 21483c62ce4e319a11d14a27c6368811f9efc1e8c5aEric Laurent audio_devices_t (*get_devices_for_stream)(const struct audio_policy *pol, 215f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_stream_type_t stream); 216f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 217f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* Audio effect management */ 218f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t (*get_output_for_effect)(struct audio_policy *pol, 21948915acb392773c1fcb86e2711eab468410a0baaGlenn Kasten const struct effect_descriptor_s *desc); 220f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 221f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*register_effect)(struct audio_policy *pol, 22248915acb392773c1fcb86e2711eab468410a0baaGlenn Kasten const struct effect_descriptor_s *desc, 223f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t output, 224f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin uint32_t strategy, 22513091fe19a019b2613a149d63a0e13087973f40eGlenn Kasten audio_session_t session, 226f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int id); 227f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 228f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*unregister_effect)(struct audio_policy *pol, int id); 229f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 23078d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent int (*set_effect_enabled)(struct audio_policy *pol, int id, bool enabled); 23178d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent 232f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin bool (*is_stream_active)(const struct audio_policy *pol, 2332661f346abc58ddc238b68ad7d1d0a29642dd8b3Jean-Michel Trivi audio_stream_type_t stream, 2342661f346abc58ddc238b68ad7d1d0a29642dd8b3Jean-Michel Trivi uint32_t in_past_ms); 2352661f346abc58ddc238b68ad7d1d0a29642dd8b3Jean-Michel Trivi 2362661f346abc58ddc238b68ad7d1d0a29642dd8b3Jean-Michel Trivi bool (*is_stream_active_remotely)(const struct audio_policy *pol, 2372661f346abc58ddc238b68ad7d1d0a29642dd8b3Jean-Michel Trivi audio_stream_type_t stream, 2382661f346abc58ddc238b68ad7d1d0a29642dd8b3Jean-Michel Trivi uint32_t in_past_ms); 239f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 24020c7f50cd5d60ee7d76f2f502866187992e7675bJean-Michel Trivi bool (*is_source_active)(const struct audio_policy *pol, 2412661f346abc58ddc238b68ad7d1d0a29642dd8b3Jean-Michel Trivi audio_source_t source); 24220c7f50cd5d60ee7d76f2f502866187992e7675bJean-Michel Trivi 243f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* dump state */ 244f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*dump)(const struct audio_policy *pol, int fd); 245f37f187bbac1fd7bf884eb3ea5c47aa78cb68cdcRichard Fitzgerald 246f37f187bbac1fd7bf884eb3ea5c47aa78cb68cdcRichard Fitzgerald /* check if offload is possible for given sample rate, bitrate, duration, ... */ 247f37f187bbac1fd7bf884eb3ea5c47aa78cb68cdcRichard Fitzgerald bool (*is_offload_supported)(const struct audio_policy *pol, 248f37f187bbac1fd7bf884eb3ea5c47aa78cb68cdcRichard Fitzgerald const audio_offload_info_t *info); 249f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin}; 250f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 251c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent 252f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavinstruct audio_policy_service_ops { 253f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* 254f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * Audio output Control functions 255f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 256f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 257f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* Opens an audio output with the requested parameters. 258f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 259f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * The parameter values can indicate to use the default values in case the 260f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * audio policy manager has no specific requirements for the output being 261f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * opened. 262f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 263f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * When the function returns, the parameter values reflect the actual 264f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * values used by the audio hardware output stream. 265f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 266f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * The audio policy manager can check if the proposed parameters are 267f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * suitable or not and act accordingly. 268f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 269f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t (*open_output)(void *service, 270c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_devices_t *pDevices, 271f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin uint32_t *pSamplingRate, 272fe79eb3f06967f863a637e546eb4421d0da2283bGlenn Kasten audio_format_t *pFormat, 273c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_channel_mask_t *pChannelMask, 274f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin uint32_t *pLatencyMs, 275da4b0b26d170971448fdb04817b308900b5a6dd8Eric Laurent audio_output_flags_t flags); 276f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 277f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* creates a special output that is duplicated to the two outputs passed as 278f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * arguments. The duplication is performed by 279f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * a special mixer thread in the AudioFlinger. 280f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 281f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t (*open_duplicate_output)(void *service, 282f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t output1, 283f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t output2); 284f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 285f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* closes the output stream */ 286f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*close_output)(void *service, audio_io_handle_t output); 287f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 288f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* suspends the output. 289f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 290f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * When an output is suspended, the corresponding audio hardware output 291f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * stream is placed in standby and the AudioTracks attached to the mixer 292f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * thread are still processed but the output mix is discarded. 293f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 294f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*suspend_output)(void *service, audio_io_handle_t output); 295f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 296f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* restores a suspended output. */ 297f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*restore_output)(void *service, audio_io_handle_t output); 298f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 299f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* */ 300f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* Audio input Control functions */ 301f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* */ 302f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 303e57a2d2ec601c54852a1cf55c11186bbf5c6c8f5Glenn Kasten /* opens an audio input 304e57a2d2ec601c54852a1cf55c11186bbf5c6c8f5Glenn Kasten * deprecated - new implementations should use open_input_on_module, 305e57a2d2ec601c54852a1cf55c11186bbf5c6c8f5Glenn Kasten * and the acoustics parameter is ignored 306e57a2d2ec601c54852a1cf55c11186bbf5c6c8f5Glenn Kasten */ 307f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t (*open_input)(void *service, 308c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_devices_t *pDevices, 309f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin uint32_t *pSamplingRate, 310fe79eb3f06967f863a637e546eb4421d0da2283bGlenn Kasten audio_format_t *pFormat, 311c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_channel_mask_t *pChannelMask, 312114c2fd2d3d953763edb4372324c993bd66cbe91Glenn Kasten audio_in_acoustics_t acoustics); 313f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 314f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* closes an audio input */ 315f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*close_input)(void *service, audio_io_handle_t input); 316f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 317f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* */ 318f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* misc control functions */ 319f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* */ 320f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 321f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* set a stream volume for a particular output. 322f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 323f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * For the same user setting, a given stream type can have different 324f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * volumes for each output (destination device) it is attached to. 325f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 326f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*set_stream_volume)(void *service, 327f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_stream_type_t stream, 328f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin float volume, 329f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t output, 330f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int delay_ms); 331f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 3323f56a10cc39a46a9d17e59b64f7f744feba9d8c1Glenn Kasten /* invalidate a stream type, causing a reroute to an unspecified new output */ 3333f56a10cc39a46a9d17e59b64f7f744feba9d8c1Glenn Kasten int (*invalidate_stream)(void *service, 3343f56a10cc39a46a9d17e59b64f7f744feba9d8c1Glenn Kasten audio_stream_type_t stream); 335f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 336f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* function enabling to send proprietary informations directly from audio 337f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * policy manager to audio hardware interface. */ 338f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin void (*set_parameters)(void *service, 339f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t io_handle, 340f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin const char *kv_pairs, 341f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int delay_ms); 342f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 343f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* function enabling to receive proprietary informations directly from 344f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * audio hardware interface to audio policy manager. 345f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * 346f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * Returns a pointer to a heap allocated string. The caller is responsible 3470cacd8d44b3f6ff6ec947bb6b2db1e382ee73bdbGlenn Kasten * for freeing the memory for it using free(). 348f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 349f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 350f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin char * (*get_parameters)(void *service, audio_io_handle_t io_handle, 351f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin const char *keys); 352f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 353f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* request the playback of a tone on the specified stream. 354f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * used for instance to replace notification sounds when playing over a 355f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * telephony device during a phone call. 356f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 357f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*start_tone)(void *service, 358f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_policy_tone_t tone, 359f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_stream_type_t stream); 360f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 361f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*stop_tone)(void *service); 362f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 363f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* set down link audio volume. */ 364f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*set_voice_volume)(void *service, 365f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin float volume, 366f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int delay_ms); 367f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 368f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin /* move effect to the specified output */ 369f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*move_effects)(void *service, 37013091fe19a019b2613a149d63a0e13087973f40eGlenn Kasten audio_session_t session, 371f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t src_output, 372f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin audio_io_handle_t dst_output); 373c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent 374c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent /* loads an audio hw module. 375c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent * 376c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent * The module name passed is the base name of the HW module library, e.g "primary" or "a2dp". 377c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent * The function returns a handle on the module that will be used to specify a particular 378c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent * module when calling open_output_on_module() or open_input_on_module() 379c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent */ 380c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_module_handle_t (*load_hw_module)(void *service, 381c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent const char *name); 382c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent 383c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent /* Opens an audio output on a particular HW module. 384c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent * 385c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent * Same as open_output() but specifying a specific HW module on which the output must be opened. 386c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent */ 387c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_io_handle_t (*open_output_on_module)(void *service, 388c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_module_handle_t module, 389c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_devices_t *pDevices, 390c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent uint32_t *pSamplingRate, 391c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_format_t *pFormat, 392c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_channel_mask_t *pChannelMask, 393c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent uint32_t *pLatencyMs, 394f37f187bbac1fd7bf884eb3ea5c47aa78cb68cdcRichard Fitzgerald audio_output_flags_t flags, 395f37f187bbac1fd7bf884eb3ea5c47aa78cb68cdcRichard Fitzgerald const audio_offload_info_t *offloadInfo); 396c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent 397c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent /* Opens an audio input on a particular HW module. 398c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent * 399c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent * Same as open_input() but specifying a specific HW module on which the input must be opened. 400c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent * Also removed deprecated acoustics parameter 401c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent */ 402c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_io_handle_t (*open_input_on_module)(void *service, 403c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_module_handle_t module, 404c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_devices_t *pDevices, 405c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent uint32_t *pSamplingRate, 406c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_format_t *pFormat, 407c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent audio_channel_mask_t *pChannelMask); 408c65a2fe3925f46b4d4301cef97b308dbc3e22da9Eric Laurent 409f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin}; 410f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 411f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin/**********************************************************************/ 412f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 413f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin/** 414f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM 415f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * and the fields of this data structure must begin with hw_module_t 416f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin * followed by module specific information. 417f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin */ 418f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavintypedef struct audio_policy_module { 419f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin struct hw_module_t common; 420f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin} audio_policy_module_t; 421f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 422f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavinstruct audio_policy_device { 42384d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles /** 42484d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles * Common methods of the audio policy device. This *must* be the first member of 42584d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles * audio_policy_device as users of this structure will cast a hw_device_t to 42684d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles * audio_policy_device pointer in contexts where it's known the hw_device_t references an 42784d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles * audio_policy_device. 42884d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles */ 429f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin struct hw_device_t common; 430f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 431f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*create_audio_policy)(const struct audio_policy_device *device, 432f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin struct audio_policy_service_ops *aps_ops, 433f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin void *service, 434f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin struct audio_policy **ap); 435f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 436f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin int (*destroy_audio_policy)(const struct audio_policy_device *device, 437f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin struct audio_policy *ap); 438f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin}; 439f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 440f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin/** convenience API for opening and closing a supported device */ 441f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 442f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavinstatic inline int audio_policy_dev_open(const hw_module_t* module, 443f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin struct audio_policy_device** device) 444f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin{ 445f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin return module->methods->open(module, AUDIO_POLICY_INTERFACE, 446f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin (hw_device_t**)device); 447f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin} 448f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 449f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavinstatic inline int audio_policy_dev_close(struct audio_policy_device* device) 450f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin{ 451f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin return device->common.close(&device->common); 452f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin} 453f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 454f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 455f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin__END_DECLS 456f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin 457f1504dbca386fc454b8ded7669012f3d4d27eab7Dima Zavin#endif // ANDROID_AUDIO_POLICY_INTERFACE_H 458