1ba487d97Sopenharmony_ci/*
2ba487d97Sopenharmony_ci * Copyright (c) 2020 Huawei Device Co., Ltd.
3ba487d97Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4ba487d97Sopenharmony_ci * you may not use this file except in compliance with the License.
5ba487d97Sopenharmony_ci * You may obtain a copy of the License at
6ba487d97Sopenharmony_ci *
7ba487d97Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8ba487d97Sopenharmony_ci *
9ba487d97Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10ba487d97Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11ba487d97Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12ba487d97Sopenharmony_ci * See the License for the specific language governing permissions and
13ba487d97Sopenharmony_ci * limitations under the License.
14ba487d97Sopenharmony_ci */
15ba487d97Sopenharmony_ci
16ba487d97Sopenharmony_ci/**
17ba487d97Sopenharmony_ci * @addtogroup MultiMedia_MediaCommon
18ba487d97Sopenharmony_ci * @{
19ba487d97Sopenharmony_ci *
20ba487d97Sopenharmony_ci * @brief Provides data types and media formats required for recording and playing audio and videos.
21ba487d97Sopenharmony_ci *
22ba487d97Sopenharmony_ci *
23ba487d97Sopenharmony_ci * @since 1.0
24ba487d97Sopenharmony_ci * @version 1.0
25ba487d97Sopenharmony_ci */
26ba487d97Sopenharmony_ci
27ba487d97Sopenharmony_ci/**
28ba487d97Sopenharmony_ci * @file media_info.h
29ba487d97Sopenharmony_ci *
30ba487d97Sopenharmony_ci * @brief Declares the <b>media_info</b> class and provides various audio, video, and codec types.
31ba487d97Sopenharmony_ci *
32ba487d97Sopenharmony_ci *
33ba487d97Sopenharmony_ci * @since 1.0
34ba487d97Sopenharmony_ci * @version 1.0
35ba487d97Sopenharmony_ci */
36ba487d97Sopenharmony_ci
37ba487d97Sopenharmony_ci#ifndef MEDIA_INFO_H
38ba487d97Sopenharmony_ci#define MEDIA_INFO_H
39ba487d97Sopenharmony_ci#include <string>
40ba487d97Sopenharmony_ci
41ba487d97Sopenharmony_ci/**
42ba487d97Sopenharmony_ci * Indicates the constant quality mode. In this mode, the bit rate is not limited to guarantee the image quality to
43ba487d97Sopenharmony_ci * the largest extent.
44ba487d97Sopenharmony_ci */
45ba487d97Sopenharmony_ciconst int BITRATE_MODE_CQ  = 0;
46ba487d97Sopenharmony_ci
47ba487d97Sopenharmony_ci/**
48ba487d97Sopenharmony_ci * Indicates the variable bit rate mode. In this mode, the codec dynamically adjusts the output bit rate based on
49ba487d97Sopenharmony_ci * the image complexity. The codec increases the bit rate if the image is complex and decreases the bit rate if the
50ba487d97Sopenharmony_ci * image is simple.
51ba487d97Sopenharmony_ci */
52ba487d97Sopenharmony_ciconst int BITRATE_MODE_VBR = 1;
53ba487d97Sopenharmony_ci
54ba487d97Sopenharmony_ci/** Indicates the constant bit rate mode. In this mode, the codec keeps the output bit rate as constant as possible. */
55ba487d97Sopenharmony_ciconst int BITRATE_MODE_CBR = 2;
56ba487d97Sopenharmony_ci
57ba487d97Sopenharmony_ci/** Indicates the ARGB8888 color format. */
58ba487d97Sopenharmony_ciconst int32_t COLOR_FORMAT_ARGB8888_32BIT  = 16;
59ba487d97Sopenharmony_ci
60ba487d97Sopenharmony_ci/** Indicates the YUV420SP color format. */
61ba487d97Sopenharmony_ciconst int32_t COLOR_FORMAT_YUV420SP        = 21;
62ba487d97Sopenharmony_ci
63ba487d97Sopenharmony_ci
64ba487d97Sopenharmony_ci/**
65ba487d97Sopenharmony_ci * @brief Enumerates audio source types.
66ba487d97Sopenharmony_ci *
67ba487d97Sopenharmony_ci * @since 1.0
68ba487d97Sopenharmony_ci * @version 1.0
69ba487d97Sopenharmony_ci */
70ba487d97Sopenharmony_citypedef enum {
71ba487d97Sopenharmony_ci    /** Invalid audio source */
72ba487d97Sopenharmony_ci    AUDIO_SOURCE_INVALID = -1,
73ba487d97Sopenharmony_ci    /** Default audio source */
74ba487d97Sopenharmony_ci    AUDIO_SOURCE_DEFAULT = 0,
75ba487d97Sopenharmony_ci    /** Microphone */
76ba487d97Sopenharmony_ci    AUDIO_MIC = 1,
77ba487d97Sopenharmony_ci    /** Uplink voice */
78ba487d97Sopenharmony_ci    AUDIO_VOICE_UPLINK = 2,
79ba487d97Sopenharmony_ci    /** Downlink voice */
80ba487d97Sopenharmony_ci    AUDIO_VOICE_DOWNLINK = 3,
81ba487d97Sopenharmony_ci    /** Voice call */
82ba487d97Sopenharmony_ci    AUDIO_VOICE_CALL = 4,
83ba487d97Sopenharmony_ci    /** Camcorder */
84ba487d97Sopenharmony_ci    AUDIO_CAMCORDER = 5,
85ba487d97Sopenharmony_ci    /** Voice recognition */
86ba487d97Sopenharmony_ci    AUDIO_VOICE_RECOGNITION = 6,
87ba487d97Sopenharmony_ci    /** Voice communication */
88ba487d97Sopenharmony_ci    AUDIO_VOICE_COMMUNICATION = 7,
89ba487d97Sopenharmony_ci    /** Remote submix */
90ba487d97Sopenharmony_ci    AUDIO_REMOTE_SUBMIX = 8,
91ba487d97Sopenharmony_ci    /** Unprocessed audio */
92ba487d97Sopenharmony_ci    AUDIO_UNPROCESSED = 9,
93ba487d97Sopenharmony_ci    /** Voice performance */
94ba487d97Sopenharmony_ci    AUDIO_VOICE_PERFORMANCE = 10,
95ba487d97Sopenharmony_ci    /** Echo reference */
96ba487d97Sopenharmony_ci    AUDIO_ECHO_REFERENCE = 1997,
97ba487d97Sopenharmony_ci    /** Radio tuner */
98ba487d97Sopenharmony_ci    AUDIO_RADIO_TUNER = 1998,
99ba487d97Sopenharmony_ci    /** Hotword */
100ba487d97Sopenharmony_ci    AUDIO_HOTWORD = 1999,
101ba487d97Sopenharmony_ci    /** Extended remote submix */
102ba487d97Sopenharmony_ci    AUDIO_REMOTE_SUBMIX_EXTEND = 10007,
103ba487d97Sopenharmony_ci} AudioSourceType;
104ba487d97Sopenharmony_ci
105ba487d97Sopenharmony_ci/**
106ba487d97Sopenharmony_ci * @brief Defines the audio Device Descriptor.
107ba487d97Sopenharmony_ci *
108ba487d97Sopenharmony_ci * @since 1.0
109ba487d97Sopenharmony_ci * @version 1.0
110ba487d97Sopenharmony_ci */
111ba487d97Sopenharmony_citypedef struct {
112ba487d97Sopenharmony_ci    /** Device name */
113ba487d97Sopenharmony_ci    std::string deviceName;
114ba487d97Sopenharmony_ci    /** Type of the audio input source */
115ba487d97Sopenharmony_ci    AudioSourceType inputSourceType;
116ba487d97Sopenharmony_ci    /** Bits 31-24: reserved bits; bits 23-16: mode ID; bits 15-8: device ID; bits 7-0: channel ID */
117ba487d97Sopenharmony_ci    uint32_t deviceId;
118ba487d97Sopenharmony_ci} AudioDeviceDesc;
119ba487d97Sopenharmony_ci
120ba487d97Sopenharmony_ci/**
121ba487d97Sopenharmony_ci * @brief Enumerates audio stream types.
122ba487d97Sopenharmony_ci *
123ba487d97Sopenharmony_ci * @since 1.0
124ba487d97Sopenharmony_ci * @version 1.0
125ba487d97Sopenharmony_ci */
126ba487d97Sopenharmony_citypedef enum {
127ba487d97Sopenharmony_ci    /** Default audio stream type */
128ba487d97Sopenharmony_ci    TYPE_DEFAULT = -1,
129ba487d97Sopenharmony_ci    /** Media */
130ba487d97Sopenharmony_ci    TYPE_MEDIA = 0,
131ba487d97Sopenharmony_ci    /** Voice call */
132ba487d97Sopenharmony_ci    TYPE_VOICE_COMMUNICATION = 1,
133ba487d97Sopenharmony_ci    /** System sound */
134ba487d97Sopenharmony_ci    TYPE_SYSTEM = 2,
135ba487d97Sopenharmony_ci    /** Ringtone */
136ba487d97Sopenharmony_ci    TYPE_RING = 3,
137ba487d97Sopenharmony_ci    /** Music */
138ba487d97Sopenharmony_ci    TYPE_MUSIC = 4,
139ba487d97Sopenharmony_ci    /** Alarm */
140ba487d97Sopenharmony_ci    TYPE_ALARM = 5,
141ba487d97Sopenharmony_ci    /** Notification */
142ba487d97Sopenharmony_ci    TYPE_NOTIFICATION = 6,
143ba487d97Sopenharmony_ci    /** Bluetooth Synchronous Connection-Oriented (SCO) */
144ba487d97Sopenharmony_ci    TYPE_BLUETOOTH_SCO = 7,
145ba487d97Sopenharmony_ci    /** Enforced audible */
146ba487d97Sopenharmony_ci    TYPE_ENFORCED_AUDIBLE = 8,
147ba487d97Sopenharmony_ci    /** Dual-tone multi-frequency (DTMF) */
148ba487d97Sopenharmony_ci    TYPE_DTMF = 9,
149ba487d97Sopenharmony_ci    /** Text-To-Speech (TTS) */
150ba487d97Sopenharmony_ci    TYPE_TTS = 10,
151ba487d97Sopenharmony_ci    /** Accessibility */
152ba487d97Sopenharmony_ci    TYPE_ACCESSIBILITY = 11,
153ba487d97Sopenharmony_ci} AudioStreamType;
154ba487d97Sopenharmony_ci
155ba487d97Sopenharmony_ci/**
156ba487d97Sopenharmony_ci * @brief Enumerates video codec formats.
157ba487d97Sopenharmony_ci *
158ba487d97Sopenharmony_ci * @since 1.0
159ba487d97Sopenharmony_ci * @version 1.0
160ba487d97Sopenharmony_ci */
161ba487d97Sopenharmony_citypedef enum {
162ba487d97Sopenharmony_ci    /** Default format */
163ba487d97Sopenharmony_ci    VIDEO_DEFAULT = 0,
164ba487d97Sopenharmony_ci    /** H.264 */
165ba487d97Sopenharmony_ci    H264 = 2,
166ba487d97Sopenharmony_ci    /** High Efficiency Video Coding (HEVC) */
167ba487d97Sopenharmony_ci    HEVC = 5,
168ba487d97Sopenharmony_ci} VideoCodecFormat;
169ba487d97Sopenharmony_ci
170ba487d97Sopenharmony_ci/**
171ba487d97Sopenharmony_ci * @brief Enumerates audio codec formats.
172ba487d97Sopenharmony_ci *
173ba487d97Sopenharmony_ci * @since 1.0
174ba487d97Sopenharmony_ci * @version 1.0
175ba487d97Sopenharmony_ci */
176ba487d97Sopenharmony_citypedef enum {
177ba487d97Sopenharmony_ci    /** Default format */
178ba487d97Sopenharmony_ci    AUDIO_DEFAULT    = 0,
179ba487d97Sopenharmony_ci    /** PCM */
180ba487d97Sopenharmony_ci    PCM              = 1,
181ba487d97Sopenharmony_ci    /** Advanced Audio Coding Low Complexity (AAC-LC) */
182ba487d97Sopenharmony_ci    AAC_LC           = 2,
183ba487d97Sopenharmony_ci    /** High-Efficiency Advanced Audio Coding (AAC-HE), previously known as AAC+ or aacPlus v1 */
184ba487d97Sopenharmony_ci    AAC_HE_V1        = 3,
185ba487d97Sopenharmony_ci    /** AAC++ or aacPlus v2 */
186ba487d97Sopenharmony_ci    AAC_HE_V2        = 4,
187ba487d97Sopenharmony_ci    /** Advanced Audio Coding Low Delay (AAC-LD) */
188ba487d97Sopenharmony_ci    AAC_LD           = 5,
189ba487d97Sopenharmony_ci    /** Advanced Audio Coding Enhanced Low Delay (AAC-ELD) */
190ba487d97Sopenharmony_ci    AAC_ELD          = 6,
191ba487d97Sopenharmony_ci    /** G711 a-law*/
192ba487d97Sopenharmony_ci    G711A            = 7,
193ba487d97Sopenharmony_ci    /** G711 u-law */
194ba487d97Sopenharmony_ci    G711U            = 8,
195ba487d97Sopenharmony_ci    /** G726 */
196ba487d97Sopenharmony_ci    G726             = 9,
197ba487d97Sopenharmony_ci    /** Invalid value */
198ba487d97Sopenharmony_ci    FORMAT_BUTT,
199ba487d97Sopenharmony_ci} AudioCodecFormat;
200ba487d97Sopenharmony_ci
201ba487d97Sopenharmony_ci/**
202ba487d97Sopenharmony_ci * @brief Enumerates audio bit widths.
203ba487d97Sopenharmony_ci *
204ba487d97Sopenharmony_ci * @since 1.0
205ba487d97Sopenharmony_ci * @version 1.0
206ba487d97Sopenharmony_ci */
207ba487d97Sopenharmony_citypedef enum {
208ba487d97Sopenharmony_ci    /** 8-bit width */
209ba487d97Sopenharmony_ci    BIT_WIDTH_8   = 8,
210ba487d97Sopenharmony_ci    /** 16-bit width */
211ba487d97Sopenharmony_ci    BIT_WIDTH_16  = 16,
212ba487d97Sopenharmony_ci    /** 24-bit width */
213ba487d97Sopenharmony_ci    BIT_WIDTH_24  = 24,
214ba487d97Sopenharmony_ci    /** 32-bit width */
215ba487d97Sopenharmony_ci    BIT_WIDTH_32  = 32,
216ba487d97Sopenharmony_ci    /** Invalid value */
217ba487d97Sopenharmony_ci    BIT_WIDTH_BUTT,
218ba487d97Sopenharmony_ci} AudioBitWidth;
219ba487d97Sopenharmony_ci#endif  // MEDIA_INFO_H
220