blob: 10cc45d2d659bed4acc05ad0e95fcdc20ec3b5fa [file] [log] [blame]
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -07001/*
2**
3** Copyright 2007, 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_HARDWARE_GENERIC_H
19#define ANDROID_AUDIO_HARDWARE_GENERIC_H
20
21#include <stdint.h>
22#include <sys/types.h>
23
24#include <utils/threads.h>
25
26#include <hardware/AudioHardwareInterface.h>
27
28namespace android {
29
30// ----------------------------------------------------------------------------
31
32class AudioHardwareGeneric;
33
34class AudioStreamOutGeneric : public AudioStreamOut {
35public:
36 AudioStreamOutGeneric() : mAudioHardware(0), mFd(-1) {}
37 virtual ~AudioStreamOutGeneric();
38
39 virtual status_t set(
40 AudioHardwareGeneric *hw,
41 int mFd,
42 int format,
43 int channelCount,
44 uint32_t sampleRate);
45
46 virtual uint32_t sampleRate() const { return 44100; }
47 virtual size_t bufferSize() const { return 4096; }
48 virtual int channelCount() const { return 2; }
49 virtual int format() const { return AudioSystem::PCM_16_BIT; }
50 virtual status_t setVolume(float volume) { return INVALID_OPERATION; }
51 virtual ssize_t write(const void* buffer, size_t bytes);
52 virtual status_t dump(int fd, const Vector<String16>& args);
53
54private:
55 AudioHardwareGeneric *mAudioHardware;
56 Mutex mLock;
57 int mFd;
58};
59
60class AudioStreamInGeneric : public AudioStreamIn {
61public:
62 AudioStreamInGeneric() : mAudioHardware(0), mFd(-1) {}
63 virtual ~AudioStreamInGeneric();
64
65 virtual status_t set(
66 AudioHardwareGeneric *hw,
67 int mFd,
68 int format,
69 int channelCount,
70 uint32_t sampleRate);
71
72 uint32_t sampleRate() const { return 8000; }
73 virtual size_t bufferSize() const { return 320; }
74 virtual int channelCount() const { return 1; }
75 virtual int format() const { return AudioSystem::PCM_16_BIT; }
76 virtual status_t setGain(float gain) { return INVALID_OPERATION; }
77 virtual ssize_t read(void* buffer, ssize_t bytes);
78 virtual status_t dump(int fd, const Vector<String16>& args);
79
80private:
81 AudioHardwareGeneric *mAudioHardware;
82 Mutex mLock;
83 int mFd;
84};
85
86
87class AudioHardwareGeneric : public AudioHardwareInterface
88{
89public:
90 AudioHardwareGeneric();
91 virtual ~AudioHardwareGeneric();
92 virtual status_t initCheck();
93 virtual status_t standby();
94 virtual status_t setVoiceVolume(float volume);
95 virtual status_t setMasterVolume(float volume);
96
97 // mic mute
98 virtual status_t setMicMute(bool state);
99 virtual status_t getMicMute(bool* state);
100
101 virtual status_t setParameter(const char* key, const char* value)
102 { return NO_ERROR; }
103
104 // create I/O streams
105 virtual AudioStreamOut* openOutputStream(
106 int format=0,
107 int channelCount=0,
108 uint32_t sampleRate=0);
109
110 virtual AudioStreamIn* openInputStream(
111 int format,
112 int channelCount,
113 uint32_t sampleRate);
114
115 void closeOutputStream(AudioStreamOutGeneric* out);
116 void closeInputStream(AudioStreamInGeneric* in);
117protected:
118 virtual status_t doRouting() { return NO_ERROR; }
119 virtual status_t dump(int fd, const Vector<String16>& args);
120
121private:
122 status_t dumpInternals(int fd, const Vector<String16>& args);
123
124 Mutex mLock;
125 AudioStreamOutGeneric *mOutput;
126 AudioStreamInGeneric *mInput;
127 int mFd;
128 bool mMicMute;
129};
130
131// ----------------------------------------------------------------------------
132
133}; // namespace android
134
135#endif // ANDROID_AUDIO_HARDWARE_GENERIC_H