AudioSystem.h revision fff6d715a8db0daf08a50634f242c40268de3d49
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2008 The Android Open Source Project
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * you may not use this file except in compliance with the License.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You may obtain a copy of the License at
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
115e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
125e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * See the License for the specific language governing permissions and
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * limitations under the License.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ANDROID_AUDIOSYSTEM_H_
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ANDROID_AUDIOSYSTEM_H_
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utils/RefBase.h>
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utils/threads.h>
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <media/IAudioFlinger.h>
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <system/audio.h>
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <system/audio_policy.h>
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* XXX: Should be include by all the users instead */
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <media/AudioParameter.h>
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace android {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*audio_error_callback)(status_t err);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IAudioPolicyService;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class String8;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AudioSystem
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /* These are static methods to control the system-wide AudioFlinger
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * only privileged processes can have access to them
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // mute/unmute microphone
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t muteMicrophone(bool state);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t isMicrophoneMuted(bool *state);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // set/get master volume
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setMasterVolume(float value);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getMasterVolume(float* volume);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // mute/unmute audio outputs
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setMasterMute(bool mute);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getMasterMute(bool* mute);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // set/get stream volume on specified output
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setStreamVolume(audio_stream_type_t stream, float value, int output);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getStreamVolume(audio_stream_type_t stream, float* volume, int output);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // mute/unmute stream
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setStreamMute(audio_stream_type_t stream, bool mute);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getStreamMute(audio_stream_type_t stream, bool* mute);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // set audio mode in audio hardware (see audio_mode_t)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setMode(int mode);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // returns true in *state if tracks are active on the specified stream or has been active
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // in the past inPastMs milliseconds
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t isStreamActive(audio_stream_type_t stream, bool *state, uint32_t inPastMs = 0);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // set/get audio hardware parameters. The function accepts a list of parameters
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // key value pairs in the form: key1=value1;key2=value2;...
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Some keys are reserved for standard parameters (See AudioParameter class).
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static String8  getParameters(audio_io_handle_t ioHandle, const String8& keys);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void setErrorCallback(audio_error_callback cb);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // helper function to obtain AudioFlinger service handle
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const sp<IAudioFlinger>& get_audio_flinger();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static float linearToLog(int volume);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static int logToLinear(float volume);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getOutputSamplingRate(int* samplingRate, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getOutputFrameCount(int* frameCount, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getOutputLatency(uint32_t* latency, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static bool routedToA2dpOutput(audio_stream_type_t streamType);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        size_t* buffSize);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setVoiceVolume(float volume);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // return the number of audio frames written by AudioFlinger to audio HAL and
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // audio dsp to DAC since the output on which the specified stream is playing
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // has exited standby.
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // returned status (from utils/Errors.h) can be:
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // - NO_ERROR: successful operation, halFrames and dspFrames point to valid data
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // - INVALID_OPERATION: Not supported on current hardware platform
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // - BAD_VALUE: invalid parameter
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // NOTE: this feature is not supported on all hardware platforms and it is
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // necessary to check returned status before using the returned values.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static unsigned int  getInputFramesLost(audio_io_handle_t ioHandle);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static int newAudioSessionId();
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void acquireAudioSessionId(int audioSession);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void releaseAudioSessionId(int audioSession);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // types of io configuration change events received with ioConfigChanged()
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enum io_config_event {
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OUTPUT_OPENED,
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OUTPUT_CLOSED,
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OUTPUT_CONFIG_CHANGED,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        INPUT_OPENED,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        INPUT_CLOSED,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        INPUT_CONFIG_CHANGED,
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        STREAM_CONFIG_CHANGED,
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NUM_CONFIG_EVENTS
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // audio output descritor used to cache output configurations in client process to avoid frequent calls
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // through IAudioFlinger
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    class OutputDescriptor {
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public:
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OutputDescriptor()
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        : samplingRate(0), format(0), channels(0), frameCount(0), latency(0)  {}
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        uint32_t samplingRate;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        int32_t format;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        int32_t channels;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        size_t frameCount;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        uint32_t latency;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, const char *device_address);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_policy_dev_state_t getDeviceConnectionState(audio_devices_t device, const char *device_address);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setPhoneState(int state);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setRingerMode(uint32_t mode, uint32_t mask);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config);
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_io_handle_t getOutput(audio_stream_type_t stream,
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        uint32_t samplingRate = 0,
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        uint32_t format = AUDIO_FORMAT_DEFAULT,
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        uint32_t channels = AUDIO_CHANNEL_OUT_STEREO,
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        audio_policy_output_flags_t flags = AUDIO_POLICY_OUTPUT_FLAG_INDIRECT);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t startOutput(audio_io_handle_t output,
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                audio_stream_type_t stream,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int session = 0);
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t stopOutput(audio_io_handle_t output,
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               audio_stream_type_t stream,
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               int session = 0);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void releaseOutput(audio_io_handle_t output);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_io_handle_t getInput(int inputSource,
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    uint32_t samplingRate = 0,
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    uint32_t format = AUDIO_FORMAT_DEFAULT,
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    uint32_t channels = AUDIO_CHANNEL_IN_MONO,
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    audio_in_acoustics_t acoustics = (audio_in_acoustics_t)0,
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int sessionId = 0);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t startInput(audio_io_handle_t input);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t stopInput(audio_io_handle_t input);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void releaseInput(audio_io_handle_t input);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t initStreamVolume(audio_stream_type_t stream,
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      int indexMin,
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      int indexMax);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setStreamVolumeIndex(audio_stream_type_t stream, int index);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getStreamVolumeIndex(audio_stream_type_t stream, int *index);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static uint32_t getStrategyForStream(audio_stream_type_t stream);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static uint32_t getDevicesForStream(audio_stream_type_t stream);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_io_handle_t getOutputForEffect(effect_descriptor_t *desc);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t registerEffect(effect_descriptor_t *desc,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    audio_io_handle_t io,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    uint32_t strategy,
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int session,
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int id);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t unregisterEffect(int id);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setEffectEnabled(int id, bool enabled);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // clear stream to output mapping cache (gStreamOutputMap)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // and output configuration cache (gOutputs)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void clearAudioConfigCache();
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const sp<IAudioPolicyService>& get_audio_policy_service();
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // ----------------------------------------------------------------------------
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)private:
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    class AudioFlingerClient: public IBinder::DeathRecipient, public BnAudioFlingerClient
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public:
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        AudioFlingerClient() {
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // DeathRecipient
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        virtual void binderDied(const wp<IBinder>& who);
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // IAudioFlingerClient
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        // indicate a change in the configuration of an output or input: keeps the cached
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        // values for output/input parameters upto date in client process
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        virtual void ioConfigChanged(int event, int ioHandle, void *param2);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    class AudioPolicyServiceClient: public IBinder::DeathRecipient
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public:
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        AudioPolicyServiceClient() {
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // DeathRecipient
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        virtual void binderDied(const wp<IBinder>& who);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static sp<AudioFlingerClient> gAudioFlingerClient;
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    static sp<AudioPolicyServiceClient> gAudioPolicyServiceClient;
2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    friend class AudioFlingerClient;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    friend class AudioPolicyServiceClient;
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static Mutex gLock;
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static sp<IAudioFlinger> gAudioFlinger;
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_error_callback gAudioErrorCallback;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static size_t gInBuffSize;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // previous parameters for recording buffer size queries
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static uint32_t gPrevInSamplingRate;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static int gPrevInFormat;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static int gPrevInChannelCount;
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static sp<IAudioPolicyService> gAudioPolicyService;
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // mapping between stream types and outputs
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static DefaultKeyedVector<int, audio_io_handle_t> gStreamOutputMap;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // list of output descriptors containing cached parameters
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // (sampling rate, framecount, channel count...)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static DefaultKeyedVector<audio_io_handle_t, OutputDescriptor *> gOutputs;
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};  // namespace android
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  /*ANDROID_AUDIOSYSTEM_H_*/
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)