AudioSystem.h revision 1a9ed11a472493cac7f6dfcbfac2064526a493ed
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/* 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Copyright (C) 2008 The Android Open Source Project 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Licensed under the Apache License, Version 2.0 (the "License"); 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * you may not use this file except in compliance with the License. 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * You may obtain a copy of the License at 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * http://www.apache.org/licenses/LICENSE-2.0 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Unless required by applicable law or agreed to in writing, software 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * distributed under the License is distributed on an "AS IS" BASIS, 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * See the License for the specific language governing permissions and 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * limitations under the License. 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner */ 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef ANDROID_AUDIOSYSTEM_H_ 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define ANDROID_AUDIOSYSTEM_H_ 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <utils/RefBase.h> 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <utils/threads.h> 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <media/IAudioFlinger.h> 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <system/audio.h> 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <system/audio_policy.h> 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/* XXX: Should be include by all the users instead */ 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <media/AudioParameter.h> 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace android { 31236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton 32236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Claytontypedef void (*audio_error_callback)(status_t err); 33236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton 34236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Claytonclass IAudioPolicyService; 35236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Claytonclass String8; 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass AudioSystem 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /* These are static methods to control the system-wide AudioFlinger 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * only privileged processes can have access to them 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner */ 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // mute/unmute microphone 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t muteMicrophone(bool state); 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t isMicrophoneMuted(bool *state); 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // set/get master volume 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setMasterVolume(float value); 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getMasterVolume(float* volume); 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // mute/unmute audio outputs 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setMasterMute(bool mute); 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getMasterMute(bool* mute); 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // set/get stream volume on specified output 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setStreamVolume(audio_stream_type_t stream, float value, 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_io_handle_t output); 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getStreamVolume(audio_stream_type_t stream, float* volume, 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_io_handle_t output); 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // mute/unmute stream 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setStreamMute(audio_stream_type_t stream, bool mute); 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getStreamMute(audio_stream_type_t stream, bool* mute); 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // set audio mode in audio hardware 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setMode(audio_mode_t mode); 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // returns true in *state if tracks are active on the specified stream or has been active 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // in the past inPastMs milliseconds 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t isStreamActive(audio_stream_type_t stream, bool *state, uint32_t inPastMs = 0); 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // set/get audio hardware parameters. The function accepts a list of parameters 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // key value pairs in the form: key1=value1;key2=value2;... 76236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton // Some keys are reserved for standard parameters (See AudioParameter class). 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs); 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static String8 getParameters(audio_io_handle_t ioHandle, const String8& keys); 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void setErrorCallback(audio_error_callback cb); 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // helper function to obtain AudioFlinger service handle 83236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton static const sp<IAudioFlinger>& get_audio_flinger(); 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static float linearToLog(int volume); 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static int logToLinear(float volume); 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getOutputSamplingRate(int* samplingRate, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT); 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getOutputFrameCount(int* frameCount, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT); 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getOutputLatency(uint32_t* latency, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT); 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getSamplingRate(audio_io_handle_t output, 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_stream_type_t streamType, 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int* samplingRate); 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // returns the number of frames per audio HAL write buffer. Corresponds to 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // audio_stream->get_buffer_size()/audio_stream_frame_size() 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getFrameCount(audio_io_handle_t output, 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_stream_type_t stream, 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int* frameCount); 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // returns the audio output stream latency in ms. Corresponds to 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // audio_stream_out->get_latency() 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getLatency(audio_io_handle_t output, 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_stream_type_t stream, 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t* latency); 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // DEPRECATED 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getOutputSamplingRate(int* samplingRate, int stream = AUDIO_STREAM_DEFAULT); 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // DEPRECATED 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getOutputFrameCount(int* frameCount, int stream = AUDIO_STREAM_DEFAULT); 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool routedToA2dpOutput(audio_stream_type_t streamType); 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount, 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t* buffSize); 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setVoiceVolume(float volume); 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // return the number of audio frames written by AudioFlinger to audio HAL and 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // audio dsp to DAC since the output on which the specified stream is playing 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // has exited standby. 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // returned status (from utils/Errors.h) can be: 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // - NO_ERROR: successful operation, halFrames and dspFrames point to valid data 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // - INVALID_OPERATION: Not supported on current hardware platform 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // - BAD_VALUE: invalid parameter 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // NOTE: this feature is not supported on all hardware platforms and it is 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // necessary to check returned status before using the returned values. 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT); 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static unsigned int getInputFramesLost(audio_io_handle_t ioHandle); 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static int newAudioSessionId(); 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void acquireAudioSessionId(int audioSession); 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void releaseAudioSessionId(int audioSession); 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // types of io configuration change events received with ioConfigChanged() 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum io_config_event { 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OUTPUT_OPENED, 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OUTPUT_CLOSED, 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OUTPUT_CONFIG_CHANGED, 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner INPUT_OPENED, 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner INPUT_CLOSED, 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner INPUT_CONFIG_CHANGED, 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner STREAM_CONFIG_CHANGED, 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner NUM_CONFIG_EVENTS 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // audio output descriptor used to cache output configurations in client process to avoid frequent calls 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // through IAudioFlinger 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class OutputDescriptor { 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OutputDescriptor() 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner : samplingRate(0), format(AUDIO_FORMAT_DEFAULT), channels(0), frameCount(0), latency(0) {} 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t samplingRate; 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int32_t format; 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int32_t channels; 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t frameCount; 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t latency; 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Events used to synchronize actions between audio sessions. 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For instance SYNC_EVENT_PRESENTATION_COMPLETE can be used to delay recording start until playback 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // is complete on another audio session. 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // See definitions in MediaSyncEvent.java 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum sync_event_t { 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SYNC_EVENT_SAME = -1, // used internally to indicate restart with same event 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SYNC_EVENT_NONE = 0, 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SYNC_EVENT_PRESENTATION_COMPLETE, 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Define new events here: SYNC_EVENT_START, SYNC_EVENT_STOP, SYNC_EVENT_TIME ... 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SYNC_EVENT_CNT, 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions) 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, const char *device_address); 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static audio_policy_dev_state_t getDeviceConnectionState(audio_devices_t device, const char *device_address); 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setPhoneState(audio_mode_t state); 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config); 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage); 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static audio_io_handle_t getOutput(audio_stream_type_t stream, 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t samplingRate = 0, 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_format_t format = AUDIO_FORMAT_DEFAULT, 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t channels = AUDIO_CHANNEL_OUT_STEREO, 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_policy_output_flags_t flags = AUDIO_POLICY_OUTPUT_FLAG_NONE); 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t startOutput(audio_io_handle_t output, 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_stream_type_t stream, 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int session = 0); 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t stopOutput(audio_io_handle_t output, 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_stream_type_t stream, 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int session = 0); 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void releaseOutput(audio_io_handle_t output); 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static audio_io_handle_t getInput(audio_source_t inputSource, 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t samplingRate = 0, 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_format_t format = AUDIO_FORMAT_DEFAULT, 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t channels = AUDIO_CHANNEL_IN_MONO, 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_in_acoustics_t acoustics = (audio_in_acoustics_t)0, 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int sessionId = 0); 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t startInput(audio_io_handle_t input); 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t stopInput(audio_io_handle_t input); 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void releaseInput(audio_io_handle_t input); 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t initStreamVolume(audio_stream_type_t stream, 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int indexMin, 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int indexMax); 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setStreamVolumeIndex(audio_stream_type_t stream, 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int index, 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_devices_t device); 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t getStreamVolumeIndex(audio_stream_type_t stream, 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int *index, 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_devices_t device); 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static uint32_t getStrategyForStream(audio_stream_type_t stream); 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static audio_devices_t getDevicesForStream(audio_stream_type_t stream); 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static audio_io_handle_t getOutputForEffect(effect_descriptor_t *desc); 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t registerEffect(effect_descriptor_t *desc, 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner audio_io_handle_t io, 221bddb78944a140c3ca1324d356aa83495331ff50dJim Ingham uint32_t strategy, 222bddb78944a140c3ca1324d356aa83495331ff50dJim Ingham int session, 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int id); 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t unregisterEffect(int id); 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static status_t setEffectEnabled(int id, bool enabled); 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // clear stream to output mapping cache (gStreamOutputMap) 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // and output configuration cache (gOutputs) 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void clearAudioConfigCache(); 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const sp<IAudioPolicyService>& get_audio_policy_service(); 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // ---------------------------------------------------------------------------- 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class AudioFlingerClient: public IBinder::DeathRecipient, public BnAudioFlingerClient 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner AudioFlingerClient() { 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // DeathRecipient 244537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton virtual void binderDied(const wp<IBinder>& who); 245537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton 246537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton // IAudioFlingerClient 247537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton 248537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton // indicate a change in the configuration of an output or input: keeps the cached 249537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton // values for output/input parameters up-to-date in client process 250537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton virtual void ioConfigChanged(int event, audio_io_handle_t ioHandle, const void *param2); 251537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton }; 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 253537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton class AudioPolicyServiceClient: public IBinder::DeathRecipient 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner AudioPolicyServiceClient() { 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // DeathRecipient 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void binderDied(const wp<IBinder>& who); 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static sp<AudioFlingerClient> gAudioFlingerClient; 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static sp<AudioPolicyServiceClient> gAudioPolicyServiceClient; 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class AudioFlingerClient; 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class AudioPolicyServiceClient; 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static Mutex gLock; 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static sp<IAudioFlinger> gAudioFlinger; 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static audio_error_callback gAudioErrorCallback; 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static size_t gInBuffSize; 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // previous parameters for recording buffer size queries 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static uint32_t gPrevInSamplingRate; 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static audio_format_t gPrevInFormat; 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static int gPrevInChannelCount; 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static sp<IAudioPolicyService> gAudioPolicyService; 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // mapping between stream types and outputs 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static DefaultKeyedVector<audio_stream_type_t, audio_io_handle_t> gStreamOutputMap; 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // list of output descriptors containing cached parameters 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // (sampling rate, framecount, channel count...) 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static DefaultKeyedVector<audio_io_handle_t, OutputDescriptor *> gOutputs; 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; // namespace android 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif /*ANDROID_AUDIOSYSTEM_H_*/ 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner