Exclude more coverage check which can't be covered by this module
[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 //LCOV_EXCL_START
46 CPulseStreamSpec::CPulseStreamSpec():
47     __mLatency(EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT),
48     __mStreamName(NULL) {
49     __adjustSpec();
50 }
51 //LCOV_EXCL_STOP
52
53 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo) :
54     __mLatency(latency),
55     __mAudioInfo(audioInfo),
56     __mStreamName(NULL) {
57     __adjustSpec();
58 }
59
60 //LCOV_EXCL_START
61 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo, int customLatency) :
62     __mLatency(latency),
63     __mAudioInfo(audioInfo),
64     __mStreamName(NULL) {
65     __adjustSpec();
66 }
67 //LCOV_EXCL_STOP
68
69 CPulseStreamSpec::~CPulseStreamSpec() {
70 }
71
72 void CPulseStreamSpec::__adjustSpec() {
73     // Sets a sampleRate
74     __mSampleSpec.rate = __mAudioInfo.getSampleRate();
75
76     // Convert channels for PA
77     switch (__mAudioInfo.getChannel()) {
78     case CAudioInfo::EChannel::CHANNEL_MONO:
79         __mSampleSpec.channels = 1;
80         break;
81
82     case CAudioInfo::EChannel::CHANNEL_STEREO:
83     default:
84         __mSampleSpec.channels = 2;
85         break;
86     }
87
88     // Convert format for PA
89     switch (__mAudioInfo.getSampleType()) {
90     case CAudioInfo::ESampleType::SAMPLE_TYPE_U8:
91         __mSampleSpec.format = PA_SAMPLE_U8;
92         break;
93
94     case CAudioInfo::ESampleType::SAMPLE_TYPE_S16_LE:
95         __mSampleSpec.format = PA_SAMPLE_S16LE;
96         break;
97
98     case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_LE:
99         __mSampleSpec.format = PA_SAMPLE_S24LE;
100         break;
101
102     case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_32_LE:
103         __mSampleSpec.format = PA_SAMPLE_S24_32LE;
104         break;
105
106     default:
107         __mSampleSpec.format = PA_SAMPLE_S16LE;
108         break;
109     }
110
111     // Sets channelmap
112     pa_channel_map_init_auto(&__mChannelMap, __mSampleSpec.channels, PA_CHANNEL_MAP_ALSA);
113
114     // Sets stream name
115     switch (__mLatency) {
116 //LCOV_EXCL_START
117     case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
118         __mStreamName = STREAM_NAME_INPUT_LOW_LATENCY;
119         break;
120
121     case EStreamLatency::STREAM_LATENCY_INPUT_MID:
122         __mStreamName = STREAM_NAME_INPUT_MID_LATENCY;
123         break;
124
125     case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
126         __mStreamName = STREAM_NAME_INPUT_HIGH_LATENCY;
127         break;
128
129     case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
130         __mStreamName = STREAM_NAME_INPUT_VOIP;
131         break;
132 //LCOV_EXCL_STOP
133
134     case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
135         __mStreamName = STREAM_NAME_INPUT_DEFAULT;
136         break;
137
138 //LCOV_EXCL_START
139     case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
140         __mStreamName = STREAM_NAME_OUTPUT_LOW_LATENCY;
141         break;
142
143     case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
144         __mStreamName = STREAM_NAME_OUTPUT_MID_LATENCY;
145         break;
146
147     case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
148         __mStreamName = STREAM_NAME_OUTPUT_HIGH_LATENCY;
149         break;
150
151     case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
152         __mStreamName = STREAM_NAME_OUTPUT_VOIP;
153         break;
154 //LCOV_EXCL_STOP
155
156     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
157         __mStreamName = STREAM_NAME_OUTPUT_DEFAULT;
158         break;
159
160     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC:
161         __mStreamName = STREAM_NAME_OUTPUT_DEFAULT_ASYNC;
162         break;
163
164 //LCOV_EXCL_START
165     default:
166         AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
167         break;
168     }
169 //LCOV_EXCL_STOP
170 }
171
172 CPulseStreamSpec::EStreamLatency CPulseStreamSpec::getStreamLatency() {
173     return __mLatency;
174 }
175
176 const char* CPulseStreamSpec::getStreamLatencyToString() {
177     const char* latency;
178
179     switch (__mLatency) {
180 //LCOV_EXCL_START
181     case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
182     case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
183         latency = STREAM_LATENCY_LOW;
184         break;
185
186     case EStreamLatency::STREAM_LATENCY_INPUT_MID:
187     case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
188         latency = STREAM_LATENCY_MID;
189         break;
190
191     case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
192     case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
193         latency = STREAM_LATENCY_HIGH;
194         break;
195
196     case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
197     case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
198         latency = STREAM_LATENCY_VOIP;
199         break;
200 //LCOV_EXCL_STOP
201
202     case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
203     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
204         latency = STREAM_LATENCY_DEFAULT;
205         break;
206
207     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC:
208         latency = STREAM_LATENCY_DEFAULT_ASYNC;
209         break;
210
211 //LCOV_EXCL_START
212     default:
213         AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
214         latency = STREAM_LATENCY_DEFAULT;
215         break;
216 //LCOV_EXCL_STOP
217     }
218
219     return latency;
220 }
221
222 CAudioInfo& CPulseStreamSpec::getAudioInfo() {
223     return __mAudioInfo;
224 }
225
226 pa_sample_spec CPulseStreamSpec::getSampleSpec() {
227     return __mSampleSpec;
228 }
229
230 pa_channel_map CPulseStreamSpec::getChannelMap() {
231     return __mChannelMap;
232 }
233
234 const char* CPulseStreamSpec::getStreamName() {
235     return __mStreamName;
236 }