use constexpr whenever possible / remove unused member function
[platform/core/api/audio-io.git] / include / CAudioInfo.h
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 #ifndef __TIZEN_MEDIA_AUDIO__IO_CAUDIO_INFO_H__
18 #define __TIZEN_MEDIA_AUDIO__IO_CAUDIO_INFO_H__
19
20
21 #ifdef __cplusplus
22
23 #include <type_traits>
24
25 namespace tizen_media_audio {
26
27     template<typename E>
28     constexpr auto to_integral(E e) -> typename std::underlying_type<E>::type {
29         return static_cast<typename std::underlying_type<E>::type>(e);
30     }
31
32     /**
33      * Audio Information
34      */
35     class CAudioInfo {
36     public:
37         enum class EChannel : unsigned int {
38             CHANNEL_MONO = 1,               /**< 1 channel, mono */
39             CHANNEL_STEREO,                 /**< 2 channel, stereo */
40             CHANNEL_MULTI_3,                /**< 3 channel */
41             CHANNEL_MULTI_4,                /**< 4 channel */
42             CHANNEL_MULTI_5,                /**< 5 channel */
43             CHANNEL_MULTI_6,                /**< 6 channel */
44             CHANNEL_MULTI_7,                /**< 7 channel */
45             CHANNEL_MULTI_8,                /**< 8 channel */
46             CHANNEL_MAX
47         };
48
49         enum class ESampleType : unsigned int {
50             SAMPLE_TYPE_U8 = 1,             /**< Unsigned 8-bit audio samples */
51             SAMPLE_TYPE_S16_LE,             /**< Signed 16-bit audio samples */
52             SAMPLE_TYPE_S24_LE,             /**< Signed 24-bit audio samples */
53             SAMPLE_TYPE_S24_32_LE,          /**< Signed 24-bit packed in 32-bit audio samples */
54             SAMPLE_TYPE_S32_LE,             /**< Signed 32-bit audio samples */
55             SAMPLE_TYPE_MAX
56         };
57
58         enum class EAudioType : unsigned int {
59             /* Input Type */
60             AUDIO_IN_TYPE_MEDIA = 0,
61             //AUDIO_IN_TYPE_SYSTEM,
62             //AUDIO_IN_TYPE_ALARM,
63             //AUDIO_IN_TYPE_NOTIFICATION,
64             //AUDIO_IN_TYPE_EMERGENCY,
65             //AUDIO_IN_TYPE_VOICE_INFORMATION,
66             AUDIO_IN_TYPE_VOICE_RECOGNITION,
67             //AUDIO_IN_TYPE_RINGTONE_VOIP,
68             AUDIO_IN_TYPE_VOIP,
69             AUDIO_IN_TYPE_MEDIA_EXTERNAL_ONLY,
70             //AUDIO_IN_TYPE_RINGTONE_CALL,
71             //AUDIO_IN_TYPE_VOICE_CALL,
72             //AUDIO_IN_TYPE_VIDEO_CALL,
73             //AUDIO_IN_TYPE_RADIO,
74             AUDIO_IN_TYPE_LOOPBACK,
75             AUDIO_IN_TYPE_VOICE_RECOGNITION_SERVICE,
76             //AUDIO_IN_TYPE_MEDIA_NETWORK_SOURCE,
77
78             /* Output Type */
79             AUDIO_OUT_TYPE_MEDIA,
80             AUDIO_OUT_TYPE_SYSTEM,
81             AUDIO_OUT_TYPE_ALARM,
82             AUDIO_OUT_TYPE_NOTIFICATION,
83             AUDIO_OUT_TYPE_EMERGENCY,
84             AUDIO_OUT_TYPE_VOICE_INFORMATION,
85             //AUDIO_OUT_TYPE_VOICE_RECOGNITION,
86             AUDIO_OUT_TYPE_RINGTONE_VOIP,
87             AUDIO_OUT_TYPE_VOIP,
88             AUDIO_OUT_TYPE_MEDIA_EXTERNAL_ONLY,
89             AUDIO_OUT_TYPE_RINGTONE_CALL,
90             //AUDIO_OUT_TYPE_VOICE_CALL,
91             //AUDIO_OUT_TYPE_VIDEO_CALL,
92             //AUDIO_OUT_TYPE_RADIO,
93             //AUDIO_OUT_TYPE_LOOPBACK,
94             //AUDIO_OUT_TYPE_VOICE_RECOGNITION_SERVICE,
95             AUDIO_OUT_TYPE_MEDIA_NETWORK_SOURCE,
96
97             AUDIO_TYPE_MAX
98         };
99
100         enum class EAudioIOState : unsigned int {
101             AUDIO_IO_STATE_NONE,      /**< Audio-io handle is not created */
102             AUDIO_IO_STATE_IDLE,      /**< Audio-io handle is created, but not prepared */
103             AUDIO_IO_STATE_RUNNING,   /**< Audio-io handle is ready and the stream is running */
104             AUDIO_IO_STATE_PAUSED,    /**< Audio-io handle is ready and the stream is paused */
105             AUDIO_IO_STATE_MAX
106         };
107
108         enum class EAudioDirection : unsigned int {
109             AUDIO_DIRECTION_IN,       /**< Audio direction input */
110             AUDIO_DIRECTION_OUT,      /**< Audio direction output */
111             AUDIO_DIRECTION_MAX
112         };
113
114         static constexpr unsigned int MIN_SYSTEM_SAMPLERATE = 8000;
115         static constexpr unsigned int MAX_SYSTEM_SAMPLERATE = 192000;
116
117         /* Constructors */
118         CAudioInfo();
119         CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sampleType, EAudioType audioType, int audioIndex);
120         virtual ~CAudioInfo() = default;
121
122         /* Setter & Getter */
123         unsigned int getSampleRate() noexcept;
124         EChannel getChannel() noexcept;
125         ESampleType getSampleType() noexcept;
126         EAudioType getAudioType() noexcept;
127         int getAudioIndex() noexcept;
128         void setAudioIndex(int audioIndex) noexcept;
129         int getSampleSize() noexcept;
130
131         /* Setter & Getter Utilities */
132         const char* getConvertedStreamType();
133         void setAudioTypeByInputStreamType(const char* streamType);
134         void setAudioTypeByOutputStreamType(const char* streamType);
135
136     private:
137         const char *__STREAM_TYPE_TABLE[(unsigned int)EAudioType::AUDIO_TYPE_MAX] = {
138             /* Input Type */
139             "media",                  /**< AUDIO_IN_TYPE_MEDIA */
140             //"system",               /**< AUDIO_IN_TYPE_SYSTEM */
141             //"alarm",                /**< AUDIO_IN_TYPE_ALARM */
142             //"notification",         /**< AUDIO_IN_TYPE_NOTIFICATION */
143             //"emergency",            /**< AUDIO_IN_TYPE_EMERGENCY */
144             //"voice-information",    /**< AUDIO_IN_TYPE_VOICE_INFORMATION */
145             "voice-recognition",      /**< AUDIO_IN_TYPE_VOICE_RECOGNITION */
146             //"ringtone-voip",        /**< AUDIO_IN_TYPE_RINGTONE_VOIP */
147             "voip",                   /**< AUDIO_IN_TYPE_VOIP */
148             "ext-media",              /**< AUDIO_IN_TYPE_MEDIA_EXTERNAL_ONLY */
149             //"ringtone-call",        /**< AUDIO_IN_TYPE_RINGTONE_CALL */
150             //"call-voice",           /**< AUDIO_IN_TYPE_VOICE_CALL */
151             //"call-video",           /**< AUDIO_IN_TYPE_VIDEO_CALL */
152             //"radio",                /**< AUDIO_IN_TYPE_RADIO */
153             "loopback-mirroring",     /**< AUDIO_IN_TYPE_LOOPBACK */
154             "voice-recognition-service",     /**< AUDIO_IN_TYPE_VOICE_RECOGNITION_SERVICE */
155             //"network-source-media", /**< AUDIO_IN_TYPE_MEDIA_NETWORK_SOURCE */
156
157             /* Output Type */
158             "media",                  /**< AUDIO_OUT_TYPE_MEDIA */
159             "system",                 /**< AUDIO_OUT_TYPE_SYSTEM */
160             "alarm",                  /**< AUDIO_OUT_TYPE_ALARM */
161             "notification",           /**< AUDIO_OUT_TYPE_NOTIFICATION */
162             "emergency",              /**< AUDIO_OUT_TYPE_EMERGENCY */
163             "voice-information",      /**< AUDIO_OUT_TYPE_VOICE_INFORMATION */
164             //"voice-recognition",    /**< AUDIO_OUT_TYPE_VOICE_RECOGNITION */
165             "ringtone-voip",          /**< AUDIO_OUT_TYPE_RINGTONE_VOIP */
166             "voip",                   /**< AUDIO_OUT_TYPE_VOIP */
167             "ext-media",              /**< AUDIO_OUT_TYPE_MEDIA_EXTERNAL_ONLY */
168             "ringtone-call",          /**< AUDIO_OUT_TYPE_RINGTONE_CALL */
169             //"call-voice",           /**< AUDIO_OUT_TYPE_VOICE_CALL */
170             //"call-video",           /**< AUDIO_OUT_TYPE_VIDEO_CALL */
171             //"radio",                /**< AUDIO_OUT_TYPE_RADIO */
172             //"loopback-mirroring",   /**< AUDIO_OUT_TYPE_LOOPBACK */
173             //"voice-recognition-service",/**< AUDIO_OUT_TYPE_VOICE_RECOGNITION_SERVICE */
174             "network-source-media",   /**< AUDIO_OUT_TYPE_MEDIA_NETWORK_SOURCE */
175         };
176
177         EAudioType convertInputStreamTypeToAudioType(const char *streamType);
178         EAudioType convertOutputStreamTypeToAudioType(const char *streamType);
179
180         unsigned int __mSampleRate;
181         EChannel     __mChannel;
182         ESampleType  __mSampleType;
183         EAudioType   __mAudioType;
184         int          __mAudioIndex;
185     };
186
187
188 } /* namespace tizen_media_audio */
189
190 #endif
191 #endif /* __TIZEN_MEDIA_AUDIO__IO_CAUDIO_INFO_H__ */