webOS Userland
Native system APIs for webOS
 
Loading...
Searching...
No Matches
NDL_directmedia_types.h
1#pragma once
2
3#define _REPLACE_TYPE(_old, _new) typedef _new _old __attribute__((__deprecated__("use " #_new " instead")))
4#define _REPLACE_TYPE_ERROR(_old, _new) typedef _new _old __attribute__((__unavailable__("use " #_new " instead")))
5#define _REPLACE_VALUE(_old, _new) _old __attribute__((__deprecated__("use " #_new " instead"))) = (_new)
6#define _REPLACE_STRUCT(_old, _new) struct _old __attribute__((__unavailable__("use struct " #_new " instead")))
7#define _REPLACE_ENUM(_old, _new) enum _old __attribute__((__unavailable__("use enum " #_new " instead")))
8
9typedef void (*ResourceReleased)(const char *type);
10
11_REPLACE_TYPE(NDLInitCallback, ResourceReleased);
12
13typedef enum NDL_DIRECTVIDEO_SRC_TYPE_ {
14 NDL_DIRECTVIDEO_SRC_TYPE_NONE = 0,
15 NDL_DIRECTVIDEO_SRC_TYPE_H264 = 1,
16} NDL_DIRECTVIDEO_SRC_TYPE;
17
18typedef enum NDL_DIRECTAUDIO_SRC_TYPE_ {
19 NDL_DIRECTAUDIO_SRC_TYPE_NONE = 0,
21 NDL_DIRECTAUDIO_SRC_TYPE_PCM = 1,
22 NDL_DIRECTAUDIO_SRC_TYPE_AC3 = 2,
24 NDL_DIRECTAUDIO_SRC_TYPE_AAC = 3,
25 NDL_DIRECTAUDIO_SRC_TYPE_WTF = 4,
26} NDL_DIRECTAUDIO_SRC_TYPE;
27
28_REPLACE_TYPE(NDL_DIRECTAUDIO_SRC_TYPE_T, NDL_DIRECTAUDIO_SRC_TYPE);
29
30typedef enum NDL_DIRECTAUDIO_SAMPLING_FREQ_ {
31 NDL_DIRECTAUDIO_SAMPLING_FREQ_NONE = 0,
32 NDL_DIRECTAUDIO_SAMPLING_FREQ_4_KHZ = 1,
33 _REPLACE_VALUE(NDL_DIRECTAUDIO_SAMPLING_FREQ_4KHZ, NDL_DIRECTAUDIO_SAMPLING_FREQ_4_KHZ),
34 NDL_DIRECTAUDIO_SAMPLING_FREQ_8_KHZ = 2,
35 _REPLACE_VALUE(NDL_DIRECTAUDIO_SAMPLING_FREQ_8KHZ, NDL_DIRECTAUDIO_SAMPLING_FREQ_8_KHZ),
36 NDL_DIRECTAUDIO_SAMPLING_FREQ_11_025KHZ = 3,
37 _REPLACE_VALUE(NDL_DIRECTAUDIO_SAMPLING_FREQ_11KHZ, NDL_DIRECTAUDIO_SAMPLING_FREQ_11_025KHZ),
38 NDL_DIRECTAUDIO_SAMPLING_FREQ_12_KHZ = 4,
39 _REPLACE_VALUE(NDL_DIRECTAUDIO_SAMPLING_FREQ_12KHZ, NDL_DIRECTAUDIO_SAMPLING_FREQ_12_KHZ),
40 NDL_DIRECTAUDIO_SAMPLING_FREQ_16_KHZ = 5,
41 _REPLACE_VALUE(NDL_DIRECTAUDIO_SAMPLING_FREQ_16KHZ, NDL_DIRECTAUDIO_SAMPLING_FREQ_16_KHZ),
42 NDL_DIRECTAUDIO_SAMPLING_FREQ_22_05KHZ = 6,
43 _REPLACE_VALUE(NDL_DIRECTAUDIO_SAMPLING_FREQ_22KHZ, NDL_DIRECTAUDIO_SAMPLING_FREQ_22_05KHZ),
44 NDL_DIRECTAUDIO_SAMPLING_FREQ_24_KHZ = 7,
45 _REPLACE_VALUE(NDL_DIRECTAUDIO_SAMPLING_FREQ_24KHZ, NDL_DIRECTAUDIO_SAMPLING_FREQ_24_KHZ),
46 NDL_DIRECTAUDIO_SAMPLING_FREQ_32_KHZ = 8,
47 _REPLACE_VALUE(NDL_DIRECTAUDIO_SAMPLING_FREQ_32KHZ, NDL_DIRECTAUDIO_SAMPLING_FREQ_32_KHZ),
48 NDL_DIRECTAUDIO_SAMPLING_FREQ_44_1KHZ = 9,
49 _REPLACE_VALUE(NDL_DIRECTAUDIO_SAMPLING_FREQ_44KHZ, NDL_DIRECTAUDIO_SAMPLING_FREQ_44_1KHZ),
50 NDL_DIRECTAUDIO_SAMPLING_FREQ_48_KHZ = 10,
51 _REPLACE_VALUE(NDL_DIRECTAUDIO_SAMPLING_FREQ_48KHZ, NDL_DIRECTAUDIO_SAMPLING_FREQ_48_KHZ),
52 NDL_DIRECTAUDIO_SAMPLING_FREQ_64_KHZ = 11,
53} NDL_DIRECTAUDIO_SAMPLING_FREQ;
54
55_REPLACE_TYPE(NDL_DIRECTAUDIO_SAMPLING_FREQ_T, NDL_DIRECTAUDIO_SAMPLING_FREQ);
56
57typedef enum NDL_DIRECTAUDIO_CH_ {
58 NDL_DIRECTAUDIO_CH_MAIN = 0,
59 NDL_DIRECTAUDIO_CH_SUB = 1,
60 NDL_DIRECTAUDIO_CH_MAX = 2,
61} NDL_DIRECTAUDIO_CH;
62
63_REPLACE_TYPE(NDL_DIRECTAUDIO_CH_T, NDL_DIRECTAUDIO_CH);
64
65typedef enum NDL_DIRECTAUDIO_NODELAY_MODE_ {
66 NDL_DIRECTAUDIO_NODELAY_MODE_DISABLED = -1,
67 NDL_DIRECTAUDIO_NODELAY_MODE_DEFAULT = 0,
68 NDL_DIRECTAUDIO_NODELAY_MODE_CUSTOM = 1,
69} NDL_DIRECTAUDIO_NODELAY_MODE;
70
71typedef enum NDL_DIRECTMEDIA_APP_STATE_ {
72 NDL_DIRECTMEDIA_APP_STATE_FOREGROUND = 0,
73 NDL_DIRECTMEDIA_APP_STATE_BACKGROUND = 1,
74} NDL_DIRECTMEDIA_APP_STATE;
75
76_REPLACE_TYPE(NDL_DIRECTMEDIA_APP_STATE_T, NDL_DIRECTMEDIA_APP_STATE);
77
78typedef struct NDL_DIRECTAUDIO_DATA_INFO {
79 unsigned int number_of_channel;
80 unsigned int bit_per_sample;
81 NDL_DIRECTAUDIO_NODELAY_MODE no_delay_mode;
82 int no_delay_upper_time;
83 int no_delay_lower_time;
84 NDL_DIRECTAUDIO_CH channel;
85 NDL_DIRECTAUDIO_SRC_TYPE source;
86 NDL_DIRECTAUDIO_SAMPLING_FREQ frequency;
88
89_REPLACE_TYPE_ERROR(NDL_DIRECTAUDIO_DATA_INFO, NDL_DIRECTAUDIO_DATA_INFO_T);
90
91typedef struct NDL_DIRECTVIDEO_DATA_INFO {
92 int width;
93 int height;
94 NDL_DIRECTVIDEO_SRC_TYPE source;
96
97_REPLACE_TYPE_ERROR(NDL_DIRECTVIDEO_DATA_INFO, NDL_DIRECTVIDEO_DATA_INFO_T);
98
99#if defined(NDL_DIRECTMEDIA_API_VERSION) && (NDL_DIRECTMEDIA_API_VERSION >= 2)
100/* types for API version 2 (webOS 5+) */
101
102typedef void (*NDLMediaLoadCallback)(int, long long, const char *);
103
104/* isSupported: 0 = no device supporting multi channel PCM,
105 * 1 = device supports it but Digital Sound Out is not pass through,
106 * 2 = current settings support multi channel PCM.
107 * note these are the callback codes, they are off by one against
108 * NDL_DirectAudioSupportMultiChannel(). */
109typedef void (*NDLMultiChannelPCMCallback)(int isSupported, const char *strValue);
110
111#define NDL_DIRECTMEDIA_AUDIO_PCM_FORMAT_S16LE "S16LE"
112#define NDL_DIRECTMEDIA_AUDIO_PCM_MODE_MONO "mono"
113#define NDL_DIRECTMEDIA_AUDIO_PCM_MODE_STEREO "stereo"
114#define NDL_DIRECTMEDIA_AUDIO_PCM_MODE_6_CHANNEL "6-channel"
115#define NDL_DIRECTMEDIA_AUDIO_PCM_LAYOUT_INTERLEAVED "interleaved"
116#define NDL_DIRECTMEDIA_AUDIO_PCM_LAYOUT_NON_INTERLEAVED "non-interleaved"
117
118typedef enum NDL_VIDEO_TYPE_ {
119 NDL_VIDEO_TYPE_H264 = 1,
120 NDL_VIDEO_TYPE_H265 = 2,
121 NDL_VIDEO_TYPE_VP9 = 3,
122 NDL_VIDEO_TYPE_AV1 = 4,
123 NDL_VIDEO_TYPE_MAX = 0x7FFFFFFF,
124} NDL_VIDEO_TYPE;
125
126_REPLACE_ENUM(NDL_VIDEO_TYPE, NDL_VIDEO_TYPE_);
127
128typedef enum NDL_AUDIO_TYPE_ {
129 NDL_AUDIO_TYPE_PCM = 1,
130 NDL_AUDIO_TYPE_MP3 = 2,
131 NDL_AUDIO_TYPE_OPUS = 3,
132 NDL_AUDIO_TYPE_MAX = 0x7FFFFFFF,
133} NDL_AUDIO_TYPE;
134
135_REPLACE_ENUM(NDL_AUDIO_TYPE, NDL_AUDIO_TYPE_);
136
137/* the rates are not sorted by frequency, 22.05 kHz is 8 and not 5 */
138typedef enum NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_ {
139 /* means "bypass". I'm pretty sure the app will crash on this value */
140 NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_NONE = 0,
141 NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_48KHZ = 1,
142 NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_44KHZ = 2,
143 NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_32KHZ = 3,
144 NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_24KHZ = 4,
145 NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_16KHZ = 5,
146 NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_12KHZ = 6,
147 NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_8KHZ = 7,
148 NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_22KHZ = 8,
149} NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE;
150
151_REPLACE_ENUM(NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE, NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_);
152
153static inline __attribute__((__const__)) NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_OF(int hertz) {
154 switch (hertz) {
155 case 48000:
156 return NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_48KHZ;
157 case 44100:
158 return NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_44KHZ;
159 case 32000:
160 return NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_32KHZ;
161 case 24000:
162 return NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_24KHZ;
163 case 16000:
164 return NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_16KHZ;
165 case 12000:
166 return NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_12KHZ;
167 case 8000:
168 return NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_8KHZ;
169 case 22050:
170 return NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_22KHZ;
171 default:
172 return NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE_NONE;
173 }
174}
175
176/* name confirmed: struct NDL_DIRECTAUDIO_PCM_INFO_ */
177typedef struct NDL_DIRECTAUDIO_PCM_INFO_ {
178 NDL_AUDIO_TYPE type;
179 int unknown1;
180 const char *format;
181 const char *layout;
182 const char *channelMode;
183 NDL_DIRECTMEDIA_AUDIO_PCM_SAMPLE_RATE sampleRate;
184} NDL_DIRECTAUDIO_PCM_INFO_T;
185
186_REPLACE_STRUCT(NDL_DIRECTMEDIA_AUDIO_PCM_INFO_T, NDL_DIRECTAUDIO_PCM_INFO_);
187_REPLACE_TYPE(NDL_DIRECTMEDIA_AUDIO_PCM_INFO, NDL_DIRECTAUDIO_PCM_INFO_T);
188
189typedef struct NDL_DIRECTMEDIA_AUDIO_OPUS_INFO {
190 NDL_AUDIO_TYPE type;
191 int unknown1;
192 int channels;
193 int unknown2;
194 double sampleRate;
195 const char *streamHeader;
196} NDL_DIRECTMEDIA_AUDIO_OPUS_INFO_T;
197
198_REPLACE_STRUCT(NDL_DIRECTMEDIA_AUDIO_OPUS_INFO_T, NDL_DIRECTMEDIA_AUDIO_OPUS_INFO);
199_REPLACE_TYPE(NDL_DIRECTMEDIA_AUDIO_OPUS_INFO, NDL_DIRECTMEDIA_AUDIO_OPUS_INFO_T);
200
201/* name confirmed: struct NDL_DIRECTMEDIA_DATA_INFO */
202typedef struct NDL_DIRECTMEDIA_DATA_INFO {
203 struct NDL_DIRECTMEDIA_VIDEO_INFO {
204 int width;
205 int height;
206 NDL_VIDEO_TYPE type;
207 int unknown1;
208 } video;
209 union {
210 NDL_AUDIO_TYPE type;
211 NDL_DIRECTAUDIO_PCM_INFO_T pcm;
212 NDL_DIRECTMEDIA_AUDIO_OPUS_INFO_T opus;
213 char padding[32];
214 } audio;
215} NDL_DIRECTMEDIA_DATA_INFO_T;
216
217_REPLACE_STRUCT(NDL_DIRECTMEDIA_DATA_INFO_T, NDL_DIRECTMEDIA_DATA_INFO);
218_REPLACE_TYPE(NDL_DIRECTMEDIA_DATA_INFO, NDL_DIRECTMEDIA_DATA_INFO_T);
219
220/* name confirmed: struct NDL_DIRECTVIDEO_HDR_INFO
221 * 15 words, passed to NDL_DirectVideoSetHDRInfo by value.
222 * primaries are in SMPTE ST 2086 order: 0 = green, 1 = blue, 2 = red. */
223typedef struct NDL_DIRECTVIDEO_HDR_INFO {
224 unsigned int displayPrimariesX0;
225 unsigned int displayPrimariesY0;
226 unsigned int displayPrimariesX1;
227 unsigned int displayPrimariesY1;
228 unsigned int displayPrimariesX2;
229 unsigned int displayPrimariesY2;
230 unsigned int whitePointX;
231 unsigned int whitePointY;
232 unsigned int maxDisplayMasteringLuminance;
233 unsigned int minDisplayMasteringLuminance;
234 unsigned int maxContentLightLevel;
235 unsigned int maxPicAverageLightLevel;
236 /* H.265 VUI codes. HDR10 uses 16 (SMPTE ST 2084), 9 (BT.2020), 9 (BT.2020 non-constant). */
237 unsigned int transferCharacteristics;
238 unsigned int colorPrimaries;
239 unsigned int matrixCoeffs;
240} NDL_DIRECTVIDEO_HDR_INFO_T;
241
242_REPLACE_STRUCT(NDL_DIRECTVIDEO_HDR_INFO_T, NDL_DIRECTVIDEO_HDR_INFO);
243_REPLACE_TYPE(NDL_DIRECTVIDEO_HDR_INFO, NDL_DIRECTVIDEO_HDR_INFO_T);
244
245#endif
246
247#undef _REPLACE_TYPE
248#undef _REPLACE_VALUE
249#undef _REPLACE_STRUCT
250#undef _REPLACE_ENUM
Definition NDL_directmedia_types.h:78
Definition NDL_directmedia_types.h:91