884e1abf7f52c912756e7ad4e10b8b73c611d2e9
[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
24 namespace tizen_media_audio {
25
26
27     /**
28      * Audio Information
29      */
30     class CAudioInfo {
31     public:
32         enum class EChannel : unsigned int {
33             CHANNEL_MONO = 1,               /**< 1 channel, mono */
34             CHANNEL_STEREO,                 /**< 2 channel, stereo */
35             CHANNEL_MAX
36         };
37
38         enum class ESampleType : unsigned int {
39             SAMPLE_TYPE_U8 = 1,             /**< Unsigned 8-bit audio samples */
40             SAMPLE_TYPE_S16_LE,             /**< Signed 16-bit audio samples */
41             SAMPLE_TYPE_MAX
42         };
43
44         enum class EAudioType : unsigned int {
45             /* Input Type */
46             AUDIO_IN_TYPE_MEDIA = 0,
47             //AUDIO_IN_TYPE_SYSTEM,
48             //AUDIO_IN_TYPE_ALARM,
49             //AUDIO_IN_TYPE_NOTIFICATION,
50             //AUDIO_IN_TYPE_EMERGENCY,
51             //AUDIO_IN_TYPE_VOICE_INFORMATION,
52             AUDIO_IN_TYPE_VOICE_RECOGNITION,
53             //AUDIO_IN_TYPE_RINGTONE_VOIP,
54             AUDIO_IN_TYPE_VOIP,
55             AUDIO_IN_TYPE_MEDIA_EXTERNAL_ONLY,
56             //AUDIO_IN_TYPE_RINGTONE_CALL,
57             //AUDIO_IN_TYPE_VOICE_CALL,
58             //AUDIO_IN_TYPE_VIDEO_CALL,
59             //AUDIO_IN_TYPE_RADIO,
60             AUDIO_IN_TYPE_LOOPBACK,
61
62             /* Output Type */
63             AUDIO_OUT_TYPE_MEDIA,
64             AUDIO_OUT_TYPE_SYSTEM,
65             AUDIO_OUT_TYPE_ALARM,
66             AUDIO_OUT_TYPE_NOTIFICATION,
67             AUDIO_OUT_TYPE_EMERGENCY,
68             AUDIO_OUT_TYPE_VOICE_INFORMATION,
69             //AUDIO_OUT_TYPE_VOICE_RECOGNITION,
70             AUDIO_OUT_TYPE_RINGTONE_VOIP,
71             AUDIO_OUT_TYPE_VOIP,
72             AUDIO_OUT_TYPE_MEDIA_EXTERNAL_ONLY,
73             AUDIO_OUT_TYPE_RINGTONE_CALL,
74             //AUDIO_OUT_TYPE_VOICE_CALL,
75             //AUDIO_OUT_TYPE_VIDEO_CALL,
76             //AUDIO_OUT_TYPE_RADIO,
77             //AUDIO_OUT_TYPE_LOOPBACK,
78
79             AUDIO_TYPE_MAX
80         };
81
82         enum class EAudioIOState : unsigned int {
83             AUDIO_IO_STATE_NONE,      /**< Audio-io handle is not created */
84             AUDIO_IO_STATE_IDLE,      /**< Audio-io handle is created, but not prepared */
85             AUDIO_IO_STATE_RUNNING,   /**< Audio-io handle is ready and the stream is running */
86             AUDIO_IO_STATE_PAUSED,    /**< Audio-io handle is ready and the stream is paused */
87             AUDIO_IO_STATE_MAX
88         };
89
90         const static unsigned int MIN_SYSTEM_SAMPLERATE = 8000;
91         const static unsigned int MAX_SYSTEM_SAMPLERATE = 48000;
92
93         /* Constructors */
94         CAudioInfo();
95         CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sampleType, EAudioType audioType, int audioIndex) throw(CAudioError);
96
97         /* Setter & Getter */
98         unsigned int getSampleRate();
99         EChannel getChannel();
100         ESampleType getSampleType();
101         EAudioType getAudioType();
102         void setAudioType(EAudioType audioType);
103         int getAudioIndex();
104         void setAudioIndex(int audioIndex);
105         void convertAudioType2StreamType(CAudioInfo::EAudioType audioType, char **streamType);
106         void convertInputStreamType2AudioType(char *streamType, CAudioInfo::EAudioType *audioType);
107         void convertOutputStreamType2AudioType(char *streamType, CAudioInfo::EAudioType *audioType);
108
109     private:
110         const char *__STREAM_TYPE_TABLE[(unsigned int)EAudioType::AUDIO_TYPE_MAX] = {
111             /* Input Type */
112             "media",                  /**< AUDIO_IN_TYPE_MEDIA */
113             //"system",               /**< AUDIO_IN_TYPE_SYSTEM */
114             //"alarm",                /**< AUDIO_IN_TYPE_ALARM */
115             //"notification",         /**< AUDIO_IN_TYPE_NOTIFICATION */
116             //"emergency",            /**< AUDIO_IN_TYPE_EMERGENCY */
117             //"voice-information",    /**< AUDIO_IN_TYPE_VOICE_INFORMATION */
118             "voice-recognition",      /**< AUDIO_IN_TYPE_VOICE_RECOGNITION */
119             //"ringtone-voip",        /**< AUDIO_IN_TYPE_RINGTONE_VOIP */
120             "voip",                   /**< AUDIO_IN_TYPE_VOIP */
121             "ext-media",              /**< AUDIO_IN_TYPE_MEDIA_EXTERNAL_ONLY */
122             //"ringtone-call",        /**< AUDIO_IN_TYPE_RINGTONE_CALL */
123             //"call-voice",           /**< AUDIO_IN_TYPE_VOICE_CALL */
124             //"call-video",           /**< AUDIO_IN_TYPE_VIDEO_CALL */
125             //"radio",                /**< AUDIO_IN_TYPE_RADIO */
126             "loopback",               /**< AUDIO_IN_TYPE_LOOPBACK */
127
128             /* Output Type */
129             "media",                  /**< AUDIO_OUT_TYPE_MEDIA */
130             "system",                 /**< AUDIO_OUT_TYPE_SYSTEM */
131             "alarm",                  /**< AUDIO_OUT_TYPE_ALARM */
132             "notification",           /**< AUDIO_OUT_TYPE_NOTIFICATION */
133             "emergency",              /**< AUDIO_OUT_TYPE_EMERGENCY */
134             "voice-information",      /**< AUDIO_OUT_TYPE_VOICE_INFORMATION */
135             //"voice-recognition",    /**< AUDIO_OUT_TYPE_VOICE_RECOGNITION */
136             "ringtone-voip",          /**< AUDIO_OUT_TYPE_RINGTONE_VOIP */
137             "voip",                   /**< AUDIO_OUT_TYPE_VOIP */
138             "ext-media",              /**< AUDIO_OUT_TYPE_MEDIA_EXTERNAL_ONLY */
139             "ringtone-call",          /**< AUDIO_OUT_TYPE_RINGTONE_CALL */
140             //"call-voice",           /**< AUDIO_OUT_TYPE_VOICE_CALL */
141             //"call-video",           /**< AUDIO_OUT_TYPE_VIDEO_CALL */
142             //"radio",                /**< AUDIO_OUT_TYPE_RADIO */
143             //"loopback",             /**< AUDIO_OUT_TYPE_LOOPBACK */
144         };
145
146         unsigned int __mSampleRate;
147         EChannel     __mChannel;
148         ESampleType  __mSampleType;
149         EAudioType   __mAudioType;
150         int          __mAudioIndex;
151     };
152
153
154 } /* namespace tizen_media_audio */
155
156 #endif
157 #endif /* __TIZEN_MEDIA_AUDIO__IO_CAUDIO_INFO_H__ */