[ACR-1434] Extend channel and format parameters
[platform/core/api/audio-io.git] / src / cpp / CPulseStreamSpec.cpp
index b40771d..def1833 100644 (file)
@@ -22,60 +22,59 @@ using namespace std;
 using namespace tizen_media_audio;
 
 
-static const char* STREAM_NAME_INPUT               = "CAPTURE";
 static const char* STREAM_NAME_INPUT_LOW_LATENCY   = "LOW LATENCY CAPTURE";
+static const char* STREAM_NAME_INPUT_MID_LATENCY   = "MID LATENCY CAPTURE";
 static const char* STREAM_NAME_INPUT_HIGH_LATENCY  = "HIGH LATENCY CAPTURE";
 static const char* STREAM_NAME_INPUT_VOIP          = "VOIP CAPTURE";
+static const char* STREAM_NAME_INPUT_DEFAULT       = "DEFAULT CAPTURE";
 
-static const char* STREAM_NAME_OUTPUT              = "PLAYBACK";
 static const char* STREAM_NAME_OUTPUT_LOW_LATENCY  = "LOW LATENCY PLAYBACK";
+static const char* STREAM_NAME_OUTPUT_MID_LATENCY  = "MID LATENCY PLAYBACK";
 static const char* STREAM_NAME_OUTPUT_HIGH_LATENCY = "HIGH LATENCY PLAYBACK";
 static const char* STREAM_NAME_OUTPUT_VOIP         = "VOIP PLAYBACK";
-
-static const char* STREAM_LATENCY_LOW  = "low";
-static const char* STREAM_LATENCY_MID  = "mid";
-static const char* STREAM_LATENCY_HIGH = "high";
-static const char* STREAM_LATENCY_VOIP = "voip";
-
-
-CPulseStreamSpec::CPulseStreamSpec() throw (CAudioError) :
-    __mLatency(EStreamLatency::STREAM_LATENCY_INPUT_MID),
+static const char* STREAM_NAME_OUTPUT_DEFAULT      = "DEFAULT PLAYBACK";
+static const char* STREAM_NAME_OUTPUT_DEFAULT_ASYNC      = "DEFAULT PLAYBACK ASYNC";
+
+static const char* STREAM_LATENCY_LOW     = "low";
+static const char* STREAM_LATENCY_MID     = "mid";
+static const char* STREAM_LATENCY_HIGH    = "high";
+static const char* STREAM_LATENCY_VOIP    = "voip";
+static const char* STREAM_LATENCY_DEFAULT = "default";
+static const char* STREAM_LATENCY_DEFAULT_ASYNC = "default-async";
+
+//LCOV_EXCL_START
+CPulseStreamSpec::CPulseStreamSpec():
+    __mLatency(EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT),
     __mStreamName(NULL) {
     __adjustSpec();
 }
+//LCOV_EXCL_STOP
 
-CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo) throw (CAudioError) :
+CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo) :
     __mLatency(latency),
     __mAudioInfo(audioInfo),
     __mStreamName(NULL) {
     __adjustSpec();
 }
 
-CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo, int customLatency) throw (CAudioError) :
+//LCOV_EXCL_START
+CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo, int customLatency) :
     __mLatency(latency),
     __mAudioInfo(audioInfo),
     __mStreamName(NULL) {
     __adjustSpec();
 }
+//LCOV_EXCL_STOP
 
 CPulseStreamSpec::~CPulseStreamSpec() {
 }
 
