diff options
author | Nishanth Menon | 2014-11-11 17:28:38 -0600 |
---|---|---|
committer | Nishanth Menon | 2014-11-11 17:28:38 -0600 |
commit | 88fc70c0850794fb0bce52f63dfcc0d8f3d5062e (patch) | |
tree | bd2acd9a43827c481dfcca8049f0206c2f7979ef /audio/multizone/AudioHw.h | |
download | device-ti-x15-88fc70c0850794fb0bce52f63dfcc0d8f3d5062e.tar.gz device-ti-x15-88fc70c0850794fb0bce52f63dfcc0d8f3d5062e.tar.xz device-ti-x15-88fc70c0850794fb0bce52f63dfcc0d8f3d5062e.zip |
initial baseline from TI's code
Signed-off-by: Nishanth Menon <nm@ti.com>
Diffstat (limited to 'audio/multizone/AudioHw.h')
-rw-r--r-- | audio/multizone/AudioHw.h | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/audio/multizone/AudioHw.h b/audio/multizone/AudioHw.h new file mode 100644 index 0000000..0d475da --- /dev/null +++ b/audio/multizone/AudioHw.h | |||
@@ -0,0 +1,251 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2013 Texas Instruments | ||
3 | * | ||
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | * you may not use this file except in compliance with the License. | ||
6 | * You may obtain a copy of the License at | ||
7 | * | ||
8 | * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | * | ||
10 | * Unless required by applicable law or agreed to in writing, software | ||
11 | * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | * See the License for the specific language governing permissions and | ||
14 | * limitations under the License. | ||
15 | */ | ||
16 | |||
17 | #ifndef _AUDIO_HW_H_ | ||
18 | #define _AUDIO_HW_H_ | ||
19 | |||
20 | #include <vector> | ||
21 | |||
22 | #include <system/audio.h> | ||
23 | #include <hardware/audio_effect.h> | ||
24 | |||
25 | #include <tiaudioutils/Pcm.h> | ||
26 | #include <tiaudioutils/NullPcm.h> | ||
27 | #include <tiaudioutils/ALSAPcm.h> | ||
28 | #include <tiaudioutils/ALSAMixer.h> | ||
29 | #include <tiaudioutils/MumStream.h> | ||
30 | #include <tiaudioutils/Stream.h> | ||
31 | #include <tiaudioutils/Base.h> | ||
32 | |||
33 | namespace android { | ||
34 | |||
35 | using namespace tiaudioutils; | ||
36 | using std::vector; | ||
37 | |||
38 | class AudioHwDevice; | ||
39 | |||
40 | class AudioStream { | ||
41 | public: | ||
42 | virtual ~AudioStream() {} | ||
43 | virtual uint32_t getSampleRate() const = 0; | ||
44 | virtual int setSampleRate(uint32_t rate) = 0; | ||
45 | virtual size_t getBufferSize() const = 0; | ||
46 | virtual audio_channel_mask_t getChannels() const = 0; | ||
47 | virtual audio_format_t getFormat() const = 0; | ||
48 | virtual int setFormat(audio_format_t format) = 0; | ||
49 | virtual int standby() = 0; | ||
50 | virtual int dump(int fd) const = 0; | ||
51 | virtual audio_devices_t getDevice() const = 0; | ||
52 | virtual int setDevice(audio_devices_t device) { return 0; } /* unused */ | ||
53 | virtual int setParameters(const char *kv_pairs) = 0; | ||
54 | virtual char *getParameters(const char *keys) const = 0; | ||
55 | virtual int addAudioEffect(effect_handle_t effect) const = 0; | ||
56 | virtual int removeAudioEffect(effect_handle_t effect) const = 0; | ||
57 | }; | ||
58 | |||
59 | class AudioStreamOut : public RefBase, public AudioStream { | ||
60 | public: | ||
61 | AudioStreamOut(AudioHwDevice *hwDev, | ||
62 | PcmWriter *writer, | ||
63 | const PcmParams ¶ms, | ||
64 | const SlotMap &map, | ||
65 | audio_devices_t devices); | ||
66 | virtual ~AudioStreamOut() {}; | ||
67 | int initCheck() const; | ||
68 | |||
69 | /* From AudioStream */ | ||
70 | virtual uint32_t getSampleRate() const; | ||
71 | virtual int setSampleRate(uint32_t rate); | ||
72 | virtual size_t getBufferSize() const; | ||
73 | virtual audio_channel_mask_t getChannels() const; | ||
74 | virtual audio_format_t getFormat() const; | ||
75 | virtual int setFormat(audio_format_t format); | ||
76 | virtual int standby(); | ||
77 | virtual int dump(int fd) const; | ||
78 | virtual audio_devices_t getDevice() const; | ||
79 | virtual int setParameters(const char *kv_pairs); | ||
80 | virtual char *getParameters(const char *keys) const; | ||
81 | virtual int addAudioEffect(effect_handle_t effect) const; | ||
82 | virtual int removeAudioEffect(effect_handle_t effect) const; | ||
83 | |||
84 | /* AudioStreamOut specific */ | ||
85 | uint32_t getLatency() const; | ||
86 | int setVolume(float left, float right); | ||
87 | ssize_t write(const void* buffer, size_t bytes); | ||
88 | int getRenderPosition(uint32_t *dsp_frames) const; | ||
89 | int getNextWriteTimestamp(int64_t *timestamp) const; | ||
90 | |||
91 | void setVoiceCall(bool on); | ||
92 | |||
93 | friend AudioHwDevice; | ||
94 | |||
95 | protected: | ||
96 | int resume(); | ||
97 | void idle(); | ||
98 | |||
99 | AudioHwDevice *mHwDev; | ||
100 | NullOutPort mNullPort; | ||
101 | PcmWriter mNullWriter; | ||
102 | PcmWriter *mWriter; | ||
103 | PcmParams mParams; | ||
104 | audio_devices_t mDevices; | ||
105 | sp<OutStream> mStream; | ||
106 | bool mStandby; | ||
107 | bool mUsedForVoiceCall; | ||
108 | Mutex mLock; | ||
109 | }; | ||
110 | |||
111 | class AudioStreamIn : public RefBase, public AudioStream { | ||
112 | public: | ||
113 | AudioStreamIn(AudioHwDevice *hwDev, | ||
114 | PcmReader *reader, | ||
115 | const PcmParams ¶ms, | ||
116 | const SlotMap &map, | ||
117 | audio_devices_t devices); | ||
118 | virtual ~AudioStreamIn() {}; | ||
119 | int initCheck() const; | ||
120 | |||
121 | /* From AudioStream */ | ||
122 | virtual uint32_t getSampleRate() const; | ||
123 | virtual int setSampleRate(uint32_t rate); | ||
124 | virtual size_t getBufferSize() const; | ||
125 | virtual audio_channel_mask_t getChannels() const; | ||
126 | virtual audio_format_t getFormat() const; | ||
127 | virtual int setFormat(audio_format_t format); | ||
128 | virtual int standby(); | ||
129 | virtual int dump(int fd) const; | ||
130 | virtual audio_devices_t getDevice() const; | ||
131 | virtual int setParameters(const char *kv_pairs); | ||
132 | virtual char *getParameters(const char *keys) const; | ||
133 | virtual int addAudioEffect(effect_handle_t effect) const; | ||
134 | virtual int removeAudioEffect(effect_handle_t effect) const; | ||
135 | |||
136 | /* AudioStreamIn specific */ | ||
137 | int setGain(float gain); | ||
138 | ssize_t read(void* buffer, size_t bytes); | ||
139 | uint32_t getInputFramesLost(); | ||
140 | |||
141 | protected: | ||
142 | int resume(); | ||
143 | void idle(); | ||
144 | |||
145 | AudioHwDevice *mHwDev; | ||
146 | PcmReader *mReader; | ||
147 | PcmParams mParams; | ||
148 | audio_devices_t mDevices; | ||
149 | audio_source_t mSource; | ||
150 | sp<InStream> mStream; | ||
151 | bool mStandby; | ||
152 | Mutex mLock; | ||
153 | }; | ||
154 | |||
155 | class AudioHwDevice { | ||
156 | public: | ||
157 | AudioHwDevice(uint32_t card); | ||
158 | virtual ~AudioHwDevice(); | ||
159 | |||
160 | uint32_t getSupportedDevices() const; | ||
161 | int initCheck() const; | ||
162 | int setVoiceVolume(float volume); | ||
163 | int setMasterVolume(float volume); | ||
164 | int setMode(audio_mode_t mode); | ||
165 | int setMicMute(bool state); | ||
166 | int getMicMute(bool *state) const; | ||
167 | int setParameters(const char *kv_pairs); | ||
168 | char *getParameters(const char *keys) const; | ||
169 | size_t getInputBufferSize(const struct audio_config *config) const; | ||
170 | int dump(int fd) const; | ||
171 | int setMasterMute(bool mute); | ||
172 | AudioStreamIn* openInputStream(audio_io_handle_t handle, | ||
173 | audio_devices_t devices, | ||
174 | struct audio_config *config); | ||
175 | void closeInputStream(AudioStreamIn *in); | ||
176 | AudioStreamOut* openOutputStream(audio_io_handle_t handle, | ||
177 | audio_devices_t devices, | ||
178 | audio_output_flags_t flags, | ||
179 | struct audio_config *config); | ||
180 | void closeOutputStream(AudioStreamOut *out); | ||
181 | |||
182 | friend class AudioStreamIn; | ||
183 | friend class AudioStreamOut; | ||
184 | |||
185 | static const uint32_t kNumPorts = 3; | ||
186 | static const uint32_t kCPUPortId = 0; | ||
187 | static const uint32_t kJAMR3PortId = 1; | ||
188 | static const uint32_t kBTPortId = 2; | ||
189 | static const uint32_t kCPUNumChannels = 2; | ||
190 | static const uint32_t kJAMR3NumChannels = 8; | ||
191 | static const uint32_t kBTNumChannels = 2; | ||
192 | |||
193 | static const uint32_t kSampleRate = 44100; | ||
194 | static const uint32_t kBTSampleRate = 8000; | ||
195 | static const uint32_t kSampleSize = 16; | ||
196 | static const uint32_t kCaptureFrameCount = 882; | ||
197 | static const uint32_t kPlaybackFrameCount = 1024; | ||
198 | static const uint32_t kBTFrameCount = 160; | ||
199 | |||
200 | static const uint32_t kADCSettleMs = 80; | ||
201 | static const uint32_t kVoiceCallPipeMs = 100; | ||
202 | |||
203 | static const float kVoiceDBMax = 0.0f; | ||
204 | static const float kVoiceDBMin = -24.0f; | ||
205 | static const char *kCabinVolumeHP; | ||
206 | static const char *kCabinVolumeLine; | ||
207 | static const char *kBTMode; | ||
208 | |||
209 | protected: | ||
210 | typedef set< sp<AudioStreamIn> > StreamInSet; | ||
211 | typedef set< sp<AudioStreamOut> > StreamOutSet; | ||
212 | typedef vector<ALSAInPort*> InPortVect; | ||
213 | typedef vector<ALSAOutPort*> OutPortVect; | ||
214 | typedef vector<PcmReader*> ReaderVect; | ||
215 | typedef vector<PcmWriter*> WriterVect; | ||
216 | |||
217 | bool usesJAMR3() const { return mMediaPortId == kJAMR3PortId; } | ||
218 | const char *getModeName(audio_mode_t mode) const; | ||
219 | int enterVoiceCall(); | ||
220 | void leaveVoiceCall(); | ||
221 | int enableVoiceCall(); | ||
222 | void disableVoiceCall(); | ||
223 | |||
224 | uint32_t mCardId; | ||
225 | ALSAMixer mMixer; | ||
226 | InPortVect mInPorts; | ||
227 | OutPortVect mOutPorts; | ||
228 | ReaderVect mReaders; | ||
229 | WriterVect mWriters; | ||
230 | StreamInSet mInStreams; | ||
231 | StreamOutSet mOutStreams; | ||
232 | bool mMicMute; | ||
233 | audio_mode_t mMode; | ||
234 | uint32_t mMediaPortId; | ||
235 | wp<AudioStreamOut> mPrimaryStreamOut; | ||
236 | tiaudioutils::MonoPipe *mULPipe; | ||
237 | tiaudioutils::MonoPipe *mDLPipe; | ||
238 | PipeWriter *mULPipeWriter; | ||
239 | PipeWriter *mDLPipeWriter; | ||
240 | PipeReader *mULPipeReader; | ||
241 | PipeReader *mDLPipeReader; | ||
242 | sp<InStream> mVoiceULInStream; | ||
243 | sp<InStream> mVoiceDLInStream; | ||
244 | sp<OutStream> mVoiceULOutStream; | ||
245 | sp<OutStream> mVoiceDLOutStream; | ||
246 | mutable Mutex mLock; | ||
247 | }; | ||
248 | |||
249 | }; // namespace android | ||
250 | |||
251 | #endif /* _AUDIO_HW_H_ */ | ||