AudioPolicyService.h revision fce7a473248381cc83a01855f92581077d3c9ee2
165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian/* 265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Copyright (C) 2009 The Android Open Source Project 365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * you may not use this file except in compliance with the License. 665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * You may obtain a copy of the License at 765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * 1065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Unless required by applicable law or agreed to in writing, software 1165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 1265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * See the License for the specific language governing permissions and 1465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * limitations under the License. 1565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */ 1665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 1765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#ifndef ANDROID_AUDIOPOLICYSERVICE_H 1865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#define ANDROID_AUDIOPOLICYSERVICE_H 1965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 2065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/IAudioPolicyService.h> 2165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/ToneGenerator.h> 2265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <utils/Vector.h> 23d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten#include <binder/BinderService.h> 2465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 25fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin#include <hardware/audio.h> 26fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin#include <hardware/audio_policy.h> 27fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin#include <hardware/audio_policy_hal.h> 28fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin 2965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopiannamespace android { 3065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 3165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianclass String8; 3265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 3365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian// ---------------------------------------------------------------------------- 3465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 35d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kastenclass AudioPolicyService : 36d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten public BinderService<AudioPolicyService>, 37d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten public BnAudioPolicyService, 38fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin// public AudioPolicyClientInterface, 39de070137f11d346fba77605bd76a44c040a618fcEric Laurent public IBinder::DeathRecipient 4065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian{ 41d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten friend class BinderService<AudioPolicyService>; 4265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 4365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianpublic: 44d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten // for BinderService 45d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten static const char *getServiceName() { return "media.audio_policy"; } 4665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 4765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t dump(int fd, const Vector<String16>& args); 4865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 4965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // 5065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // BnAudioPolicyService (see AudioPolicyInterface for method descriptions) 5165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // 5265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 53fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual status_t setDeviceConnectionState(audio_devices_t device, 54fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin audio_policy_dev_state_t state, 5565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian const char *device_address); 56fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual audio_policy_dev_state_t getDeviceConnectionState( 57fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin audio_devices_t device, 58de070137f11d346fba77605bd76a44c040a618fcEric Laurent const char *device_address); 5965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t setPhoneState(int state); 6065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t setRingerMode(uint32_t mode, uint32_t mask); 61fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config); 62fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage); 63fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual audio_io_handle_t getOutput(audio_stream_type_t stream, 6465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t samplingRate = 0, 65fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin uint32_t format = AUDIO_FORMAT_DEFAULT, 6665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t channels = 0, 67fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin audio_policy_output_flags_t flags = 68fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin AUDIO_POLICY_OUTPUT_FLAG_INDIRECT); 69de070137f11d346fba77605bd76a44c040a618fcEric Laurent virtual status_t startOutput(audio_io_handle_t output, 70fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin audio_stream_type_t stream, 71de070137f11d346fba77605bd76a44c040a618fcEric Laurent int session = 0); 72de070137f11d346fba77605bd76a44c040a618fcEric Laurent virtual status_t stopOutput(audio_io_handle_t output, 73fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin audio_stream_type_t stream, 74de070137f11d346fba77605bd76a44c040a618fcEric Laurent int session = 0); 7565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void releaseOutput(audio_io_handle_t output); 7665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual audio_io_handle_t getInput(int inputSource, 7765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t samplingRate = 0, 78fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin uint32_t format = AUDIO_FORMAT_DEFAULT, 7965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t channels = 0, 80fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin audio_in_acoustics_t acoustics = 81fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin (audio_in_acoustics_t)0); 8265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t startInput(audio_io_handle_t input); 8365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t stopInput(audio_io_handle_t input); 8465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void releaseInput(audio_io_handle_t input); 85fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual status_t initStreamVolume(audio_stream_type_t stream, 8665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int indexMin, 8765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int indexMax); 88fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual status_t setStreamVolumeIndex(audio_stream_type_t stream, int index); 89fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual status_t getStreamVolumeIndex(audio_stream_type_t stream, int *index); 9065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 91fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual uint32_t getStrategyForStream(audio_stream_type_t stream); 92fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual uint32_t getDevicesForStream(audio_stream_type_t stream); 93de070137f11d346fba77605bd76a44c040a618fcEric Laurent 94de070137f11d346fba77605bd76a44c040a618fcEric Laurent virtual audio_io_handle_t getOutputForEffect(effect_descriptor_t *desc); 95de070137f11d346fba77605bd76a44c040a618fcEric Laurent virtual status_t registerEffect(effect_descriptor_t *desc, 96de070137f11d346fba77605bd76a44c040a618fcEric Laurent audio_io_handle_t output, 97de070137f11d346fba77605bd76a44c040a618fcEric Laurent uint32_t strategy, 98de070137f11d346fba77605bd76a44c040a618fcEric Laurent int session, 99de070137f11d346fba77605bd76a44c040a618fcEric Laurent int id); 100de070137f11d346fba77605bd76a44c040a618fcEric Laurent virtual status_t unregisterEffect(int id); 101eda6c364c253ba97ee45a3adeb8c2b45db1f81dbEric Laurent virtual bool isStreamActive(int stream, uint32_t inPastMs = 0) const; 102de070137f11d346fba77605bd76a44c040a618fcEric Laurent 10365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t onTransact( 10465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t code, 10565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian const Parcel& data, 10665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian Parcel* reply, 10765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t flags); 10865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 10965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // IBinder::DeathRecipient 11065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void binderDied(const wp<IBinder>& who); 11165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 11265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // 113fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin // Helpers for the struct audio_policy_service_ops implementation. 114fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin // This is used by the audio policy manager for certain operations that 115fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin // are implemented by the policy service. 11665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // 117fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual void setParameters(audio_io_handle_t ioHandle, 118fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin const char *keyValuePairs, 119fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin int delayMs); 120fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin 121fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual status_t setStreamVolume(audio_stream_type_t stream, 122de070137f11d346fba77605bd76a44c040a618fcEric Laurent float volume, 123de070137f11d346fba77605bd76a44c040a618fcEric Laurent audio_io_handle_t output, 124de070137f11d346fba77605bd76a44c040a618fcEric Laurent int delayMs = 0); 125fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin virtual status_t startTone(audio_policy_tone_t tone, audio_stream_type_t stream); 12665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t stopTone(); 12765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t setVoiceVolume(float volume, int delayMs = 0); 12865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 12965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianprivate: 13065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioPolicyService(); 13165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual ~AudioPolicyService(); 13265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 13365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t dumpInternals(int fd); 13465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 13565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // Thread used for tone playback and to send audio config commands to audio flinger 13665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // For tone playback, using a separate thread is necessary to avoid deadlock with mLock because startTone() 13765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // and stopTone() are normally called with mLock locked and requesting a tone start or stop will cause 13865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // calls to AudioPolicyService and an attempt to lock mLock. 13965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // For audio config commands, it is necessary because audio flinger requires that the calling process (user) 14065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // has permission to modify audio settings. 14165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class AudioCommandThread : public Thread { 14265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class AudioCommand; 14365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 14465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 14565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // commands for tone AudioCommand 14665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian enum { 14765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian START_TONE, 14865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian STOP_TONE, 14965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian SET_VOLUME, 15065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian SET_PARAMETERS, 15165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian SET_VOICE_VOLUME 15265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 15365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 15465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioCommandThread (String8 name); 15565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual ~AudioCommandThread(); 15665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 15765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t dump(int fd); 15865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 15965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // Thread virtuals 16065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void onFirstRef(); 16165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual bool threadLoop(); 16265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 16365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void exit(); 16465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void startToneCommand(int type = 0, int stream = 0); 16565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void stopToneCommand(); 16665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t volumeCommand(int stream, float volume, int output, int delayMs = 0); 167fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin status_t parametersCommand(int ioHandle, const char *keyValuePairs, int delayMs = 0); 16865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t voiceVolumeCommand(float volume, int delayMs = 0); 16965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void insertCommand_l(AudioCommand *command, int delayMs = 0); 17065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 17165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian private: 17265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // descriptor for requested tone playback event 17365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class AudioCommand { 17465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 17565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 17665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioCommand() 17765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian : mCommand(-1) {} 17865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 17965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void dump(char* buffer, size_t size); 18065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 18165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mCommand; // START_TONE, STOP_TONE ... 18265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian nsecs_t mTime; // time stamp 18365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian Condition mCond; // condition for status return 18465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t mStatus; // command status 18565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian bool mWaitStatus; // true if caller is waiting for status 18665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void *mParam; // command parameter (ToneData, VolumeData, ParametersData) 18765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 18865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 18965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class ToneData { 19065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 19165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mType; // tone type (START_TONE only) 19265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mStream; // stream type (START_TONE only) 19365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 19465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 19565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class VolumeData { 19665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 19765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mStream; 19865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian float mVolume; 19965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mIO; 20065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 20165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 20265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class ParametersData { 20365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 20465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mIO; 20565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian String8 mKeyValuePairs; 20665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 20765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 20865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class VoiceVolumeData { 20965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 21065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian float mVolume; 21165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 21265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 21365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian Mutex mLock; 21465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian Condition mWaitWorkCV; 21565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian Vector <AudioCommand *> mAudioCommands; // list of pending commands 21665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian ToneGenerator *mpToneGenerator; // the tone generator 21765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioCommand mLastCommand; // last processed command (used by dump) 21865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian String8 mName; // string used by wake lock fo delayed commands 21965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 22065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 22165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // Internal dump utilities. 22265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t dumpPermissionDenial(int fd); 22365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 22465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 225eda6c364c253ba97ee45a3adeb8c2b45db1f81dbEric Laurent mutable Mutex mLock; // prevents concurrent access to AudioPolicy manager functions changing 226eda6c364c253ba97ee45a3adeb8c2b45db1f81dbEric Laurent // device connection state or routing 22765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian sp <AudioCommandThread> mAudioCommandThread; // audio commands thread 22865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian sp <AudioCommandThread> mTonePlaybackThread; // tone playback thread 229fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin 230fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin struct audio_policy_device *mpAudioPolicyDev; 231fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin struct audio_policy *mpAudioPolicy; 23265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian}; 23365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 23465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian}; // namespace android 23565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 23665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#endif // ANDROID_AUDIOPOLICYSERVICE_H 237