-void CPulseStreamSpec::__adjustSpec() throw (CAudioError) {
+void CPulseStreamSpec::__adjustSpec() {
     // Sets a sampleRate
     __mSampleSpec.rate = __mAudioInfo.getSampleRate();
 
     // Convert channels for PA
-    switch (__mAudioInfo.getChannel()) {
-    case CAudioInfo::EChannel::CHANNEL_MONO:
-        __mSampleSpec.channels = 1;
-        break;
-
-    case CAudioInfo::EChannel::CHANNEL_STEREO:
-    default:
-        __mSampleSpec.channels = 2;
-        break;
-    }
+    __mSampleSpec.channels = static_cast<uint8_t>(__mAudioInfo.getChannel());
 
     // Convert format for PA
     switch (__mAudioInfo.getSampleType()) {
@@ -84,49 +83,85 @@ void CPulseStreamSpec::__adjustSpec() throw (CAudioError) {
         break;
 
     case CAudioInfo::ESampleType::SAMPLE_TYPE_S16_LE:
+        __mSampleSpec.format = PA_SAMPLE_S16LE;
+        break;
+
+    case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_LE:
+        __mSampleSpec.format = PA_SAMPLE_S24LE;
+        break;
+
+    case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_32_LE:
+        __mSampleSpec.format = PA_SAMPLE_S24_32LE;
+        break;
+
+    case CAudioInfo::ESampleType::SAMPLE_TYPE_S32_LE:
+        __mSampleSpec.format = PA_SAMPLE_S32LE;
+        break;
+
     default:
         __mSampleSpec.format = PA_SAMPLE_S16LE;
         break;
     }
 
     // Sets channelmap
-    pa_channel_map_init_auto(&__mChannelMap, __mSampleSpec.channels, PA_CHANNEL_MAP_ALSA);
+    pa_channel_map_init_extend(&__mChannelMap, __mSampleSpec.channels, PA_CHANNEL_MAP_ALSA);
 
     // Sets stream name
     switch (__mLatency) {
-    case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
-        __mStreamName = STREAM_NAME_OUTPUT;
+//LCOV_EXCL_START
+    case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
+        __mStreamName = STREAM_NAME_INPUT_LOW_LATENCY;
         break;
 
-    case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
-        __mStreamName = STREAM_NAME_OUTPUT_HIGH_LATENCY;
+    case EStreamLatency::STREAM_LATENCY_INPUT_MID:
+        __mStreamName = STREAM_NAME_INPUT_MID_LATENCY;
+        break;
+
+    case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
+        __mStreamName = STREAM_NAME_INPUT_HIGH_LATENCY;
+        break;
+
+    case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
+        __mStreamName = STREAM_NAME_INPUT_VOIP;
+        break;
+//LCOV_EXCL_STOP
+
+    case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
+        __mStreamName = STREAM_NAME_INPUT_DEFAULT;
         break;
 
+//LCOV_EXCL_START
     case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
         __mStreamName = STREAM_NAME_OUTPUT_LOW_LATENCY;
         break;
 
-    case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
-        __mStreamName = STREAM_NAME_OUTPUT_VOIP;
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
+        __mStreamName = STREAM_NAME_OUTPUT_MID_LATENCY;
         break;
 
-    case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
-        __mStreamName = STREAM_NAME_INPUT_HIGH_LATENCY;
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
+        __mStreamName = STREAM_NAME_OUTPUT_HIGH_LATENCY;
         break;
 
-    case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
-        __mStreamName = STREAM_NAME_INPUT_LOW_LATENCY;
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
+        __mStreamName = STREAM_NAME_OUTPUT_VOIP;
         break;
+//LCOV_EXCL_STOP
 
-    case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
-        __mStreamName = STREAM_NAME_INPUT_VOIP;
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
+        __mStreamName = STREAM_NAME_OUTPUT_DEFAULT;
         break;
 
-    case EStreamLatency::STREAM_LATENCY_INPUT_MID:
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC:
+        __mStreamName = STREAM_NAME_OUTPUT_DEFAULT_ASYNC;
+        break;
+
+//LCOV_EXCL_START
     default:
-        __mStreamName = STREAM_NAME_INPUT;
+        AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
         break;
     }
+//LCOV_EXCL_STOP
 }
 
 CPulseStreamSpec::EStreamLatency CPulseStreamSpec::getStreamLatency() {
@@ -137,25 +172,43 @@ const char* CPulseStreamSpec::getStreamLatencyToString() {
     const char* latency;
 
     switch (__mLatency) {
+//LCOV_EXCL_START
     case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
     case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
         latency = STREAM_LATENCY_LOW;
         break;
+
     case EStreamLatency::STREAM_LATENCY_INPUT_MID:
     case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
         latency = STREAM_LATENCY_MID;
         break;
+
     case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
     case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
         latency = STREAM_LATENCY_HIGH;
         break;
+
     case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
     case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
         latency = STREAM_LATENCY_VOIP;
         break;
+//LCOV_EXCL_STOP
+
+    case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
+        latency = STREAM_LATENCY_DEFAULT;
+        break;
+
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC:
+        latency = STREAM_LATENCY_DEFAULT_ASYNC;
+        break;
+
+//LCOV_EXCL_START
     default:
-        latency = STREAM_LATENCY_MID;
+        AUDIO_IO_LOGW("Invalid __mLatency[%d]", static_cast<int>(__mLatency));
+        latency = STREAM_LATENCY_DEFAULT;
         break;
+//LCOV_EXCL_STOP
     }
 
     return latency;