Merge from mobile product code for backward compatibility
[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     default:
93         __mSampleSpec.format = PA_SAMPLE_S16LE;
94         break;
95     }
96
97     // Sets channelmap
98     pa_channel_map_init_auto(&__mChannelMap, __mSampleSpec.channels, PA_CHANNEL_MAP_ALSA);
99
100     // Sets stream name
101     switch (__mLatency) {
102     case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
103         __mStreamName = STREAM_NAME_INPUT_LOW_LATENCY;
104         break;
105
106     case EStreamLatency::STREAM_LATENCY_INPUT_MID:
107         __mStreamName = STREAM_NAME_INPUT_MID_LATENCY;
108         break;
109
110     case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
111         __mStreamName = STREAM_NAME_INPUT_HIGH_LATENCY;
112         break;
113
114     case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
115         __mStreamName = STREAM_NAME_INPUT_VOIP;
116         break;
117
118     case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
119         __mStreamName = STREAM_NAME_INPUT_DEFAULT;
120         break;
121
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
138     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
139         __mStreamName = STREAM_NAME_OUTPUT_DEFAULT;
140         break;
141
142     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC:
143         __mStreamName = STREAM_NAME_OUTPUT_DEFAULT_ASYNC;
144         break;
145
146     default:
147         AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
148         break;
149     }
150 }
151
152 CPulseStreamSpec::EStreamLatency CPulseStreamSpec::getStreamLatency() {
153     return __mLatency;
154 }
155
156 const char* CPulseStreamSpec::getStreamLatencyToString() {
157     const char* latency;
158
159     switch (__mLatency) {
160     case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
161     case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
162         latency = STREAM_LATENCY_LOW;
163         break;
164
165     case EStreamLatency::STREAM_LATENCY_INPUT_MID:
166     case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
167         latency = STREAM_LATENCY_MID;
168         break;
169
170     case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
171     case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
172         latency = STREAM_LATENCY_HIGH;
173         break;
174
175     case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
176     case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
177         latency = STREAM_LATENCY_VOIP;
178         break;
179
180     case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
181     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
182         latency = STREAM_LATENCY_DEFAULT;
183         break;
184
185     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC:
186         latency = STREAM_LATENCY_DEFAULT_ASYNC;
187         break;
188
189     default:
190         AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
191         latency = STREAM_LATENCY_DEFAULT;
192         break;
193     }
194
195     return latency;
196 }
197
198 CAudioInfo& CPulseStreamSpec::getAudioInfo() {
199     return __mAudioInfo;
200 }
201
202 pa_sample_spec CPulseStreamSpec::getSampleSpec() {
203     return __mSampleSpec;
204 }
205
206 pa_channel_map CPulseStreamSpec::getChannelMap() {
207     return __mChannelMap;
208 }
209
210 const char* CPulseStreamSpec::getStreamName() {
211     return __mStreamName;
212 }