Support 24bit sample format and up-to 192kHz sample rate
[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_MAX
41         };
42
43         enum class ESampleType : unsigned int {
44             SAMPLE_TYPE_U8 = 1,             /**< Unsigned 8-bit audio samples */
45             SAMPLE_TYPE_S16_LE,             /**< Signed 16-bit audio samples */
46             SAMPLE_TYPE_S24_LE,             /**< Signed 24-bit audio samples */
47             SAMPLE_TYPE_S24_32_LE,          /**< Signed 24-bit packed in 32-bit audio samples */
48             SAMPLE_TYPE_MAX
49         };
50
51         enum class EAudioType : unsigned int {
52             /* Input Type */
53             AUDIO_IN_TYPE_MEDIA = 0,
54             //AUDIO_IN_TYPE_SYSTEM,
55             //AUDIO_IN_TYPE_ALARM,
56             //AUDIO_IN_TYPE_NOTIFICATION,
57             //AUDIO_IN_TYPE_EMERGENCY,
58             //AUDIO_IN_TYPE_VOICE_INFORMATION,
59             AUDIO_IN_TYPE_VOICE_RECOGNITION,
60             //AUDIO_IN_TYPE_RINGTONE_VOIP,
61             AUDIO_IN_TYPE_VOIP,
62             AUDIO_IN_TYPE_MEDIA_EXTERNAL_ONLY,
63             //AUDIO_IN_TYPE_RINGTONE_CALL,
64             //AUDIO_IN_TYPE_VOICE_CALL,
65             //AUDIO_IN_TYPE_VIDEO_CALL,
66             //AUDIO_IN_TYPE_RADIO,
67             AUDIO_IN_TYPE_LOOPBACK,
68             AUDIO_IN_TYPE_VOICE_RECOGNITION_SERVICE,
69
70             /* Output Type */
71             AUDIO_OUT_TYPE_MEDIA,
72             AUDIO_OUT_TYPE_SYSTEM,
73             AUDIO_OUT_TYPE_ALARM,
74             AUDIO_OUT_TYPE_NOTIFICATION,
75             AUDIO_OUT_TYPE_EMERGENCY,
76             AUDIO_OUT_TYPE_VOICE_INFORMATION,
77             //AUDIO_OUT_TYPE_VOICE_RECOGNITION,
78             AUDIO_OUT_TYPE_RINGTONE_VOIP,
79             AUDIO_OUT_TYPE_VOIP,
80             AUDIO_OUT_TYPE_MEDIA_EXTERNAL_ONLY,
81             AUDIO_OUT_TYPE_RINGTONE_CALL,
82             //AUDIO_OUT_TYPE_VOICE_CALL,
83             //AUDIO_OUT_TYPE_VIDEO_CALL,
84             //AUDIO_OUT_TYPE_RADIO,
85             //AUDIO_OUT_TYPE_LOOPBACK,
86             //AUDIO_OUT_TYPE_VOICE_RECOGNITION_SERVICE,
87
88             AUDIO_TYPE_MAX
89         };
90
91         enum class EAudioIOState : unsigned int {
92             AUDIO_IO_STATE_NONE,      /**< Audio-io handle is not created */
93             AUDIO_IO_STATE_IDLE,      /**< Audio-io handle is created, but not prepared */
94             AUDIO_IO_STATE_RUNNING,   /**< Audio-io handle is ready and the stream is running */
95             AUDIO_IO_STATE_PAUSED,    /**< Audio-io handle is ready and the stream is paused */
96             AUDIO_IO_STATE_MAX
97         };
98
99         enum class EAudioDirection : unsigned int {
100             AUDIO_DIRECTION_IN,       /**< Audio direction input */
101             AUDIO_DIRECTION_OUT,      /**< Audio direction output */
102             AUDIO_DIRECTION_MAX
103         };
104
105         const static unsigned int MIN_SYSTEM_SAMPLERATE = 8000;
106         const static unsigned int MAX_SYSTEM_SAMPLERATE = 192000;
107
108         /* Constructors */
109         CAudioInfo();
110         CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sampleType, EAudioType audioType, int audioIndex);
111
112         /* Setter & Getter */
113         unsigned int getSampleRate();
114         EChannel getChannel();
115         ESampleType getSampleType();
116         EAudioType getAudioType();
117         void setAudioType(EAudioType audioType);
118         int getAudioIndex();
119         void setAudioIndex(int audioIndex);
120         void convertAudioType2StreamType(CAudioInfo::EAudioType audioType, char **streamType);
121         void convertInputStreamType2AudioType(char *streamType, CAudioInfo::EAudioType *audioType);
122         void convertOutputStreamType2AudioType(char *streamType, CAudioInfo::EAudioType *audioType);
123         int getSampleSize();
124
125     private:
126         const char *__STREAM_TYPE_TABLE[(unsigned int)EAudioType::AUDIO_TYPE_MAX] = {
127             /* Input Type */
128             "media",                  /**< AUDIO_IN_TYPE_MEDIA */
129             //"system",               /**< AUDIO_IN_TYPE_SYSTEM */
130             //"alarm",                /**< AUDIO_IN_TYPE_ALARM */
131             //"notification",         /**< AUDIO_IN_TYPE_NOTIFICATION */
132             //"emergency",            /**< AUDIO_IN_TYPE_EMERGENCY */
133             //"voice-information",    /**< AUDIO_IN_TYPE_VOICE_INFORMATION */
134             "voice-recognition",      /**< AUDIO_IN_TYPE_VOICE_RECOGNITION */
135             //"ringtone-voip",        /**< AUDIO_IN_TYPE_RINGTONE_VOIP */
136             "voip",                   /**< AUDIO_IN_TYPE_VOIP */
137             "ext-media",              /**< AUDIO_IN_TYPE_MEDIA_EXTERNAL_ONLY */
138             //"ringtone-call",        /**< AUDIO_IN_TYPE_RINGTONE_CALL */
139             //"call-voice",           /**< AUDIO_IN_TYPE_VOICE_CALL */
140             //"call-video",           /**< AUDIO_IN_TYPE_VIDEO_CALL */
141             //"radio",                /**< AUDIO_IN_TYPE_RADIO */
142             "loopback-mirroring",     /**< AUDIO_IN_TYPE_LOOPBACK */
143             "voice-recognition-service",     /**< AUDIO_IN_TYPE_VOICE_RECOGNITION_SERVICE */
144
145             /* Output Type */
146             "media",                  /**< AUDIO_OUT_TYPE_MEDIA */
147             "system",                 /**< AUDIO_OUT_TYPE_SYSTEM */
148             "alarm",                  /**< AUDIO_OUT_TYPE_ALARM */
149             "notification",           /**< AUDIO_OUT_TYPE_NOTIFICATION */
150             "emergency",              /**< AUDIO_OUT_TYPE_EMERGENCY */
151             "voice-information",      /**< AUDIO_OUT_TYPE_VOICE_INFORMATION */
152             //"voice-recognition",    /**< AUDIO_OUT_TYPE_VOICE_RECOGNITION */
153             "ringtone-voip",          /**< AUDIO_OUT_TYPE_RINGTONE_VOIP */
154             "voip",                   /**< AUDIO_OUT_TYPE_VOIP */
155             "ext-media",              /**< AUDIO_OUT_TYPE_MEDIA_EXTERNAL_ONLY */
156             "ringtone-call",          /**< AUDIO_OUT_TYPE_RINGTONE_CALL */
157             //"call-voice",           /**< AUDIO_OUT_TYPE_VOICE_CALL */
158             //"call-video",           /**< AUDIO_OUT_TYPE_VIDEO_CALL */
159             //"radio",                /**< AUDIO_OUT_TYPE_RADIO */
160             //"loopback-mirroring",   /**< AUDIO_OUT_TYPE_LOOPBACK */
161             //"voice-recognition-service",/**< AUDIO_OUT_TYPE_VOICE_RECOGNITION_SERVICE */
162         };
163
164         unsigned int __mSampleRate;
165         EChannel     __mChannel;
166         ESampleType  __mSampleType;
167         EAudioType   __mAudioType;
168         int          __mAudioIndex;
169     };
170
171
172 } /* namespace tizen_media_audio */
173
174 #endif
175 #endif /* __TIZEN_MEDIA_AUDIO__IO_CAUDIO_INFO_H__ */