b40771d65cac644641a63709b1f6a9d0dae202b1
[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               = "CAPTURE";
26 static const char* STREAM_NAME_INPUT_LOW_LATENCY   = "LOW 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
30 static const char* STREAM_NAME_OUTPUT              = "PLAYBACK";
31 static const char* STREAM_NAME_OUTPUT_LOW_LATENCY  = "LOW LATENCY PLAYBACK";
32 static const char* STREAM_NAME_OUTPUT_HIGH_LATENCY = "HIGH LATENCY PLAYBACK";
33 static const char* STREAM_NAME_OUTPUT_VOIP         = "VOIP PLAYBACK";
34
35 static const char* STREAM_LATENCY_LOW  = "low";
36 static const char* STREAM_LATENCY_MID  = "mid";
37 static const char* STREAM_LATENCY_HIGH = "high";
38 static const char* STREAM_LATENCY_VOIP = "voip";
39
40
41 CPulseStreamSpec::CPulseStreamSpec() throw (CAudioError) :
42     __mLatency(EStreamLatency::STREAM_LATENCY_INPUT_MID),
43     __mStreamName(NULL) {
44     __adjustSpec();
45 }
46
47 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo) throw (CAudioError) :
48     __mLatency(latency),
49     __mAudioInfo(audioInfo),
50     __mStreamName(NULL) {
51     __adjustSpec();
52 }
53
54 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo, int customLatency) throw (CAudioError) :
55     __mLatency(latency),
56     __mAudioInfo(audioInfo),
57     __mStreamName(NULL) {
58     __adjustSpec();
59 }
60
61 CPulseStreamSpec::~CPulseStreamSpec() {
62 }
63
64 void CPulseStreamSpec::__adjustSpec() throw (CAudioError) {
65     // Sets a sampleRate
66     __mSampleSpec.rate = __mAudioInfo.getSampleRate();
67
68     // Convert channels for PA
69     switch (__mAudioInfo.getChannel()) {
70     case CAudioInfo::EChannel::CHANNEL_MONO:
71         __mSampleSpec.channels = 1;
72         break;
73
74     case CAudioInfo::EChannel::CHANNEL_STEREO:
75     default:
76         __mSampleSpec.channels = 2;
77         break;
78     }
79
80     // Convert format for PA
81     switch (__mAudioInfo.getSampleType()) {
82     case CAudioInfo::ESampleType::SAMPLE_TYPE_U8:
83         __mSampleSpec.format = PA_SAMPLE_U8;
84         break;
85
86     case CAudioInfo::ESampleType::SAMPLE_TYPE_S16_LE:
87     default:
88         __mSampleSpec.format = PA_SAMPLE_S16LE;
89         break;
90     }
91
92     // Sets channelmap
93     pa_channel_map_init_auto(&__mChannelMap, __mSampleSpec.channels, PA_CHANNEL_MAP_ALSA);
94
95     // Sets stream name
96     switch (__mLatency) {
97     case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
98         __mStreamName = STREAM_NAME_OUTPUT;
99         break;
100
101     case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
102         __mStreamName = STREAM_NAME_OUTPUT_HIGH_LATENCY;
103         break;
104
105     case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
106         __mStreamName = STREAM_NAME_OUTPUT_LOW_LATENCY;
107         break;
108
109     case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
110         __mStreamName = STREAM_NAME_OUTPUT_VOIP;
111         break;
112
113     case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
114         __mStreamName = STREAM_NAME_INPUT_HIGH_LATENCY;
115         break;
116
117     case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
118         __mStreamName = STREAM_NAME_INPUT_LOW_LATENCY;
119         break;
120
121     case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
122         __mStreamName = STREAM_NAME_INPUT_VOIP;
123         break;
124
125     case EStreamLatency::STREAM_LATENCY_INPUT_MID:
126     default:
127         __mStreamName = STREAM_NAME_INPUT;
128         break;
129     }
130 }
131
132 CPulseStreamSpec::EStreamLatency CPulseStreamSpec::getStreamLatency() {
133     return __mLatency;
134 }
135
136 const char* CPulseStreamSpec::getStreamLatencyToString() {
137     const char* latency;
138
139     switch (__mLatency) {
140     case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
141     case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
142         latency = STREAM_LATENCY_LOW;
143         break;
144     case EStreamLatency::STREAM_LATENCY_INPUT_MID:
145     case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
146         latency = STREAM_LATENCY_MID;
147         break;
148     case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
149     case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
150         latency = STREAM_LATENCY_HIGH;
151         break;
152     case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
153     case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
154         latency = STREAM_LATENCY_VOIP;
155         break;
156     default:
157         latency = STREAM_LATENCY_MID;
158         break;
159     }
160
161     return latency;
162 }
163
164 CAudioInfo& CPulseStreamSpec::getAudioInfo() {
165     return __mAudioInfo;
166 }
167
168 pa_sample_spec CPulseStreamSpec::getSampleSpec() {
169     return __mSampleSpec;
170 }
171
172 pa_channel_map CPulseStreamSpec::getChannelMap() {
173     return __mChannelMap;
174 }
175
176 const char* CPulseStreamSpec::getStreamName() {
177     return __mStreamName;
178 }