[ACR-1434] Extend channel and format parameters
[platform/core/api/audio-io.git] / src / cpp / CPulseStreamSpec.cpp
index d2ab34c..def1833 100644 (file)
@@ -22,157 +22,210 @@ 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(STREAM_LATENCY_INPUT_MID),
-    mStreamName(NULL) {
-    _adjustSpec();
+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) :
-    mLatency(latency),
-    mAudioInfo(audioInfo),
-    mStreamName(NULL) {
-    _adjustSpec();
+CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo) :
+    __mLatency(latency),
+    __mAudioInfo(audioInfo),
+    __mStreamName(NULL) {
+    __adjustSpec();
 }
 
-CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo, int customLatency) throw (CAudioError) :
-    mLatency(latency),
-    mAudioInfo(audioInfo),
-    mStreamName(NULL) {
-    _adjustSpec();
+//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();
+    __mSampleSpec.rate = __mAudioInfo.getSampleRate();
 
     // Convert channels for PA
-    switch (mAudioInfo.getChannel()) {
-    case CAudioInfo::CHANNEL_MONO:
-        mSampleSpec.channels = 1;
+    __mSampleSpec.channels = static_cast<uint8_t>(__mAudioInfo.getChannel());
+
+    // Convert format for PA
+    switch (__mAudioInfo.getSampleType()) {
+    case CAudioInfo::ESampleType::SAMPLE_TYPE_U8:
+        __mSampleSpec.format = PA_SAMPLE_U8;
         break;
 
-    case CAudioInfo::CHANNEL_STEREO:
-    default:
-        mSampleSpec.channels = 2;
+    case CAudioInfo::ESampleType::SAMPLE_TYPE_S16_LE:
+        __mSampleSpec.format = PA_SAMPLE_S16LE;
         break;
-    }
 
-    // Convert format for PA
-    switch (mAudioInfo.getSampleType()) {
-    case CAudioInfo::SAMPLE_TYPE_U8:
-        mSampleSpec.format = PA_SAMPLE_U8;
+    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;
 
-    case CAudioInfo::SAMPLE_TYPE_S16_LE:
     default:
-        mSampleSpec.format = PA_SAMPLE_S16LE;
+        __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 STREAM_LATENCY_OUTPUT_MID:
-        mStreamName = STREAM_NAME_OUTPUT;
+    switch (__mLatency) {
+//LCOV_EXCL_START
+    case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
+        __mStreamName = STREAM_NAME_INPUT_LOW_LATENCY;
         break;
 
-    case STREAM_LATENCY_OUTPUT_HIGH:
-        mStreamName = STREAM_NAME_OUTPUT_HIGH_LATENCY;
+    case EStreamLatency::STREAM_LATENCY_INPUT_MID:
+        __mStreamName = STREAM_NAME_INPUT_MID_LATENCY;
         break;
 
-    case STREAM_LATENCY_OUTPUT_LOW:
-        mStreamName = STREAM_NAME_OUTPUT_LOW_LATENCY;
+    case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
+        __mStreamName = STREAM_NAME_INPUT_HIGH_LATENCY;
         break;
 
-    case STREAM_LATENCY_OUTPUT_VOIP:
-        mStreamName = STREAM_NAME_OUTPUT_VOIP;
+    case EStreamLatency::STREAM_LATENCY_INPUT_VOIP:
+        __mStreamName = STREAM_NAME_INPUT_VOIP;
         break;
+//LCOV_EXCL_STOP
 
-    case STREAM_LATENCY_INPUT_HIGH:
-        mStreamName = STREAM_NAME_INPUT_HIGH_LATENCY;
+    case EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT:
+        __mStreamName = STREAM_NAME_INPUT_DEFAULT;
         break;
 
-    case STREAM_LATENCY_INPUT_LOW:
-        mStreamName = STREAM_NAME_INPUT_LOW_LATENCY;
+//LCOV_EXCL_START
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
+        __mStreamName = STREAM_NAME_OUTPUT_LOW_LATENCY;
         break;
 
-    case STREAM_LATENCY_INPUT_VOIP:
-        mStreamName = STREAM_NAME_INPUT_VOIP;
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
+        __mStreamName = STREAM_NAME_OUTPUT_MID_LATENCY;
         break;
 
-    case STREAM_LATENCY_INPUT_MID:
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
+        __mStreamName = STREAM_NAME_OUTPUT_HIGH_LATENCY;
+        break;
+
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_VOIP:
+        __mStreamName = STREAM_NAME_OUTPUT_VOIP;
+        break;
+//LCOV_EXCL_STOP
+
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT:
+        __mStreamName = STREAM_NAME_OUTPUT_DEFAULT;
+        break;
+
+    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() {
-    return mLatency;
+    return __mLatency;
 }
 
 const char* CPulseStreamSpec::getStreamLatencyToString() {
     const char* latency;
 
-    switch (mLatency) {
-    case STREAM_LATENCY_INPUT_LOW:
-    case STREAM_LATENCY_OUTPUT_LOW:
+    switch (__mLatency) {
+//LCOV_EXCL_START
+    case EStreamLatency::STREAM_LATENCY_INPUT_LOW:
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_LOW:
         latency = STREAM_LATENCY_LOW;
         break;
-    case STREAM_LATENCY_INPUT_MID:
-    case STREAM_LATENCY_OUTPUT_MID:
+
+    case EStreamLatency::STREAM_LATENCY_INPUT_MID:
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_MID:
         latency = STREAM_LATENCY_MID;
         break;
-    case STREAM_LATENCY_INPUT_HIGH:
-    case STREAM_LATENCY_OUTPUT_HIGH:
+
+    case EStreamLatency::STREAM_LATENCY_INPUT_HIGH:
+    case EStreamLatency::STREAM_LATENCY_OUTPUT_HIGH:
         latency = STREAM_LATENCY_HIGH;
         break;
-    case STREAM_LATENCY_INPUT_VOIP:
-    case STREAM_LATENCY_OUTPUT_VOIP:
+
+    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;
 }
 
-CAudioInfo CPulseStreamSpec::getAudioInfo() {
-    return mAudioInfo;
+CAudioInfo& CPulseStreamSpec::getAudioInfo() {
+    return __mAudioInfo;
 }
 
 pa_sample_spec CPulseStreamSpec::getSampleSpec() {
-    return mSampleSpec;
+    return __mSampleSpec;
 }
 
 pa_channel_map CPulseStreamSpec::getChannelMap() {
-    return mChannelMap;
+    return __mChannelMap;
 }
 
 const char* CPulseStreamSpec::getStreamName() {
-    return mStreamName;
+    return __mStreamName;
 }