Fix build error due to -Wformat
[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
37 static const char* STREAM_LATENCY_LOW     = "low";
38 static const char* STREAM_LATENCY_MID     = "mid";
39 static const char* STREAM_LATENCY_HIGH    = "high";
40 static const char* STREAM_LATENCY_VOIP    = "voip";
41 static const char* STREAM_LATENCY_DEFAULT = "default";
42
43
44 CPulseStreamSpec::CPulseStreamSpec() throw(CAudioError) :
45     __mLatency(EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT),
46     __mStreamName(NULL) {
47     __adjustSpec();
48 }
49
50 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo) throw(CAudioError) :
51     __mLatency(latency),
52     __mAudioInfo(audioInfo),
53     __mStreamName(NULL) {
54     __adjustSpec();
55 }
56
57 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo, int customLatency) throw(CAudioError) :
58     __mLatency(latency),
59     __mAudioInfo(audioInfo),
60     __mStreamName(NULL) {
61     __adjustSpec();
62 }
63
64 CPulseStreamSpec::~CPulseStreamSpec() {
65 }
66
67 void CPulseStreamSpec::__adjustSpec() throw(CAudioError) {
68     // Sets a sampleRate
69     __mSampleSpec.rate = __mAudioInfo.getSampleRate();
70
71     // Convert channels for PA
72     switch (__mAudioInfo.getChannel()) {
73     case CAudioInfo::EChannel::CHANNEL_MONO:
74         __mSampleSpec.channels = 1;
75         break;
76
77     case CAudioInfo::EChannel::CHANNEL_STEREO:
78     default:
79         __mSampleSpec.channels = 2;
80         break;
81     }
82
83     // Convert format for PA
84     switch (__mAudioInfo.getSampleType()) {
85     case CAudioInfo::ESampleType::SAMPLE_TYPE_U8:
86         __mSampleSpec.format = PA_SAMPLE_U8;
87         break;
88
89     case CAudioInfo::ESampleType::SAMPLE_TYPE_S16_LE:
90     default:
91         __mSampleSpec.format = PA_SAMPLE_S16LE;
92         break;
93     }
94
95     // Sets channelmap
96     pa_channel_map_init_auto(&__mChannelMap, __mSampleSpec.channels, PA_CHANNEL_MAP_ALSA);
97
98     // Sets stream name
99     switch (__mLatency) {
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
116     case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
117         __mStreamName = STREAM_NAME_INPUT_DEFAULT;
118         break;
119
120     case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
121         __mStreamName = STREAM_NAME_OUTPUT_LOW_LATENCY;
122         break;
123
124     case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
125         __mStreamName = STREAM_NAME_OUTPUT_MID_LATENCY;
126         break;
127
128     case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
129         __mStreamName = STREAM_NAME_OUTPUT_HIGH_LATENCY;
130         break;
131
132     case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
133         __mStreamName = STREAM_NAME_OUTPUT_VOIP;
134         break;
135
136     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
137         __mStreamName = STREAM_NAME_OUTPUT_DEFAULT;
138         break;
139
140     default:
141         AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
142         break;
143     }
144 }
145
146 CPulseStreamSpec::EStreamLatency CPulseStreamSpec::getStreamLatency() {
147     return __mLatency;
148 }
149
150 const char* CPulseStreamSpec::getStreamLatencyToString() {
151     const char* latency;
152
153     switch (__mLatency) {
154     case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
155     case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
156         latency = STREAM_LATENCY_LOW;
157         break;
158
159     case EStreamLatency::STREAM_LATENCY_INPUT_MID:
160     case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
161         latency = STREAM_LATENCY_MID;
162         break;
163
164     case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
165     case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
166         latency = STREAM_LATENCY_HIGH;
167         break;
168
169     case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
170     case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
171         latency = STREAM_LATENCY_VOIP;
172         break;
173
174     case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
175     case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
176         latency = STREAM_LATENCY_DEFAULT;
177         break;
178
179     default:
180         AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
181         latency = STREAM_LATENCY_DEFAULT;
182         break;
183     }
184
185     return latency;
186 }
187
188 CAudioInfo& CPulseStreamSpec::getAudioInfo() {
189     return __mAudioInfo;
190 }
191
192 pa_sample_spec CPulseStreamSpec::getSampleSpec() {
193     return __mSampleSpec;
194 }
195
196 pa_channel_map CPulseStreamSpec::getChannelMap() {
197     return __mChannelMap;
198 }
199
200 const char* CPulseStreamSpec::getStreamName() {
201     return __mStreamName;
202 }