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 = "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";
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";
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";
41 CPulseStreamSpec::CPulseStreamSpec() throw (CAudioError) :
42 __mLatency(EStreamLatency::STREAM_LATENCY_INPUT_MID),
47 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo) throw (CAudioError) :
49 __mAudioInfo(audioInfo),
54 CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo, int customLatency) throw (CAudioError) :
56 __mAudioInfo(audioInfo),
61 CPulseStreamSpec::~CPulseStreamSpec() {
64 void CPulseStreamSpec::__adjustSpec() throw (CAudioError) {
66 __mSampleSpec.rate = __mAudioInfo.getSampleRate();
68 // Convert channels for PA
69 switch (__mAudioInfo.getChannel()) {
70 case CAudioInfo::EChannel::CHANNEL_MONO:
71 __mSampleSpec.channels = 1;
74 case CAudioInfo::EChannel::CHANNEL_STEREO:
76 __mSampleSpec.channels = 2;
80 // Convert format for PA
81 switch (__mAudioInfo.getSampleType()) {
82 case CAudioInfo::ESampleType::SAMPLE_TYPE_U8:
83 __mSampleSpec.format = PA_SAMPLE_U8;
86 case CAudioInfo::ESampleType::SAMPLE_TYPE_S16_LE:
88 __mSampleSpec.format = PA_SAMPLE_S16LE;
93 pa_channel_map_init_auto(&__mChannelMap, __mSampleSpec.channels, PA_CHANNEL_MAP_ALSA);
97 case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
98 __mStreamName = STREAM_NAME_OUTPUT;
101 case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
102 __mStreamName = STREAM_NAME_OUTPUT_HIGH_LATENCY;
105 case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
106 __mStreamName = STREAM_NAME_OUTPUT_LOW_LATENCY;
109 case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
110 __mStreamName = STREAM_NAME_OUTPUT_VOIP;
113 case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
114 __mStreamName = STREAM_NAME_INPUT_HIGH_LATENCY;
117 case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
118 __mStreamName = STREAM_NAME_INPUT_LOW_LATENCY;
121 case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
122 __mStreamName = STREAM_NAME_INPUT_VOIP;
125 case EStreamLatency::STREAM_LATENCY_INPUT_MID:
127 __mStreamName = STREAM_NAME_INPUT;
132 CPulseStreamSpec::EStreamLatency CPulseStreamSpec::getStreamLatency() {
136 const char* CPulseStreamSpec::getStreamLatencyToString() {
139 switch (__mLatency) {
140 case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
141 case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
142 latency = STREAM_LATENCY_LOW;
144 case EStreamLatency::STREAM_LATENCY_INPUT_MID:
145 case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
146 latency = STREAM_LATENCY_MID;
148 case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
149 case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
150 latency = STREAM_LATENCY_HIGH;
152 case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
153 case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
154 latency = STREAM_LATENCY_VOIP;
157 latency = STREAM_LATENCY_MID;
164 CAudioInfo& CPulseStreamSpec::getAudioInfo() {
168 pa_sample_spec CPulseStreamSpec::getSampleSpec() {
169 return __mSampleSpec;
172 pa_channel_map CPulseStreamSpec::getChannelMap() {
173 return __mChannelMap;
176 const char* CPulseStreamSpec::getStreamName() {
177 return __mStreamName;