2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include "CAudioIODef.h"
22 using namespace tizen_media_audio;
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";
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";
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";
46 CPulseStreamSpec::CPulseStreamSpec():
47 __mLatency(EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT),
52 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo) :
54 __mAudioInfo(audioInfo),
59 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo, int customLatency) :
61 __mAudioInfo(audioInfo),
66 CPulseStreamSpec::~CPulseStreamSpec() {
69 void CPulseStreamSpec::__adjustSpec() {
71 __mSampleSpec.rate = __mAudioInfo.getSampleRate();
73 // Convert channels for PA
74 switch (__mAudioInfo.getChannel()) {
75 case CAudioInfo::EChannel::CHANNEL_MONO:
76 __mSampleSpec.channels = 1;
79 case CAudioInfo::EChannel::CHANNEL_STEREO:
81 __mSampleSpec.channels = 2;
85 // Convert format for PA
86 switch (__mAudioInfo.getSampleType()) {
87 case CAudioInfo::ESampleType::SAMPLE_TYPE_U8:
88 __mSampleSpec.format = PA_SAMPLE_U8;
91 case CAudioInfo::ESampleType::SAMPLE_TYPE_S16_LE:
92 __mSampleSpec.format = PA_SAMPLE_S16LE;
95 case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_LE:
96 __mSampleSpec.format = PA_SAMPLE_S24LE;
99 case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_32_LE:
100 __mSampleSpec.format = PA_SAMPLE_S24_32LE;
104 __mSampleSpec.format = PA_SAMPLE_S16LE;
109 pa_channel_map_init_auto(&__mChannelMap, __mSampleSpec.channels, PA_CHANNEL_MAP_ALSA);
112 switch (__mLatency) {
114 case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
115 __mStreamName = STREAM_NAME_INPUT_LOW_LATENCY;
118 case EStreamLatency::STREAM_LATENCY_INPUT_MID:
119 __mStreamName = STREAM_NAME_INPUT_MID_LATENCY;
122 case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
123 __mStreamName = STREAM_NAME_INPUT_HIGH_LATENCY;
126 case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
127 __mStreamName = STREAM_NAME_INPUT_VOIP;
131 case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
132 __mStreamName = STREAM_NAME_INPUT_DEFAULT;
136 case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
137 __mStreamName = STREAM_NAME_OUTPUT_LOW_LATENCY;
140 case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
141 __mStreamName = STREAM_NAME_OUTPUT_MID_LATENCY;
144 case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
145 __mStreamName = STREAM_NAME_OUTPUT_HIGH_LATENCY;
148 case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
149 __mStreamName = STREAM_NAME_OUTPUT_VOIP;
153 case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
154 __mStreamName = STREAM_NAME_OUTPUT_DEFAULT;
157 case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC:
158 __mStreamName = STREAM_NAME_OUTPUT_DEFAULT_ASYNC;
163 AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
169 CPulseStreamSpec::EStreamLatency CPulseStreamSpec::getStreamLatency() {
173 const char* CPulseStreamSpec::getStreamLatencyToString() {
176 switch (__mLatency) {
178 case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
179 case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
180 latency = STREAM_LATENCY_LOW;
183 case EStreamLatency::STREAM_LATENCY_INPUT_MID:
184 case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
185 latency = STREAM_LATENCY_MID;
188 case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
189 case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
190 latency = STREAM_LATENCY_HIGH;
193 case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
194 case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
195 latency = STREAM_LATENCY_VOIP;
199 case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
200 case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
201 latency = STREAM_LATENCY_DEFAULT;
204 case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC:
205 latency = STREAM_LATENCY_DEFAULT_ASYNC;
210 AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
211 latency = STREAM_LATENCY_DEFAULT;
219 CAudioInfo& CPulseStreamSpec::getAudioInfo() {
223 pa_sample_spec CPulseStreamSpec::getSampleSpec() {
224 return __mSampleSpec;
227 pa_channel_map CPulseStreamSpec::getChannelMap() {
228 return __mChannelMap;
231 const char* CPulseStreamSpec::getStreamName() {
232 return __mStreamName;