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