AudioSystem.h revision 99e53b86eebb605b70dd7591b89bf61a9414ed0e
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");
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (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
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See the License for the specific language governing permissions and
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * limitations under the License.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
175e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#ifndef ANDROID_AUDIOSYSTEM_H_
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ANDROID_AUDIOSYSTEM_H_
19868fa2fe829687343ffae624259930155e16dbd8Torne (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)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef void (*audio_error_callback)(status_t err);
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (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)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /* These are static methods to control the system-wide AudioFlinger
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (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,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    audio_io_handle_t output);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getStreamVolume(audio_stream_type_t stream, float* volume,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    audio_io_handle_t output);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // mute/unmute stream
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setStreamMute(audio_stream_type_t stream, bool mute);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getStreamMute(audio_stream_type_t stream, bool* mute);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // set audio mode in audio hardware
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setMode(audio_mode_t mode);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // returns true in *state if tracks are active on the specified stream or has been active
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // in the past inPastMs milliseconds
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t isStreamActive(audio_stream_type_t stream, bool *state, uint32_t inPastMs = 0);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // set/get audio hardware parameters. The function accepts a list of parameters
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // key value pairs in the form: key1=value1;key2=value2;...
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Some keys are reserved for standard parameters (See AudioParameter class).
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static String8  getParameters(audio_io_handle_t ioHandle, const String8& keys);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void setErrorCallback(audio_error_callback cb);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // helper function to obtain AudioFlinger service handle
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const sp<IAudioFlinger>& get_audio_flinger();
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static float linearToLog(int volume);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static int logToLinear(float volume);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getOutputSamplingRate(int* samplingRate, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getOutputFrameCount(int* frameCount, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getOutputLatency(uint32_t* latency, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DEPRECATED
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getOutputSamplingRate(int* samplingRate, int stream = AUDIO_STREAM_DEFAULT);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DEPRECATED
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getOutputFrameCount(int* frameCount, int stream = AUDIO_STREAM_DEFAULT);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static bool routedToA2dpOutput(audio_stream_type_t streamType);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount,
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        size_t* buffSize);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setVoiceVolume(float volume);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // return the number of audio frames written by AudioFlinger to audio HAL and
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // audio dsp to DAC since the output on which the specified stream is playing
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // has exited standby.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // returned status (from utils/Errors.h) can be:
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // - NO_ERROR: successful operation, halFrames and dspFrames point to valid data
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // - INVALID_OPERATION: Not supported on current hardware platform
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // - BAD_VALUE: invalid parameter
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // NOTE: this feature is not supported on all hardware platforms and it is
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // necessary to check returned status before using the returned values.
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static unsigned int  getInputFramesLost(audio_io_handle_t ioHandle);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static int newAudioSessionId();
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void acquireAudioSessionId(int audioSession);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void releaseAudioSessionId(int audioSession);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // types of io configuration change events received with ioConfigChanged()
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enum io_config_event {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OUTPUT_OPENED,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OUTPUT_CLOSED,
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OUTPUT_CONFIG_CHANGED,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        INPUT_OPENED,
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        INPUT_CLOSED,
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        INPUT_CONFIG_CHANGED,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        STREAM_CONFIG_CHANGED,
13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        NUM_CONFIG_EVENTS
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // audio output descriptor used to cache output configurations in client process to avoid frequent calls
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // through IAudioFlinger
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    class OutputDescriptor {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public:
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OutputDescriptor()
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        : samplingRate(0), format(AUDIO_FORMAT_DEFAULT), channels(0), frameCount(0), latency(0)  {}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        uint32_t samplingRate;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        int32_t format;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        int32_t channels;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        size_t frameCount;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        uint32_t latency;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, const char *device_address);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_policy_dev_state_t getDeviceConnectionState(audio_devices_t device, const char *device_address);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setPhoneState(audio_mode_t state);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_io_handle_t getOutput(audio_stream_type_t stream,
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        uint32_t samplingRate = 0,
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        audio_format_t format = AUDIO_FORMAT_DEFAULT,
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        uint32_t channels = AUDIO_CHANNEL_OUT_STEREO,
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        audio_policy_output_flags_t flags = AUDIO_POLICY_OUTPUT_FLAG_INDIRECT);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t startOutput(audio_io_handle_t output,
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                audio_stream_type_t stream,
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int session = 0);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t stopOutput(audio_io_handle_t output,
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               audio_stream_type_t stream,
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               int session = 0);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void releaseOutput(audio_io_handle_t output);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_io_handle_t getInput(audio_source_t inputSource,
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    uint32_t samplingRate = 0,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    audio_format_t format = AUDIO_FORMAT_DEFAULT,
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    uint32_t channels = AUDIO_CHANNEL_IN_MONO,
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    audio_in_acoustics_t acoustics = (audio_in_acoustics_t)0,
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int sessionId = 0);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t startInput(audio_io_handle_t input);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t stopInput(audio_io_handle_t input);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void releaseInput(audio_io_handle_t input);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t initStreamVolume(audio_stream_type_t stream,
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      int indexMin,
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      int indexMax);
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    static status_t setStreamVolumeIndex(audio_stream_type_t stream,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         int index,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         audio_devices_t device);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t getStreamVolumeIndex(audio_stream_type_t stream,
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         int *index,
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         audio_devices_t device);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static uint32_t getStrategyForStream(audio_stream_type_t stream);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static uint32_t getDevicesForStream(audio_stream_type_t stream);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_io_handle_t getOutputForEffect(effect_descriptor_t *desc);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t registerEffect(effect_descriptor_t *desc,
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    audio_io_handle_t io,
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    uint32_t strategy,
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int session,
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int id);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t unregisterEffect(int id);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static status_t setEffectEnabled(int id, bool enabled);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // clear stream to output mapping cache (gStreamOutputMap)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // and output configuration cache (gOutputs)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static void clearAudioConfigCache();
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const sp<IAudioPolicyService>& get_audio_policy_service();
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // ----------------------------------------------------------------------------
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)private:
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    class AudioFlingerClient: public IBinder::DeathRecipient, public BnAudioFlingerClient
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public:
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        AudioFlingerClient() {
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // DeathRecipient
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        virtual void binderDied(const wp<IBinder>& who);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // IAudioFlingerClient
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // indicate a change in the configuration of an output or input: keeps the cached
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // values for output/input parameters upto date in client process
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        virtual void ioConfigChanged(int event, audio_io_handle_t ioHandle, void *param2);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    class AudioPolicyServiceClient: public IBinder::DeathRecipient
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public:
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        AudioPolicyServiceClient() {
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // DeathRecipient
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        virtual void binderDied(const wp<IBinder>& who);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static sp<AudioFlingerClient> gAudioFlingerClient;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static sp<AudioPolicyServiceClient> gAudioPolicyServiceClient;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    friend class AudioFlingerClient;
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    friend class AudioPolicyServiceClient;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static Mutex gLock;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static sp<IAudioFlinger> gAudioFlinger;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_error_callback gAudioErrorCallback;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static size_t gInBuffSize;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // previous parameters for recording buffer size queries
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static uint32_t gPrevInSamplingRate;
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static audio_format_t gPrevInFormat;
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static int gPrevInChannelCount;
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static sp<IAudioPolicyService> gAudioPolicyService;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // mapping between stream types and outputs
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static DefaultKeyedVector<audio_stream_type_t, audio_io_handle_t> gStreamOutputMap;
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // list of output descriptors containing cached parameters
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // (sampling rate, framecount, channel count...)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static DefaultKeyedVector<audio_io_handle_t, OutputDescriptor *> gOutputs;
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};  // namespace android
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  /*ANDROID_AUDIOSYSTEM_H_*/
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)