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; } 59 getId()60 int getId() { return mId; } 61 private: 62 AudioDumpInterface *mInterface; 63 int mId; 64 uint32_t mSampleRate; // 65 uint32_t mFormat; // 66 uint32_t mChannels; // output configuration 67 uint32_t mLatency; // 68 uint32_t mDevice; // current device this output is routed to 69 size_t mBufferSize; 70 AudioStreamOut *mFinalStream; 71 FILE *mOutFile; // output file 72 int mFileCount; 73 }; 74 75 class AudioStreamInDump : public AudioStreamIn { 76 public: 77 AudioStreamInDump(AudioDumpInterface *interface, 78 int id, 79 AudioStreamIn* finalStream, 80 uint32_t devices, 81 int format, 82 uint32_t channels, 83 uint32_t sampleRate); 84 ~AudioStreamInDump(); 85 86 virtual uint32_t sampleRate() const; 87 virtual size_t bufferSize() const; 88 virtual uint32_t channels() const; 89 virtual int format() const; 90 91 virtual status_t setGain(float gain); 92 virtual ssize_t read(void* buffer, ssize_t bytes); 93 virtual status_t standby(); 94 virtual status_t setParameters(const String8& keyValuePairs); 95 virtual String8 getParameters(const String8& keys); 96 virtual status_t dump(int fd, const Vector<String16>& args); 97 void Close(void); finalStream()98 AudioStreamIn* finalStream() { return mFinalStream; } device()99 uint32_t device() { return mDevice; } 100 101 private: 102 AudioDumpInterface *mInterface; 103 int mId; 104 uint32_t mSampleRate; // 105 uint32_t mFormat; // 106 uint32_t mChannels; // output configuration 107 uint32_t mDevice; // current device this output is routed to 108 size_t mBufferSize; 109 AudioStreamIn *mFinalStream; 110 FILE *mInFile; // output file 111 }; 112 113 class AudioDumpInterface : public AudioHardwareBase 114 { 115 116 public: 117 AudioDumpInterface(AudioHardwareInterface* hw); 118 virtual AudioStreamOut* openOutputStream( 119 uint32_t devices, 120 int *format=0, 121 uint32_t *channels=0, 122 uint32_t *sampleRate=0, 123 status_t *status=0); 124 virtual void closeOutputStream(AudioStreamOut* out); 125 126 virtual ~AudioDumpInterface(); 127 initCheck()128 virtual status_t initCheck() 129 {return mFinalInterface->initCheck();} setVoiceVolume(float volume)130 virtual status_t setVoiceVolume(float volume) 131 {return mFinalInterface->setVoiceVolume(volume);} setMasterVolume(float volume)132 virtual status_t setMasterVolume(float volume) 133 {return mFinalInterface->setMasterVolume(volume);} 134 135 // mic mute setMicMute(bool state)136 virtual status_t setMicMute(bool state) 137 {return mFinalInterface->setMicMute(state);} getMicMute(bool * state)138 virtual status_t getMicMute(bool* state) 139 {return mFinalInterface->getMicMute(state);} 140 141 virtual status_t setParameters(const String8& keyValuePairs); 142 virtual String8 getParameters(const String8& keys); 143 144 virtual AudioStreamIn* openInputStream(uint32_t devices, int *format, uint32_t *channels, 145 uint32_t *sampleRate, status_t *status, AudioSystem::audio_in_acoustics acoustics); 146 virtual void closeInputStream(AudioStreamIn* in); 147 dump(int fd,const Vector<String16> & args)148 virtual status_t dump(int fd, const Vector<String16>& args) { return mFinalInterface->dumpState(fd, args); } 149 fileName()150 String8 fileName() const { return mFileName; } 151 protected: 152 153 AudioHardwareInterface *mFinalInterface; 154 SortedVector<AudioStreamOutDump *> mOutputs; 155 bool mFirstHwOutput; 156 SortedVector<AudioStreamInDump *> mInputs; 157 Mutex mLock; 158 String8 mPolicyCommands; 159 String8 mFileName; 160 }; 161 162 }; // namespace android 163 164 #endif // ANDROID_AUDIO_DUMP_INTERFACE_H 165