blob: 1136ce1bcb25c75513c2079f2cf1af1f96bef399 [file] [log] [blame]
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -08001/* //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>
Eric Laurent9d91ad52009-07-17 12:17:14 -070023#include <utils/String8.h>
24#include <utils/SortedVector.h>
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080025
26#include <hardware_legacy/AudioHardwareBase.h>
27
28namespace android {
29
Eric Laurent9d91ad52009-07-17 12:17:14 -070030#define AUDIO_DUMP_WAVE_HDR_SIZE 44
31
32class AudioDumpInterface;
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080033
34class AudioStreamOutDump : public AudioStreamOut {
35public:
Eric Laurent9d91ad52009-07-17 12:17:14 -070036 AudioStreamOutDump(AudioDumpInterface *interface,
37 int id,
38 AudioStreamOut* finalStream,
39 uint32_t devices,
40 int format,
41 uint32_t channels,
42 uint32_t sampleRate);
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080043 ~AudioStreamOutDump();
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080044
Eric Laurent9d91ad52009-07-17 12:17:14 -070045 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);
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080052 virtual status_t standby();
Eric Laurent9d91ad52009-07-17 12:17:14 -070053 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);
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080056 void Close(void);
Eric Laurent9d91ad52009-07-17 12:17:14 -070057 AudioStreamOut* finalStream() { return mFinalStream; }
58 uint32_t device() { return mDevice; }
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080059
Eric Laurent29b9eff2009-08-04 07:29:18 -070060 int getId() { return mId; }
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080061private:
Eric Laurent9d91ad52009-07-17 12:17:14 -070062 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;
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080070 AudioStreamOut *mFinalStream;
Eric Laurent9d91ad52009-07-17 12:17:14 -070071 FILE *mOutFile; // output file
72 int mFileCount;
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -080073};
74
Eric Laurent9d91ad52009-07-17 12:17:14 -070075class AudioStreamInDump : public AudioStreamIn {
76public:
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);
98 AudioStreamIn* finalStream() { return mFinalStream; }
99 uint32_t device() { return mDevice; }
100
101private:
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};
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -0800112
113class AudioDumpInterface : public AudioHardwareBase
114{
115
116public:
117 AudioDumpInterface(AudioHardwareInterface* hw);
118 virtual AudioStreamOut* openOutputStream(
Eric Laurent9d91ad52009-07-17 12:17:14 -0700119 uint32_t devices,
120 int *format=0,
121 uint32_t *channels=0,
122 uint32_t *sampleRate=0,
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -0800123 status_t *status=0);
Eric Laurent9d91ad52009-07-17 12:17:14 -0700124 virtual void closeOutputStream(AudioStreamOut* out);
125
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -0800126 virtual ~AudioDumpInterface();
127
128 virtual status_t initCheck()
129 {return mFinalInterface->initCheck();}
130 virtual status_t setVoiceVolume(float volume)
131 {return mFinalInterface->setVoiceVolume(volume);}
132 virtual status_t setMasterVolume(float volume)
133 {return mFinalInterface->setMasterVolume(volume);}
134
135 // mic mute
136 virtual status_t setMicMute(bool state)
137 {return mFinalInterface->setMicMute(state);}
138 virtual status_t getMicMute(bool* state)
139 {return mFinalInterface->getMicMute(state);}
140
Eric Laurent9d91ad52009-07-17 12:17:14 -0700141 virtual status_t setParameters(const String8& keyValuePairs);
142 virtual String8 getParameters(const String8& keys);
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -0800143
Eric Laurent9d91ad52009-07-17 12:17:14 -0700144 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);
Dave Sparks65547732009-05-19 18:28:20 -0700147
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -0800148 virtual status_t dump(int fd, const Vector<String16>& args) { return mFinalInterface->dumpState(fd, args); }
149
Eric Laurent9d91ad52009-07-17 12:17:14 -0700150 String8 fileName() const { return mFileName; }
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -0800151protected:
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -0800152
Eric Laurent9d91ad52009-07-17 12:17:14 -0700153 AudioHardwareInterface *mFinalInterface;
154 SortedVector<AudioStreamOutDump *> mOutputs;
155 bool mFirstHwOutput;
156 SortedVector<AudioStreamInDump *> mInputs;
157 Mutex mLock;
158 String8 mPolicyCommands;
159 String8 mFileName;
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -0800160};
161
162}; // namespace android
163
164#endif // ANDROID_AUDIO_DUMP_INTERFACE_H