1 /* //device/servers/AudioFlinger/AudioHardwareStub.cpp
3 ** Copyright 2007, The Android Open Source Project
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
9 ** http://www.apache.org/licenses/LICENSE-2.0
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.
19 #include <sys/types.h>
23 #include <utils/String8.h>
25 #include "AudioHardwareStub.h"
26 #include <media/AudioRecord.h>
28 namespace android_audio_legacy {
30 // ----------------------------------------------------------------------------
32 AudioHardwareStub::AudioHardwareStub() : mMicMute(false)
36 AudioHardwareStub::~AudioHardwareStub()
40 status_t AudioHardwareStub::initCheck()
45 AudioStreamOut* AudioHardwareStub::openOutputStream(
46 uint32_t devices, int *format, uint32_t *channels, uint32_t *sampleRate, status_t *status)
48 AudioStreamOutStub* out = new AudioStreamOutStub();
49 status_t lStatus = out->set(format, channels, sampleRate);
53 if (lStatus == NO_ERROR)
59 void AudioHardwareStub::closeOutputStream(AudioStreamOut* out)
64 AudioStreamIn* AudioHardwareStub::openInputStream(
65 uint32_t devices, int *format, uint32_t *channels, uint32_t *sampleRate,
66 status_t *status, AudioSystem::audio_in_acoustics acoustics)
68 // check for valid input source
69 if (!AudioSystem::isInputDevice((AudioSystem::audio_devices)devices)) {
73 AudioStreamInStub* in = new AudioStreamInStub();
74 status_t lStatus = in->set(format, channels, sampleRate, acoustics);
78 if (lStatus == NO_ERROR)
84 void AudioHardwareStub::closeInputStream(AudioStreamIn* in)
89 status_t AudioHardwareStub::setVoiceVolume(float volume)
94 status_t AudioHardwareStub::setMasterVolume(float volume)
99 status_t AudioHardwareStub::dumpInternals(int fd, const Vector<String16>& args)
101 const size_t SIZE = 256;
104 result.append("AudioHardwareStub::dumpInternals\n");
105 snprintf(buffer, SIZE, "\tmMicMute: %s\n", mMicMute? "true": "false");
106 result.append(buffer);
107 ::write(fd, result.string(), result.size());
111 status_t AudioHardwareStub::dump(int fd, const Vector<String16>& args)
113 dumpInternals(fd, args);
117 // ----------------------------------------------------------------------------
119 status_t AudioStreamOutStub::set(int *pFormat, uint32_t *pChannels, uint32_t *pRate)
121 if (pFormat) *pFormat = format();
122 if (pChannels) *pChannels = channels();
123 if (pRate) *pRate = sampleRate();
128 ssize_t AudioStreamOutStub::write(const void* buffer, size_t bytes)
130 // fake timing for audio output
131 usleep(bytes * 1000000 / sizeof(int16_t) / AudioSystem::popCount(channels()) / sampleRate());
135 status_t AudioStreamOutStub::standby()
140 status_t AudioStreamOutStub::dump(int fd, const Vector<String16>& args)
142 const size_t SIZE = 256;
145 snprintf(buffer, SIZE, "AudioStreamOutStub::dump\n");
146 snprintf(buffer, SIZE, "\tsample rate: %d\n", sampleRate());
147 snprintf(buffer, SIZE, "\tbuffer size: %d\n", bufferSize());
148 snprintf(buffer, SIZE, "\tchannels: %d\n", channels());
149 snprintf(buffer, SIZE, "\tformat: %d\n", format());
150 result.append(buffer);
151 ::write(fd, result.string(), result.size());
155 String8 AudioStreamOutStub::getParameters(const String8& keys)
157 AudioParameter param = AudioParameter(keys);
158 return param.toString();
161 status_t AudioStreamOutStub::getRenderPosition(uint32_t *dspFrames)
163 return INVALID_OPERATION;
166 // ----------------------------------------------------------------------------
168 status_t AudioStreamInStub::set(int *pFormat, uint32_t *pChannels, uint32_t *pRate,
169 AudioSystem::audio_in_acoustics acoustics)
174 ssize_t AudioStreamInStub::read(void* buffer, ssize_t bytes)
176 // fake timing for audio input
177 usleep(bytes * 1000000 / sizeof(int16_t) / AudioSystem::popCount(channels()) / sampleRate());
178 memset(buffer, 0, bytes);
182 status_t AudioStreamInStub::dump(int fd, const Vector<String16>& args)
184 const size_t SIZE = 256;
187 snprintf(buffer, SIZE, "AudioStreamInStub::dump\n");
188 result.append(buffer);
189 snprintf(buffer, SIZE, "\tsample rate: %d\n", sampleRate());
190 result.append(buffer);
191 snprintf(buffer, SIZE, "\tbuffer size: %d\n", bufferSize());
192 result.append(buffer);
193 snprintf(buffer, SIZE, "\tchannels: %d\n", channels());
194 result.append(buffer);
195 snprintf(buffer, SIZE, "\tformat: %d\n", format());
196 result.append(buffer);
197 ::write(fd, result.string(), result.size());
201 String8 AudioStreamInStub::getParameters(const String8& keys)
203 AudioParameter param = AudioParameter(keys);
204 return param.toString();
207 // ----------------------------------------------------------------------------
209 }; // namespace android