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