1cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/* 2cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * 4cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * you may not use this file except in compliance with the License. 6cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * You may obtain a copy of the License at 7cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * 8cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * 10cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * See the License for the specific language governing permissions and 14cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * limitations under the License. 15cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 16cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 17cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#ifndef ANDROID_AUDIO_HARDWARE_INTERFACE_H 18cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#define ANDROID_AUDIO_HARDWARE_INTERFACE_H 19cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 20cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#include <stdint.h> 21cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#include <sys/types.h> 22cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 23cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#include <utils/Errors.h> 24cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#include <utils/Vector.h> 25cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#include <utils/String16.h> 26dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent#include <utils/String8.h> 27cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 28cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#include <media/IAudioFlinger.h> 29e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include <hardware_legacy/AudioSystemLegacy.h> 30cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 314a0748be283a8c9efa02243c3e1716c49443a87cDima Zavin#include <system/audio.h> 32d17f66f33276e64e8e288f6ff2b1cb8169650c81Dima Zavin#include <hardware/audio.h> 33cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 34e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include <cutils/bitops.h> 35e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 36e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinnamespace android_audio_legacy { 37e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin using android::Vector; 38e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin using android::String16; 39e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin using android::String8; 40cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 41cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project// ---------------------------------------------------------------------------- 42cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 43cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/** 44cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * AudioStreamOut is the abstraction interface for the audio output hardware. 45cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * 46cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * It provides information about various properties of the audio output hardware driver. 47cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 48cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectclass AudioStreamOut { 49cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectpublic: 50cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual ~AudioStreamOut() = 0; 51cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 52cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** return audio sampling rate in hz - eg. 44100 */ 53cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual uint32_t sampleRate() const = 0; 54cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 55cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** returns size of output buffer - eg. 4800 */ 56cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual size_t bufferSize() const = 0; 57cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 58cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 59902ec630b6abc9bf6c247e21ff4a829c58a93ce9Glenn Kasten * returns the output channel mask 60cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 61dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual uint32_t channels() const = 0; 62cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 63cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 64cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * return audio format in 8bit or 16bit PCM format - 65cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * eg. AudioSystem:PCM_16_BIT 66cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 67cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual int format() const = 0; 68cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 69cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 70cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * return the frame size (number of bytes per sample). 71cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 72e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin uint32_t frameSize() const { return popcount(channels())*((format()==AUDIO_FORMAT_PCM_16_BIT)?sizeof(int16_t):sizeof(int8_t)); } 73cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 74cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 75cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * return the audio hardware driver latency in milli seconds. 76cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 77cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual uint32_t latency() const = 0; 78cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 79cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 80cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Use this method in situations where audio mixing is done in the 81cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * hardware. This method serves as a direct interface with hardware, 82cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * allowing you to directly set the volume as apposed to via the framework. 83cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * This method might produce multiple PCM outputs or hardware accelerated 84cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * codecs, such as MP3 or AAC. 85cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 86dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual status_t setVolume(float left, float right) = 0; 87cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 88cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** write audio buffer to driver. Returns number of bytes written */ 89cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual ssize_t write(const void* buffer, size_t bytes) = 0; 90cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 91cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 92cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Put the audio hardware output into standby mode. Returns 93cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * status based on include/utils/Errors.h 94cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 95cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t standby() = 0; 96cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 97cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** dump the state of the audio output device */ 98cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t dump(int fd, const Vector<String16>& args) = 0; 99dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent 100dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // set/get audio output parameters. The function accepts a list of parameters 101dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // key value pairs in the form: key1=value1;key2=value2;... 102dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // Some keys are reserved for standard parameters (See AudioParameter class). 103dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // If the implementation does not accept a parameter change while the output is 104dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // active but the parameter is acceptable otherwise, it must return INVALID_OPERATION. 105dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // The audio flinger will put the output in standby and then change the parameter value. 106dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual status_t setParameters(const String8& keyValuePairs) = 0; 107dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual String8 getParameters(const String8& keys) = 0; 108392290d659cabc017f3784d332a6ddf6eaf49bc5Eric Laurent 109392290d659cabc017f3784d332a6ddf6eaf49bc5Eric Laurent // return the number of audio frames written by the audio dsp to DAC since 110392290d659cabc017f3784d332a6ddf6eaf49bc5Eric Laurent // the output has exited standby 111392290d659cabc017f3784d332a6ddf6eaf49bc5Eric Laurent virtual status_t getRenderPosition(uint32_t *dspFrames) = 0; 1125b71e6fd76fe244719cb5a3f9ac24572acd9a3caJohn Grossman 1135b71e6fd76fe244719cb5a3f9ac24572acd9a3caJohn Grossman /** 1145b71e6fd76fe244719cb5a3f9ac24572acd9a3caJohn Grossman * get the local time at which the next write to the audio driver will be 1155b71e6fd76fe244719cb5a3f9ac24572acd9a3caJohn Grossman * presented 1165b71e6fd76fe244719cb5a3f9ac24572acd9a3caJohn Grossman */ 1175b71e6fd76fe244719cb5a3f9ac24572acd9a3caJohn Grossman virtual status_t getNextWriteTimestamp(int64_t *timestamp); 1185b71e6fd76fe244719cb5a3f9ac24572acd9a3caJohn Grossman 119cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project}; 120cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 121cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/** 122cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * AudioStreamIn is the abstraction interface for the audio input hardware. 123cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * 124cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * It defines the various properties of the audio hardware input driver. 125cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 126cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectclass AudioStreamIn { 127cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectpublic: 128cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual ~AudioStreamIn() = 0; 129cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 130dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent /** return audio sampling rate in hz - eg. 44100 */ 131dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual uint32_t sampleRate() const = 0; 132dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent 133cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** return the input buffer size allowed by audio driver */ 134cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual size_t bufferSize() const = 0; 135cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 136dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent /** return input channel mask */ 137dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual uint32_t channels() const = 0; 138cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 139cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 140cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * return audio format in 8bit or 16bit PCM format - 141cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * eg. AudioSystem:PCM_16_BIT 142cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 143cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual int format() const = 0; 144cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 145cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 146cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * return the frame size (number of bytes per sample). 147cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 148dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent uint32_t frameSize() const { return AudioSystem::popCount(channels())*((format()==AudioSystem::PCM_16_BIT)?sizeof(int16_t):sizeof(int8_t)); } 149cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 150cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** set the input gain for the audio driver. This method is for 151cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * for future use */ 152cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t setGain(float gain) = 0; 153cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 154cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** read audio buffer in from audio driver */ 155cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual ssize_t read(void* buffer, ssize_t bytes) = 0; 156cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 157cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** dump the state of the audio input device */ 158cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t dump(int fd, const Vector<String16>& args) = 0; 159cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 160cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 161cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Put the audio hardware input into standby mode. Returns 162cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * status based on include/utils/Errors.h 163cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 164cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t standby() = 0; 165cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 166dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // set/get audio input parameters. The function accepts a list of parameters 167dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // key value pairs in the form: key1=value1;key2=value2;... 168dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // Some keys are reserved for standard parameters (See AudioParameter class). 169dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // If the implementation does not accept a parameter change while the output is 170dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // active but the parameter is acceptable otherwise, it must return INVALID_OPERATION. 171dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // The audio flinger will put the input in standby and then change the parameter value. 172dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual status_t setParameters(const String8& keyValuePairs) = 0; 173dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual String8 getParameters(const String8& keys) = 0; 1744eeca2472712d86063715b05345fcff1e0e6fa73Eric Laurent 1754eeca2472712d86063715b05345fcff1e0e6fa73Eric Laurent 176902ec630b6abc9bf6c247e21ff4a829c58a93ce9Glenn Kasten // Return the number of input frames lost in the audio driver since the last call of this function. 1774eeca2472712d86063715b05345fcff1e0e6fa73Eric Laurent // Audio driver is expected to reset the value to 0 and restart counting upon returning the current value by this function call. 1784eeca2472712d86063715b05345fcff1e0e6fa73Eric Laurent // Such loss typically occurs when the user space process is blocked longer than the capacity of audio driver buffers. 1794eeca2472712d86063715b05345fcff1e0e6fa73Eric Laurent // Unit: the number of input audio frames 1804eeca2472712d86063715b05345fcff1e0e6fa73Eric Laurent virtual unsigned int getInputFramesLost() const = 0; 1814eeca2472712d86063715b05345fcff1e0e6fa73Eric Laurent 1822d97c20601f97dc375c65c6f4da4ad37eb7bf1d9Eric Laurent virtual status_t addAudioEffect(effect_handle_t effect) = 0; 1832d97c20601f97dc375c65c6f4da4ad37eb7bf1d9Eric Laurent virtual status_t removeAudioEffect(effect_handle_t effect) = 0; 184cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project}; 185cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 186cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/** 187cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * AudioHardwareInterface.h defines the interface to the audio hardware abstraction layer. 188cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * 189cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * The interface supports setting and getting parameters, selecting audio routing 190cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * paths, and defining input and output streams. 191cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * 192cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * AudioFlinger initializes the audio hardware and immediately opens an output stream. 193cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * You can set Audio routing to output to handset, speaker, Bluetooth, or a headset. 194cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * 195cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * The audio input stream is initialized when AudioFlinger is called to carry out 196cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * a record operation. 197cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 198cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectclass AudioHardwareInterface 199cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project{ 200cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectpublic: 201df37ea7b73f8ede7955067d5f7fcac4b9e66b79cMarco Nelissen virtual ~AudioHardwareInterface() {} 202df37ea7b73f8ede7955067d5f7fcac4b9e66b79cMarco Nelissen 203cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 204cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * check to see if the audio hardware interface has been initialized. 205cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * return status based on values defined in include/utils/Errors.h 206cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 207cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t initCheck() = 0; 208cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 209cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** set the audio volume of a voice call. Range is between 0.0 and 1.0 */ 210cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t setVoiceVolume(float volume) = 0; 211cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 212cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 213cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * set the audio volume for all audio activities other than voice call. 214cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Range between 0.0 and 1.0. If any value other than NO_ERROR is returned, 215cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * the software mixer will emulate this capability. 216cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 217cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t setMasterVolume(float volume) = 0; 218cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 219cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** 220617c80a82e5620b2f16348e4bd3d7fc3b76e9021John Grossman * Get the current master volume value for the HAL, if the HAL supports 221617c80a82e5620b2f16348e4bd3d7fc3b76e9021John Grossman * master volume control. AudioFlinger will query this value from the 222617c80a82e5620b2f16348e4bd3d7fc3b76e9021John Grossman * primary audio HAL when the service starts and use the value for setting 223617c80a82e5620b2f16348e4bd3d7fc3b76e9021John Grossman * the initial master volume across all HALs. 224617c80a82e5620b2f16348e4bd3d7fc3b76e9021John Grossman */ 225617c80a82e5620b2f16348e4bd3d7fc3b76e9021John Grossman virtual status_t getMasterVolume(float *volume) = 0; 226617c80a82e5620b2f16348e4bd3d7fc3b76e9021John Grossman 227617c80a82e5620b2f16348e4bd3d7fc3b76e9021John Grossman /** 228cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * setMode is called when the audio mode changes. NORMAL mode is for 229cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * standard audio playback, RINGTONE when a ringtone is playing, and IN_CALL 230cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * when a call is in progress. 231cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */ 232cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t setMode(int mode) = 0; 233cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 234cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project // mic mute 235cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t setMicMute(bool state) = 0; 236cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t getMicMute(bool* state) = 0; 237cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 238dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent // set/get global audio parameters 239dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual status_t setParameters(const String8& keyValuePairs) = 0; 240dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual String8 getParameters(const String8& keys) = 0; 241cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 242cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project // Returns audio input buffer size according to parameters passed or 0 if one of the 243cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project // parameters is not supported 244cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount) = 0; 245dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent 246cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** This method creates and opens the audio hardware output stream */ 247cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual AudioStreamOut* openOutputStream( 248dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent uint32_t devices, 249dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent int *format=0, 250dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent uint32_t *channels=0, 251dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent uint32_t *sampleRate=0, 252cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project status_t *status=0) = 0; 253dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual void closeOutputStream(AudioStreamOut* out) = 0; 254902ec630b6abc9bf6c247e21ff4a829c58a93ce9Glenn Kasten 255cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /** This method creates and opens the audio hardware input stream */ 256cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual AudioStreamIn* openInputStream( 257dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent uint32_t devices, 258dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent int *format, 259dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent uint32_t *channels, 260dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent uint32_t *sampleRate, 261cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project status_t *status, 262cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project AudioSystem::audio_in_acoustics acoustics) = 0; 263dbfad0ce83535cea0940e04660bdfab5b6c867a4Eric Laurent virtual void closeInputStream(AudioStreamIn* in) = 0; 264cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 265cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project /**This method dumps the state of the audio hardware */ 266cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t dumpState(int fd, const Vector<String16>& args) = 0; 267cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 268cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project static AudioHardwareInterface* create(); 269cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 270cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectprotected: 271cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 272cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project virtual status_t dump(int fd, const Vector<String16>& args) = 0; 273cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project}; 274cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 275cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project// ---------------------------------------------------------------------------- 276cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 277cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectextern "C" AudioHardwareInterface* createAudioHardware(void); 278cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 279cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project}; // namespace android 280cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project 281cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#endif // ANDROID_AUDIO_HARDWARE_INTERFACE_H 282