• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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