1/*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef OHOS_DAUDIO_AUDIO_PARAM_H
17#define OHOS_DAUDIO_AUDIO_PARAM_H
18
19#include <string>
20
21namespace OHOS {
22namespace DistributedHardware {
23typedef enum {
24    SAMPLE_RATE_8000 = 8000,
25    SAMPLE_RATE_11025 = 11025,
26    SAMPLE_RATE_12000 = 12000,
27    SAMPLE_RATE_16000 = 16000,
28    SAMPLE_RATE_22050 = 22050,
29    SAMPLE_RATE_24000 = 24000,
30    SAMPLE_RATE_32000 = 32000,
31    SAMPLE_RATE_44100 = 44100,
32    SAMPLE_RATE_48000 = 48000,
33    SAMPLE_RATE_64000 = 64000,
34    SAMPLE_RATE_96000 = 96000
35} AudioSampleRate;
36
37typedef enum {
38    SOURCE_TYPE_INVALID = -1,
39    SOURCE_TYPE_MIC,
40    SOURCE_TYPE_VOICE_CALL = 4,
41    SOURCE_TYPE_VOICE_COMMUNICATION = 7
42} SourceType;
43
44typedef enum {
45    MONO = 1,
46    STEREO = 2
47} AudioChannel;
48
49typedef enum {
50    SAMPLE_U8 = 0,
51    SAMPLE_S16LE = 1,
52    SAMPLE_S24LE = 2,
53    SAMPLE_S32LE = 3,
54    SAMPLE_F32LE = 4,
55    INVALID_WIDTH = -1
56} AudioSampleFormat;
57
58typedef enum {
59    AUDIO_CODEC_AAC = 0,
60    AUDIO_CODEC_FLAC = 1
61} AudioCodecType;
62
63typedef enum {
64    CONTENT_TYPE_UNKNOWN = 0,
65    CONTENT_TYPE_SPEECH = 1,
66    CONTENT_TYPE_MUSIC = 2,
67    CONTENT_TYPE_MOVIE = 3,
68    CONTENT_TYPE_SONIFICATION = 4,
69    CONTENT_TYPE_RINGTONE = 5
70} ContentType;
71
72typedef enum {
73    STREAM_USAGE_UNKNOWN = 0,
74    STREAM_USAGE_MEDIA = 1,
75    STREAM_USAGE_VOICE_COMMUNICATION = 2,
76    STREAM_USAGE_VOICE_ASSISTANT = 4,
77    STREAM_USAGE_MMAP = 5,
78    STREAM_USAGE_NOTIFICATION_RINGTONE = 6
79} StreamUsage;
80
81typedef enum {
82    NORMAL_MODE = 0,
83    MMAP_MODE = 1,
84} PortOperationMode;
85
86typedef struct AudioCommonParam {
87    AudioSampleRate sampleRate = SAMPLE_RATE_8000;
88    AudioChannel channelMask = MONO;
89    AudioSampleFormat bitFormat = SAMPLE_U8;
90    AudioCodecType codecType = AUDIO_CODEC_AAC;
91    uint32_t frameSize = 0;
92} AudioCommonParam;
93
94typedef struct AudioCaptureOptions {
95    SourceType sourceType = SOURCE_TYPE_INVALID;
96    PortOperationMode capturerFlags = NORMAL_MODE;
97} AudioCaptureOptions;
98
99typedef struct AudioRenderOptions {
100    ContentType contentType = CONTENT_TYPE_UNKNOWN;
101    StreamUsage streamUsage = STREAM_USAGE_UNKNOWN;
102    PortOperationMode renderFlags = NORMAL_MODE;
103} AudioRenderOptions;
104
105typedef struct AudioParamHDF {
106    AudioSampleRate sampleRate = SAMPLE_RATE_8000;
107    AudioChannel channelMask = MONO;
108    AudioSampleFormat bitFormat = SAMPLE_U8;
109    StreamUsage streamUsage = STREAM_USAGE_UNKNOWN;
110    uint32_t frameSize = 0;
111    uint32_t period = 0;
112    PortOperationMode renderFlags = NORMAL_MODE;
113    PortOperationMode capturerFlags = NORMAL_MODE;
114    std::string ext;
115} AudioParamHDF;
116
117typedef struct {
118    AudioCommonParam comParam;
119    AudioCaptureOptions captureOpts;
120    AudioRenderOptions renderOpts;
121} AudioParam;
122
123typedef enum {
124    STATE_UNKNOWN = -1,
125    STATE_CHANNEL_OPEN = 0,
126    STATE_CHANNEL_CLOSE = 1
127} STATE;
128
129typedef enum {
130    CAP_UNKNOWN = 0,
131    CAP_SPK = 1,
132    CAP_MIC = 2,
133} PortCapType;
134
135typedef struct {
136    int64_t tvSec;
137    int64_t tvNSec;
138} CurrentTimeHDF;
139
140typedef enum {
141    REF,
142    MIC1,
143} StreamType;
144} // namespace DistributedHardware
145} // namespace OHOS
146#endif // OHOS_DAUDIO_AUDIO_PARAM_H
147