michael@0: /* michael@0: * Copyright (C) 2007 The Android Open Source Project michael@0: * michael@0: * Licensed under the Apache License, Version 2.0 (the "License"); michael@0: * you may not use this file except in compliance with the License. michael@0: * You may obtain a copy of the License at michael@0: * michael@0: * http://www.apache.org/licenses/LICENSE-2.0 michael@0: * michael@0: * Unless required by applicable law or agreed to in writing, software michael@0: * distributed under the License is distributed on an "AS IS" BASIS, michael@0: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. michael@0: * See the License for the specific language governing permissions and michael@0: * limitations under the License. michael@0: */ michael@0: michael@0: #ifndef ANDROID_IAUDIOFLINGER_H michael@0: #define ANDROID_IAUDIOFLINGER_H michael@0: michael@0: #include michael@0: #include michael@0: #include michael@0: michael@0: #include michael@0: #include michael@0: #include michael@0: #include "IAudioTrack.h" michael@0: #include "IAudioRecord.h" michael@0: #include "IAudioFlingerClient.h" michael@0: #include "EffectApi.h" michael@0: #include "IEffect.h" michael@0: #include "IEffectClient.h" michael@0: #include michael@0: michael@0: namespace android { michael@0: michael@0: // ---------------------------------------------------------------------------- michael@0: michael@0: class IAudioFlinger : public IInterface michael@0: { michael@0: public: michael@0: DECLARE_META_INTERFACE(AudioFlinger); michael@0: michael@0: /* create an audio track and registers it with AudioFlinger. michael@0: * return null if the track cannot be created. michael@0: */ michael@0: virtual sp createTrack( michael@0: pid_t pid, michael@0: int streamType, michael@0: uint32_t sampleRate, michael@0: int format, michael@0: int channelCount, michael@0: int frameCount, michael@0: uint32_t flags, michael@0: const sp& sharedBuffer, michael@0: int output, michael@0: int *sessionId, michael@0: status_t *status) = 0; michael@0: michael@0: virtual sp openRecord( michael@0: pid_t pid, michael@0: int input, michael@0: uint32_t sampleRate, michael@0: int format, michael@0: int channelCount, michael@0: int frameCount, michael@0: uint32_t flags, michael@0: int *sessionId, michael@0: status_t *status) = 0; michael@0: michael@0: /* query the audio hardware state. This state never changes, michael@0: * and therefore can be cached. michael@0: */ michael@0: virtual uint32_t sampleRate(int output) const = 0; michael@0: virtual int channelCount(int output) const = 0; michael@0: virtual int format(int output) const = 0; michael@0: virtual size_t frameCount(int output) const = 0; michael@0: virtual uint32_t latency(int output) const = 0; michael@0: michael@0: /* set/get the audio hardware state. This will probably be used by michael@0: * the preference panel, mostly. michael@0: */ michael@0: virtual status_t setMasterVolume(float value) = 0; michael@0: virtual status_t setMasterMute(bool muted) = 0; michael@0: michael@0: virtual float masterVolume() const = 0; michael@0: virtual bool masterMute() const = 0; michael@0: michael@0: /* set/get stream type state. This will probably be used by michael@0: * the preference panel, mostly. michael@0: */ michael@0: virtual status_t setStreamVolume(int stream, float value, int output) = 0; michael@0: virtual status_t setStreamMute(int stream, bool muted) = 0; michael@0: michael@0: virtual float streamVolume(int stream, int output) const = 0; michael@0: virtual bool streamMute(int stream) const = 0; michael@0: michael@0: // set audio mode michael@0: virtual status_t setMode(int mode) = 0; michael@0: michael@0: // mic mute/state michael@0: virtual status_t setMicMute(bool state) = 0; michael@0: virtual bool getMicMute() const = 0; michael@0: michael@0: // is any track active on this stream? michael@0: virtual bool isStreamActive(int stream) const = 0; michael@0: michael@0: virtual status_t setParameters(int ioHandle, const String8& keyValuePairs) = 0; michael@0: virtual String8 getParameters(int ioHandle, const String8& keys) = 0; michael@0: michael@0: // register a current process for audio output change notifications michael@0: virtual void registerClient(const sp& client) = 0; michael@0: michael@0: // retrieve the audio recording buffer size michael@0: virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount) = 0; michael@0: michael@0: virtual int openOutput(uint32_t *pDevices, michael@0: uint32_t *pSamplingRate, michael@0: uint32_t *pFormat, michael@0: uint32_t *pChannels, michael@0: uint32_t *pLatencyMs, michael@0: uint32_t flags) = 0; michael@0: virtual int openDuplicateOutput(int output1, int output2) = 0; michael@0: virtual status_t closeOutput(int output) = 0; michael@0: virtual status_t suspendOutput(int output) = 0; michael@0: virtual status_t restoreOutput(int output) = 0; michael@0: michael@0: virtual int openInput(uint32_t *pDevices, michael@0: uint32_t *pSamplingRate, michael@0: uint32_t *pFormat, michael@0: uint32_t *pChannels, michael@0: uint32_t acoustics) = 0; michael@0: virtual status_t closeInput(int input) = 0; michael@0: michael@0: virtual status_t setStreamOutput(uint32_t stream, int output) = 0; michael@0: michael@0: virtual status_t setVoiceVolume(float volume) = 0; michael@0: michael@0: virtual status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, int output) = 0; michael@0: michael@0: virtual unsigned int getInputFramesLost(int ioHandle) = 0; michael@0: michael@0: virtual int newAudioSessionId() = 0; michael@0: michael@0: virtual status_t loadEffectLibrary(const char *libPath, int *handle) = 0; michael@0: michael@0: virtual status_t unloadEffectLibrary(int handle) = 0; michael@0: michael@0: virtual status_t queryNumberEffects(uint32_t *numEffects) = 0; michael@0: michael@0: virtual status_t queryEffect(uint32_t index, effect_descriptor_t *pDescriptor) = 0; michael@0: michael@0: virtual status_t getEffectDescriptor(effect_uuid_t *pEffectUUID, effect_descriptor_t *pDescriptor) = 0; michael@0: michael@0: virtual sp createEffect(pid_t pid, michael@0: effect_descriptor_t *pDesc, michael@0: const sp& client, michael@0: int32_t priority, michael@0: int output, michael@0: int sessionId, michael@0: status_t *status, michael@0: int *id, michael@0: int *enabled) = 0; michael@0: michael@0: virtual status_t moveEffects(int session, int srcOutput, int dstOutput) = 0; michael@0: }; michael@0: michael@0: michael@0: // ---------------------------------------------------------------------------- michael@0: michael@0: class BnAudioFlinger : public BnInterface michael@0: { michael@0: public: michael@0: virtual status_t onTransact( uint32_t code, michael@0: const Parcel& data, michael@0: Parcel* reply, michael@0: uint32_t flags = 0); michael@0: }; michael@0: michael@0: // ---------------------------------------------------------------------------- michael@0: michael@0: }; // namespace android michael@0: michael@0: #endif // ANDROID_IAUDIOFLINGER_H