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