IAudioFlinger.h revision de9719b3ec71472e6bf75117152176af51d1a515
1f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin/* 2f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin * Copyright (C) 2007 The Android Open Source Project 3303e6ac804c110ae54a51b56a217d70e97313c10Brian Swetland * 4303e6ac804c110ae54a51b56a217d70e97313c10Brian Swetland * Licensed under the Apache License, Version 2.0 (the "License"); 5f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin * you may not use this file except in compliance with the License. 6f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin * You may obtain a copy of the License at 7f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin * 8f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin * http://www.apache.org/licenses/LICENSE-2.0 9f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin * 10f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin * Unless required by applicable law or agreed to in writing, software 11209c7b0fad9604d1dde1b74d9f9d577b923469fdDima Zavin * distributed under the License is distributed on an "AS IS" BASIS, 12209c7b0fad9604d1dde1b74d9f9d577b923469fdDima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13209c7b0fad9604d1dde1b74d9f9d577b923469fdDima Zavin * See the License for the specific language governing permissions and 14209c7b0fad9604d1dde1b74d9f9d577b923469fdDima Zavin * limitations under the License. 15f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin */ 16f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin 17f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin#ifndef ANDROID_IAUDIOFLINGER_H 18f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin#define ANDROID_IAUDIOFLINGER_H 19f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin 20f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin#include <stdint.h> 21f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin#include <sys/types.h> 22f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin#include <unistd.h> 23f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin 24c60e6e7e585551fa97cac2ac71dc1ddf54cd0242Stephen Hines#include <utils/RefBase.h> 25f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin#include <utils/Errors.h> 26f48b23688c1303212c65e470af9f9f3892e98f8eDima Zavin#include <binder/IInterface.h> 27303e6ac804c110ae54a51b56a217d70e97313c10Brian Swetland#include <media/IAudioTrack.h> 280052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin#include <media/IAudioRecord.h> 290052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin#include <media/IAudioFlingerClient.h> 300052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin#include <hardware/audio_effect.h> 310052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin#include <media/IEffect.h> 320052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin#include <media/IEffectClient.h> 330052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin#include <utils/String8.h> 340052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin 350052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavinnamespace android { 360052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin 370052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin// ---------------------------------------------------------------------------- 380052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin 390052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavinclass IAudioFlinger : public IInterface 400052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin{ 410052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavinpublic: 420052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin DECLARE_META_INTERFACE(AudioFlinger); 430052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin 440052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin /* create an audio track and registers it with AudioFlinger. 450052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin * return null if the track cannot be created. 460052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin */ 470052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin virtual sp<IAudioTrack> createTrack( 480052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin pid_t pid, 490052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin audio_stream_type_t streamType, 500052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin uint32_t sampleRate, 510052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin audio_format_t format, 520052abdafd7179fc4a7458f09d2f95c74dda0021Dima Zavin uint32_t channelMask, 53dcecd4cc775a2fdc0212a0a76b861ee987ec2ef3Dima Zavin int frameCount, 54303e6ac804c110ae54a51b56a217d70e97313c10Brian Swetland uint32_t flags, 55 const sp<IMemory>& sharedBuffer, 56 int output, 57 int *sessionId, 58 status_t *status) = 0; 59 60 virtual sp<IAudioRecord> openRecord( 61 pid_t pid, 62 int input, 63 uint32_t sampleRate, 64 audio_format_t format, 65 uint32_t channelMask, 66 int frameCount, 67 uint32_t flags, 68 int *sessionId, 69 status_t *status) = 0; 70 71 /* query the audio hardware state. This state never changes, 72 * and therefore can be cached. 73 */ 74 virtual uint32_t sampleRate(int output) const = 0; 75 virtual int channelCount(int output) const = 0; 76 virtual audio_format_t format(int output) const = 0; 77 virtual size_t frameCount(int output) const = 0; 78 virtual uint32_t latency(int output) const = 0; 79 80 /* set/get the audio hardware state. This will probably be used by 81 * the preference panel, mostly. 82 */ 83 virtual status_t setMasterVolume(float value) = 0; 84 virtual status_t setMasterMute(bool muted) = 0; 85 86 virtual float masterVolume() const = 0; 87 virtual bool masterMute() const = 0; 88 89 /* set/get stream type state. This will probably be used by 90 * the preference panel, mostly. 91 */ 92 virtual status_t setStreamVolume(audio_stream_type_t stream, float value, int output) = 0; 93 virtual status_t setStreamMute(audio_stream_type_t stream, bool muted) = 0; 94 95 virtual float streamVolume(audio_stream_type_t stream, int output) const = 0; 96 virtual bool streamMute(audio_stream_type_t stream) const = 0; 97 98 // set audio mode 99 virtual status_t setMode(audio_mode_t mode) = 0; 100 101 // mic mute/state 102 virtual status_t setMicMute(bool state) = 0; 103 virtual bool getMicMute() const = 0; 104 105 virtual status_t setParameters(int ioHandle, const String8& keyValuePairs) = 0; 106 virtual String8 getParameters(int ioHandle, const String8& keys) = 0; 107 108 // register a current process for audio output change notifications 109 virtual void registerClient(const sp<IAudioFlingerClient>& client) = 0; 110 111 // retrieve the audio recording buffer size 112 virtual size_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount) = 0; 113 114 virtual int openOutput(uint32_t *pDevices, 115 uint32_t *pSamplingRate, 116 audio_format_t *pFormat, 117 uint32_t *pChannels, 118 uint32_t *pLatencyMs, 119 uint32_t flags) = 0; 120 virtual int openDuplicateOutput(int output1, int output2) = 0; 121 virtual status_t closeOutput(int output) = 0; 122 virtual status_t suspendOutput(int output) = 0; 123 virtual status_t restoreOutput(int output) = 0; 124 125 virtual int openInput(uint32_t *pDevices, 126 uint32_t *pSamplingRate, 127 audio_format_t *pFormat, 128 uint32_t *pChannels, 129 audio_in_acoustics_t acoustics) = 0; 130 virtual status_t closeInput(int input) = 0; 131 132 virtual status_t setStreamOutput(audio_stream_type_t stream, int output) = 0; 133 134 virtual status_t setVoiceVolume(float volume) = 0; 135 136 virtual status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, int output) = 0; 137 138 virtual unsigned int getInputFramesLost(int ioHandle) = 0; 139 140 virtual int newAudioSessionId() = 0; 141 142 virtual void acquireAudioSessionId(int audioSession) = 0; 143 virtual void releaseAudioSessionId(int audioSession) = 0; 144 145 virtual status_t queryNumberEffects(uint32_t *numEffects) = 0; 146 147 virtual status_t queryEffect(uint32_t index, effect_descriptor_t *pDescriptor) = 0; 148 149 virtual status_t getEffectDescriptor(effect_uuid_t *pEffectUUID, effect_descriptor_t *pDescriptor) = 0; 150 151 virtual sp<IEffect> createEffect(pid_t pid, 152 effect_descriptor_t *pDesc, 153 const sp<IEffectClient>& client, 154 int32_t priority, 155 int output, 156 int sessionId, 157 status_t *status, 158 int *id, 159 int *enabled) = 0; 160 161 virtual status_t moveEffects(int session, int srcOutput, int dstOutput) = 0; 162}; 163 164 165// ---------------------------------------------------------------------------- 166 167class BnAudioFlinger : public BnInterface<IAudioFlinger> 168{ 169public: 170 virtual status_t onTransact( uint32_t code, 171 const Parcel& data, 172 Parcel* reply, 173 uint32_t flags = 0); 174}; 175 176// ---------------------------------------------------------------------------- 177 178}; // namespace android 179 180#endif // ANDROID_IAUDIOFLINGER_H 181