Patch for coverage
[platform/core/api/audio-io.git] / src / cpp / CPulseStreamSpec.cpp
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
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
18 #include "CAudioIODef.h"
19
20
21 using namespace std;
22 using namespace tizen_media_audio;
23
24
25 static const char* STREAM_NAME_INPUT_LOW_LATENCY   = "LOW LATENCY CAPTURE";
26 static const char* STREAM_NAME_INPUT_MID_LATENCY   = "MID LATENCY CAPTURE";
27 static const char* STREAM_NAME_INPUT_HIGH_LATENCY  = "HIGH LATENCY CAPTURE";
28 static const char* STREAM_NAME_INPUT_VOIP          = "VOIP CAPTURE";
29 static const char* STREAM_NAME_INPUT_DEFAULT       = "DEFAULT CAPTURE";
30
31 static const char* STREAM_NAME_OUTPUT_LOW_LATENCY  = "LOW LATENCY PLAYBACK";
32 static const char* STREAM_NAME_OUTPUT_MID_LATENCY  = "MID LATENCY PLAYBACK";
33 static const char* STREAM_NAME_OUTPUT_HIGH_LATENCY = "HIGH LATENCY PLAYBACK";
34 static const char* STREAM_NAME_OUTPUT_VOIP         = "VOIP PLAYBACK";
35 static const char* STREAM_NAME_OUTPUT_DEFAULT      = "DEFAULT PLAYBACK";
36 static const char* STREAM_NAME_OUTPUT_DEFAULT_ASYNC      = "DEFAULT PLAYBACK ASYNC";
37
38 static const char* STREAM_LATENCY_LOW     = "low";
39 static const char* STREAM_LATENCY_MID     = "mid";
40 static const char* STREAM_LATENCY_HIGH    = "high";
41 static const char* STREAM_LATENCY_VOIP    = "voip";
42 static const char* STREAM_LATENCY_DEFAULT = "default";
43 static const char* STREAM_LATENCY_DEFAULT_ASYNC = "default-async";
44
45
46 CPulseStreamSpec::CPulseStreamSpec():
47     __mLatency(EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT),
48     __mStreamName(NULL) {
49     __adjustSpec();
50 }
51
52 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo) :
53     __mLatency(latency),
54     __mAudioInfo(audioInfo),
55     __mStreamName(NULL) {
56     __adjustSpec();
57 }
58
59 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo, int customLatency) :
60     __mLatency(latency),
61     __mAudioInfo(audioInfo),
62     __mStreamName(NULL) {
63     __adjustSpec();
64 }
65
66 CPulseStreamSpec::~CPulseStreamSpec() {
67 }
68
69 void CPulseStreamSpec::__adjustSpec() {
70     // Sets a sampleRate
71     __mSampleSpec.rate = __mAudioInfo.getSampleRate();
72
73     // Convert channels for PA
74     switch (__mAudioInfo.getChannel()) {
75     case CAudioInfo::EChannel::CHANNEL_MONO:
76         __mSampleSpec.channels = 1;
77         break;
78
79     case CAudioInfo::EChannel::CHANNEL_STEREO:
80     default:
81         __mSampleSpec.channels = 2;
82         break;
83     }
84
85     // Convert format for PA
86     switch (__mAudioInfo.getSampleType()) {
87     case CAudioInfo::ESampleType::SAMPLE_TYPE_U8:
88         __mSampleSpec.format = PA_SAMPLE_U8;
89         break;
90
91     case CAudioInfo::ESampleType::SAMPLE_TYPE_S16_LE:
92         __mSampleSpec.format = PA_SAMPLE_S16LE;
93         break;
94
95     case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_LE:
96         __mSampleSpec.format = PA_SAMPLE_S24LE;
97         break;
98
99     case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_32_LE:
100         __mSampleSpec.format = PA_SAMPLE_S24_32LE;
101         break;
102
103     default:
104         __mSampleSpec.format = PA_SAMPLE_S16LE;
105         break;
106     }
107
108     // Sets channelmap
109     pa_channel_map_init_auto(&__mChannelMap, __mSampleSpec.channels, PA_CHANNEL_MAP_ALSA);
110
111     // Sets stream name
112     switch (__mLatency) {
113 //LCOV_EXCL_START
114     case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
115         __mStreamName = STREAM_NAME_INPUT_LOW_LATENCY;
116         break;
117
118     case EStreamLatency::STREAM_LATENCY_INPUT_MID:
119         __mStreamName = STREAM_NAME_INPUT_MID_LATENCY;
120         break;
121
122     case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
123         __mStreamName = STREAM_NAME_INPUT_HIGH_LATENCY;
124         break;
125
126     case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
127         __mStreamName = STREAM_NAME_INPUT_VOIP;
128         break;
129 //LCOV_EXCL_STOP
130
131     case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
132         __mStreamName = STREAM_NAME_INPUT_DEFAULT;
133         break;
134
135 //LCOV_EXCL_START
136     case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
137         __mStreamName = STREAM_NAME_OUTPUT_LOW_LATENCY;
138         break;
139
140     case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
141         __mStreamName = STREAM_NAME_OUTPUT_MID_LATENCY;
142         break;
143
144     case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
145         __mStreamName = STREAM_NAME_OUTPUT_HIGH_LATENCY;
146         break;
147
148     case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
149         __mStreamName = STREAM_NAME_OUTPUT_VOIP;
150         break;
151 //LCOV_EXCL_STOP
152
153     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
154         __mStreamName = STREAM_NAME_OUTPUT_DEFAULT;
155         break;
156
157     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC:
158         __mStreamName = STREAM_NAME_OUTPUT_DEFAULT_ASYNC;
159         break;
160
161 //LCOV_EXCL_START
162     default:
163         AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
164         break;
165     }
166 //LCOV_EXCL_STOP
167 }
168
169 CPulseStreamSpec::EStreamLatency CPulseStreamSpec::getStreamLatency() {
170     return __mLatency;
171 }
172
173 const char* CPulseStreamSpec::getStreamLatencyToString() {
174     const char* latency;
175
176     switch (__mLatency) {
177 //LCOV_EXCL_START
178     case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
179     case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
180         latency = STREAM_LATENCY_LOW;
181         break;
182
183     case EStreamLatency::STREAM_LATENCY_INPUT_MID:
184     case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
185         latency = STREAM_LATENCY_MID;
186         break;
187
188     case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
189     case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
190         latency = STREAM_LATENCY_HIGH;
191         break;
192
193     case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
194     case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
195         latency = STREAM_LATENCY_VOIP;
196         break;
197 //LCOV_EXCL_STOP
198
199     case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
200     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
201         latency = STREAM_LATENCY_DEFAULT;
202         break;
203
204     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC:
205         latency = STREAM_LATENCY_DEFAULT_ASYNC;
206         break;
207
208 //LCOV_EXCL_START
209     default:
210         AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
211         latency = STREAM_LATENCY_DEFAULT;
212         break;
213 //LCOV_EXCL_STOP
214     }
215
216     return latency;
217 }
218
219 CAudioInfo& CPulseStreamSpec::getAudioInfo() {
220     return __mAudioInfo;
221 }
222
223 pa_sample_spec CPulseStreamSpec::getSampleSpec() {
224     return __mSampleSpec;
225 }
226
227 pa_channel_map CPulseStreamSpec::getChannelMap() {
228     return __mChannelMap;
229 }
230
231 const char* CPulseStreamSpec::getStreamName() {
232     return __mStreamName;
233 }