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