1f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin/* //device/servers/AudioFlinger/AudioDumpInterface.h 2f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 3f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Copyright 2008, The Android Open Source Project 4f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 5f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Licensed under the Apache License, Version 2.0 (the "License"); 6f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** you may not use this file except in compliance with the License. 7f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** You may obtain a copy of the License at 8f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 9f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** http://www.apache.org/licenses/LICENSE-2.0 10f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 11f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Unless required by applicable law or agreed to in writing, software 12f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** distributed under the License is distributed on an "AS IS" BASIS, 13f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** See the License for the specific language governing permissions and 15f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** limitations under the License. 16f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin*/ 17f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 18f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#ifndef ANDROID_AUDIO_DUMP_INTERFACE_H 19f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#define ANDROID_AUDIO_DUMP_INTERFACE_H 20f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 21f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <stdint.h> 22f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <sys/types.h> 23f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <utils/String8.h> 24f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <utils/SortedVector.h> 25f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 26f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <hardware_legacy/AudioHardwareBase.h> 27f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 28f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinnamespace android { 29f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 30f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#define AUDIO_DUMP_WAVE_HDR_SIZE 44 31f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 32f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioDumpInterface; 33f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 34f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioStreamOutDump : public AudioStreamOut { 35f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinpublic: 36f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamOutDump(AudioDumpInterface *interface, 37f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int id, 38f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamOut* finalStream, 39f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t devices, 40f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int format, 41f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t channels, 42f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t sampleRate); 43f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin ~AudioStreamOutDump(); 44f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 45f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual ssize_t write(const void* buffer, size_t bytes); 46f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t sampleRate() const; 47f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual size_t bufferSize() const; 48f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t channels() const; 49f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual int format() const; 50f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t latency() const; 51f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setVolume(float left, float right); 52f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t standby(); 53f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setParameters(const String8& keyValuePairs); 54f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual String8 getParameters(const String8& keys); 55f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t dump(int fd, const Vector<String16>& args); 56f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin void Close(void); 57f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamOut* finalStream() { return mFinalStream; } 58f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t device() { return mDevice; } 59f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int getId() { return mId; } 60f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t getRenderPosition(uint32_t *dspFrames); 61f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 62f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprivate: 63f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioDumpInterface *mInterface; 64f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mId; 65f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mSampleRate; // 66f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mFormat; // 67f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mChannels; // output configuration 68f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mLatency; // 69f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mDevice; // current device this output is routed to 70f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin size_t mBufferSize; 71f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamOut *mFinalStream; 72f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin FILE *mFile; // output file 73f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mFileCount; 74f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; 75f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 76f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioStreamInDump : public AudioStreamIn { 77f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinpublic: 78f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamInDump(AudioDumpInterface *interface, 79f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int id, 80f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamIn* finalStream, 81f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t devices, 82f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int format, 83f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t channels, 84f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t sampleRate); 85f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin ~AudioStreamInDump(); 86f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 87f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t sampleRate() const; 88f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual size_t bufferSize() const; 89f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t channels() const; 90f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual int format() const; 91f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 92f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setGain(float gain); 93f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual ssize_t read(void* buffer, ssize_t bytes); 94f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t standby(); 95f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setParameters(const String8& keyValuePairs); 96f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual String8 getParameters(const String8& keys); 97f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual unsigned int getInputFramesLost() const; 98f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t dump(int fd, const Vector<String16>& args); 99f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin void Close(void); 100f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamIn* finalStream() { return mFinalStream; } 101f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t device() { return mDevice; } 102f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 103f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprivate: 104f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioDumpInterface *mInterface; 105f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mId; 106f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mSampleRate; // 107f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mFormat; // 108f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mChannels; // output configuration 109f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mDevice; // current device this output is routed to 110f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin size_t mBufferSize; 111f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamIn *mFinalStream; 112f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin FILE *mFile; // output file 113f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mFileCount; 114f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; 115f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 116f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioDumpInterface : public AudioHardwareBase 117f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 118f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 119f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinpublic: 120f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioDumpInterface(AudioHardwareInterface* hw); 121f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual AudioStreamOut* openOutputStream( 122f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t devices, 123f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int *format=0, 124f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *channels=0, 125f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *sampleRate=0, 126f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t *status=0); 127f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual void closeOutputStream(AudioStreamOut* out); 128f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 129f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual ~AudioDumpInterface(); 130f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 131f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t initCheck() 132f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin {return mFinalInterface->initCheck();} 133f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setVoiceVolume(float volume) 134f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin {return mFinalInterface->setVoiceVolume(volume);} 135f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setMasterVolume(float volume) 136f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin {return mFinalInterface->setMasterVolume(volume);} 137f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 138f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setMode(int mode); 139f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 140f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin // mic mute 141f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setMicMute(bool state) 142f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin {return mFinalInterface->setMicMute(state);} 143f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t getMicMute(bool* state) 144f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin {return mFinalInterface->getMicMute(state);} 145f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 146f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setParameters(const String8& keyValuePairs); 147f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual String8 getParameters(const String8& keys); 148f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 149f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount); 150f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 151f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual AudioStreamIn* openInputStream(uint32_t devices, int *format, uint32_t *channels, 152f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *sampleRate, status_t *status, AudioSystem::audio_in_acoustics acoustics); 153f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual void closeInputStream(AudioStreamIn* in); 154f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 155f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t dump(int fd, const Vector<String16>& args) { return mFinalInterface->dumpState(fd, args); } 156f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 157f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin String8 fileName() const { return mFileName; } 158f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprotected: 159f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 160f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioHardwareInterface *mFinalInterface; 161f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin SortedVector<AudioStreamOutDump *> mOutputs; 162f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin SortedVector<AudioStreamInDump *> mInputs; 163f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin Mutex mLock; 164f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin String8 mPolicyCommands; 165f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin String8 mFileName; 166f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; 167f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 168f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; // namespace android 169f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 170f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#endif // ANDROID_AUDIO_DUMP_INTERFACE_H 171