AudioHardware: Dispatch setParameters to input and output
[tinyalsa-audio.git] / AudioStreamOut.h
1 /*
2  * Copyright (C) 2012 Paul Kocialkowski <contact@paulk.fr>
3  *
4  * This is based on TinyHardware:
5  * Copyright 2011 Wolfson Microelectronics plc
6  *
7  * This is based on Nexus S AudioHardware implementation:
8  * Copyright 2010, The Android Open-Source Project
9  *
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  *     http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  */
22
23 #ifndef TINYALSA_AUDIO_STREAM_OUT_H
24 #define TINYALSA_AUDIO_STREAM_OUT_H
25
26 #include <hardware_legacy/AudioHardwareBase.h>
27 #include "AudioHardware.h"
28 #include "Mixer.h"
29
30 namespace android {
31
32 class AudioHardware;
33
34 class TinyALSAAudioStreamOut : public AudioStreamOut
35 {
36 public:
37         TinyALSAAudioStreamOut();
38         virtual ~TinyALSAAudioStreamOut();
39
40         virtual status_t set(AudioHardware *hw, uint32_t devices,
41                 int *pFormat, uint32_t *pChannels, uint32_t *pRate);
42
43         virtual uint32_t sampleRate(void) const;
44         virtual size_t bufferSize(void) const;
45         virtual uint32_t channels(void) const;
46         virtual int format(void) const;
47         virtual uint32_t latency(void) const;
48
49         virtual ssize_t write(const void* buffer, size_t bytes);
50         virtual status_t standby(void);
51
52         virtual status_t setParameters(const String8& keyValuePairs);
53         virtual String8 getParameters(const String8& keys);
54
55         virtual status_t getRenderPosition(uint32_t *dspFrames);
56         virtual status_t setVolume(float left, float right);
57         virtual status_t dump(int fd, const Vector<String16>& args);
58
59         AudioHardware *mAudioHardware;
60         TinyALSAMixer *mMixer;
61
62 private:
63         Mutex mLock;
64
65         struct pcm *mPcm;
66         struct pcm_config mPcmConfig;
67
68         uint32_t mDevice;
69 };
70
71 }; // namespace android
72
73 #endif