Load 57 into trunk.
[nativeclient.git] / service_runtime / include / sys / audio_video.h
blob32ee73db0851b4f0f82d8b81396eeb7c0ff2b655
1 /*
2 * Copyright 2008, Google Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above
12 * copyright notice, this list of conditions and the following disclaimer
13 * in the documentation and/or other materials provided with the
14 * distribution.
15 * * Neither the name of Google Inc. nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 * NaCl low-level runtime library interfaces.
36 * Note: audio/video function declarations have moved to
37 * native_client/tools/libav
39 * Applications should #include <nacl/nacl_av.h> instead of this file.
43 #ifndef NATIVE_CLIENT_SERVICE_RUNTIME_AUDIO_VIDEO_H_
44 #define NATIVE_CLIENT_SERVICE_RUNTIME_AUDIO_VIDEO_H_
46 /**
47 * @file
48 * Defines a basic audio/video interface for Native Client applications.
50 * @addtogroup audio_video
51 * @{
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
58 #define kNaClAudioBufferLength (16 * 1024)
60 /**
61 * @nacl
62 * Subsystem enumerations for nacl_multimedia_init()
63 * These values can be used as a bitset.
64 * To initialize multiple subsystems, use the | operator to
65 * combine them, for example:
66 * NACL_SUBSYSTEM_VIDEO | NACL_SUBSYSTEM_AUDIO
68 enum {
69 NACL_SUBSYSTEM_VIDEO = 0x01, /**< application will output video */
70 NACL_SUBSYSTEM_AUDIO = 0x02, /**< application will emit audio */
71 NACL_SUBSYSTEM_EMBED = 0x04 /**< application will embed in browser */
74 /**
75 * @nacl
76 * Audio format enumerations for nacl_audio_init()
77 * Describes the source data format that will be used to drive
78 * audio output.
80 enum NaClAudioFormat {
81 NACL_AUDIO_FORMAT_STEREO_44K = 0, /**< 44.1kHz 16 bit stereo */
82 NACL_AUDIO_FORMAT_STEREO_48K /**< 48kHz 16 bit stereo */
85 /**
86 * @nacl
87 * Event type enumerations used to identify event structure.
89 enum NaClEvent {
90 NACL_EVENT_NOT_USED = 0,
91 NACL_EVENT_ACTIVE, /**< triggered when focus gained / lost */
92 NACL_EVENT_EXPOSE, /**< external source requests redraw */
93 NACL_EVENT_KEY_DOWN, /**< key down (pressed) */
94 NACL_EVENT_KEY_UP, /**< key up (released) */
95 NACL_EVENT_MOUSE_MOTION, /**< mouse movement */
96 NACL_EVENT_MOUSE_BUTTON_DOWN, /**< mouse button down (pressed) */
97 NACL_EVENT_MOUSE_BUTTON_UP, /**< mouse button up (released) */
98 NACL_EVENT_QUIT, /**< application quit */
99 NACL_EVENT_UNSUPPORTED
103 * @nacl
104 * Key enumerations
105 * Do not alter these mappings; they must match SDL.
107 enum NaClKey {
108 NACL_KEY_UNKNOWN = 0,
109 NACL_KEY_FIRST = 0,
110 NACL_KEY_BACKSPACE = 8,
111 NACL_KEY_TAB = 9,
112 NACL_KEY_CLEAR = 12,
113 NACL_KEY_RETURN = 13,
114 NACL_KEY_PAUSE = 19,
115 NACL_KEY_ESCAPE = 27,
116 NACL_KEY_SPACE = 32,
117 NACL_KEY_EXCLAIM = 33,
118 NACL_KEY_QUOTEDBL = 34,
119 NACL_KEY_HASH = 35,
120 NACL_KEY_DOLLAR = 36,
121 NACL_KEY_AMPERSAND = 38,
122 NACL_KEY_QUOTE = 39,
123 NACL_KEY_LEFTPAREN = 40,
124 NACL_KEY_RIGHTPAREN = 41,
125 NACL_KEY_ASTERISK = 42,
126 NACL_KEY_PLUS = 43,
127 NACL_KEY_COMMA = 44,
128 NACL_KEY_MINUS = 45,
129 NACL_KEY_PERIOD = 46,
130 NACL_KEY_SLASH = 47,
131 NACL_KEY_0 = 48,
132 NACL_KEY_1 = 49,
133 NACL_KEY_2 = 50,
134 NACL_KEY_3 = 51,
135 NACL_KEY_4 = 52,
136 NACL_KEY_5 = 53,
137 NACL_KEY_6 = 54,
138 NACL_KEY_7 = 55,
139 NACL_KEY_8 = 56,
140 NACL_KEY_9 = 57,
141 NACL_KEY_COLON = 58,
142 NACL_KEY_SEMICOLON = 59,
143 NACL_KEY_LESS = 60,
144 NACL_KEY_EQUALS = 61,
145 NACL_KEY_GREATER = 62,
146 NACL_KEY_QUESTION = 63,
147 NACL_KEY_AT = 64,
148 NACL_KEY_LEFTBRACKET = 91,
149 NACL_KEY_BACKSLASH = 92,
150 NACL_KEY_RIGHTBRACKET = 93,
151 NACL_KEY_CARET = 94,
152 NACL_KEY_UNDERSCORE = 95,
153 NACL_KEY_BACKQUOTE = 96,
154 NACL_KEY_a = 97,
155 NACL_KEY_b = 98,
156 NACL_KEY_c = 99,
157 NACL_KEY_d = 100,
158 NACL_KEY_e = 101,
159 NACL_KEY_f = 102,
160 NACL_KEY_g = 103,
161 NACL_KEY_h = 104,
162 NACL_KEY_i = 105,
163 NACL_KEY_j = 106,
164 NACL_KEY_k = 107,
165 NACL_KEY_l = 108,
166 NACL_KEY_m = 109,
167 NACL_KEY_n = 110,
168 NACL_KEY_o = 111,
169 NACL_KEY_p = 112,
170 NACL_KEY_q = 113,
171 NACL_KEY_r = 114,
172 NACL_KEY_s = 115,
173 NACL_KEY_t = 116,
174 NACL_KEY_u = 117,
175 NACL_KEY_v = 118,
176 NACL_KEY_w = 119,
177 NACL_KEY_x = 120,
178 NACL_KEY_y = 121,
179 NACL_KEY_z = 122,
180 NACL_KEY_DELETE = 127,
181 NACL_KEY_WORLD_0 = 160,
182 NACL_KEY_WORLD_1 = 161,
183 NACL_KEY_WORLD_2 = 162,
184 NACL_KEY_WORLD_3 = 163,
185 NACL_KEY_WORLD_4 = 164,
186 NACL_KEY_WORLD_5 = 165,
187 NACL_KEY_WORLD_6 = 166,
188 NACL_KEY_WORLD_7 = 167,
189 NACL_KEY_WORLD_8 = 168,
190 NACL_KEY_WORLD_9 = 169,
191 NACL_KEY_WORLD_10 = 170,
192 NACL_KEY_WORLD_11 = 171,
193 NACL_KEY_WORLD_12 = 172,
194 NACL_KEY_WORLD_13 = 173,
195 NACL_KEY_WORLD_14 = 174,
196 NACL_KEY_WORLD_15 = 175,
197 NACL_KEY_WORLD_16 = 176,
198 NACL_KEY_WORLD_17 = 177,
199 NACL_KEY_WORLD_18 = 178,
200 NACL_KEY_WORLD_19 = 179,
201 NACL_KEY_WORLD_20 = 180,
202 NACL_KEY_WORLD_21 = 181,
203 NACL_KEY_WORLD_22 = 182,
204 NACL_KEY_WORLD_23 = 183,
205 NACL_KEY_WORLD_24 = 184,
206 NACL_KEY_WORLD_25 = 185,
207 NACL_KEY_WORLD_26 = 186,
208 NACL_KEY_WORLD_27 = 187,
209 NACL_KEY_WORLD_28 = 188,
210 NACL_KEY_WORLD_29 = 189,
211 NACL_KEY_WORLD_30 = 190,
212 NACL_KEY_WORLD_31 = 191,
213 NACL_KEY_WORLD_32 = 192,
214 NACL_KEY_WORLD_33 = 193,
215 NACL_KEY_WORLD_34 = 194,
216 NACL_KEY_WORLD_35 = 195,
217 NACL_KEY_WORLD_36 = 196,
218 NACL_KEY_WORLD_37 = 197,
219 NACL_KEY_WORLD_38 = 198,
220 NACL_KEY_WORLD_39 = 199,
221 NACL_KEY_WORLD_40 = 200,
222 NACL_KEY_WORLD_41 = 201,
223 NACL_KEY_WORLD_42 = 202,
224 NACL_KEY_WORLD_43 = 203,
225 NACL_KEY_WORLD_44 = 204,
226 NACL_KEY_WORLD_45 = 205,
227 NACL_KEY_WORLD_46 = 206,
228 NACL_KEY_WORLD_47 = 207,
229 NACL_KEY_WORLD_48 = 208,
230 NACL_KEY_WORLD_49 = 209,
231 NACL_KEY_WORLD_50 = 210,
232 NACL_KEY_WORLD_51 = 211,
233 NACL_KEY_WORLD_52 = 212,
234 NACL_KEY_WORLD_53 = 213,
235 NACL_KEY_WORLD_54 = 214,
236 NACL_KEY_WORLD_55 = 215,
237 NACL_KEY_WORLD_56 = 216,
238 NACL_KEY_WORLD_57 = 217,
239 NACL_KEY_WORLD_58 = 218,
240 NACL_KEY_WORLD_59 = 219,
241 NACL_KEY_WORLD_60 = 220,
242 NACL_KEY_WORLD_61 = 221,
243 NACL_KEY_WORLD_62 = 222,
244 NACL_KEY_WORLD_63 = 223,
245 NACL_KEY_WORLD_64 = 224,
246 NACL_KEY_WORLD_65 = 225,
247 NACL_KEY_WORLD_66 = 226,
248 NACL_KEY_WORLD_67 = 227,
249 NACL_KEY_WORLD_68 = 228,
250 NACL_KEY_WORLD_69 = 229,
251 NACL_KEY_WORLD_70 = 230,
252 NACL_KEY_WORLD_71 = 231,
253 NACL_KEY_WORLD_72 = 232,
254 NACL_KEY_WORLD_73 = 233,
255 NACL_KEY_WORLD_74 = 234,
256 NACL_KEY_WORLD_75 = 235,
257 NACL_KEY_WORLD_76 = 236,
258 NACL_KEY_WORLD_77 = 237,
259 NACL_KEY_WORLD_78 = 238,
260 NACL_KEY_WORLD_79 = 239,
261 NACL_KEY_WORLD_80 = 240,
262 NACL_KEY_WORLD_81 = 241,
263 NACL_KEY_WORLD_82 = 242,
264 NACL_KEY_WORLD_83 = 243,
265 NACL_KEY_WORLD_84 = 244,
266 NACL_KEY_WORLD_85 = 245,
267 NACL_KEY_WORLD_86 = 246,
268 NACL_KEY_WORLD_87 = 247,
269 NACL_KEY_WORLD_88 = 248,
270 NACL_KEY_WORLD_89 = 249,
271 NACL_KEY_WORLD_90 = 250,
272 NACL_KEY_WORLD_91 = 251,
273 NACL_KEY_WORLD_92 = 252,
274 NACL_KEY_WORLD_93 = 253,
275 NACL_KEY_WORLD_94 = 254,
276 NACL_KEY_WORLD_95 = 255,
278 /* numeric keypad */
279 NACL_KEY_KP0 = 256,
280 NACL_KEY_KP1 = 257,
281 NACL_KEY_KP2 = 258,
282 NACL_KEY_KP3 = 259,
283 NACL_KEY_KP4 = 260,
284 NACL_KEY_KP5 = 261,
285 NACL_KEY_KP6 = 262,
286 NACL_KEY_KP7 = 263,
287 NACL_KEY_KP8 = 264,
288 NACL_KEY_KP9 = 265,
289 NACL_KEY_KP_PERIOD = 266,
290 NACL_KEY_KP_DIVIDE = 267,
291 NACL_KEY_KP_MULTIPLY = 268,
292 NACL_KEY_KP_MINUS = 269,
293 NACL_KEY_KP_PLUS = 270,
294 NACL_KEY_KP_ENTER = 271,
295 NACL_KEY_KP_EQUALS = 272,
297 /* arrow & insert/delete pad */
298 NACL_KEY_UP = 273,
299 NACL_KEY_DOWN = 274,
300 NACL_KEY_RIGHT = 275,
301 NACL_KEY_LEFT = 276,
302 NACL_KEY_INSERT = 277,
303 NACL_KEY_HOME = 278,
304 NACL_KEY_END = 279,
305 NACL_KEY_PAGEUP = 280,
306 NACL_KEY_PAGEDOWN = 281,
308 /* function keys */
309 NACL_KEY_F1 = 282,
310 NACL_KEY_F2 = 283,
311 NACL_KEY_F3 = 284,
312 NACL_KEY_F4 = 285,
313 NACL_KEY_F5 = 286,
314 NACL_KEY_F6 = 287,
315 NACL_KEY_F7 = 288,
316 NACL_KEY_F8 = 289,
317 NACL_KEY_F9 = 290,
318 NACL_KEY_F10 = 291,
319 NACL_KEY_F11 = 292,
320 NACL_KEY_F12 = 293,
321 NACL_KEY_F13 = 294,
322 NACL_KEY_F14 = 295,
323 NACL_KEY_F15 = 296,
325 /* modifier keys */
326 NACL_KEY_NUMLOCK = 300,
327 NACL_KEY_CAPSLOCK = 301,
328 NACL_KEY_SCROLLOCK = 302,
329 NACL_KEY_RSHIFT = 303,
330 NACL_KEY_LSHIFT = 304,
331 NACL_KEY_RCTRL = 305,
332 NACL_KEY_LCTRL = 306,
333 NACL_KEY_RALT = 307,
334 NACL_KEY_LALT = 308,
335 NACL_KEY_RMETA = 309,
336 NACL_KEY_LMETA = 310,
337 NACL_KEY_LSUPER = 311,
338 NACL_KEY_RSUPER = 312,
339 NACL_KEY_MODE = 313,
340 NACL_KEY_COMPOSE = 314,
342 /* misc keys */
343 NACL_KEY_HELP = 315,
344 NACL_KEY_PRINT = 316,
345 NACL_KEY_SYSREQ = 317,
346 NACL_KEY_BREAK = 318,
347 NACL_KEY_MENU = 319,
348 NACL_KEY_POWER = 320,
349 NACL_KEY_EURO = 321,
350 NACL_KEY_UNDO = 322,
352 /* Add any other keys here */
353 NACL_KEY_LAST
357 * @nacl
358 * Key modifier enumerations
359 * These values can be used as a bitset.
360 * Do not alter these mappings; they must match SDL.
362 enum NaClKeyMod {
363 /* mods represented as bitset */
364 NACL_KEYMOD_NONE = 0x0000,
365 NACL_KEYMOD_LSHIFT= 0x0001,
366 NACL_KEYMOD_RSHIFT= 0x0002,
367 NACL_KEYMOD_LCTRL = 0x0040,
368 NACL_KEYMOD_RCTRL = 0x0080,
369 NACL_KEYMOD_LALT = 0x0100,
370 NACL_KEYMOD_RALT = 0x0200,
371 NACL_KEYMOD_LMETA = 0x0400,
372 NACL_KEYMOD_RMETA = 0x0800,
373 NACL_KEYMOD_NUM = 0x1000,
374 NACL_KEYMOD_CAPS = 0x2000,
375 NACL_KEYMOD_MODE = 0x4000,
376 NACL_KEYMOD_RESERVED = 0x8000
380 * @nacl
381 * Mouse Buttons. Do not alter these mappings; they must match SDL.
383 enum NaClMouseButton {
384 NACL_MOUSE_BUTTON_LEFT = 1,
385 NACL_MOUSE_BUTTON_MIDDLE = 2,
386 NACL_MOUSE_BUTTON_RIGHT = 3,
387 NACL_MOUSE_SCROLL_UP = 4,
388 NACL_MOUSE_SCROLL_DOWN = 5
392 * @nacl
393 * Mouse states
394 * These values can be used as bitsets. Do not alter these mappings; they
395 * must match SDL.
397 enum NaClMouseState {
398 NACL_MOUSE_STATE_LEFT_BUTTON_PRESSED = 1,
399 NACL_MOUSE_STATE_MIDDLE_BUTTON_PRESSED = 2,
400 NACL_MOUSE_STATE_RIGHT_BUTTON_PRESSED = 4
404 * @nacl
405 * Gain enumerations for NaClMultimediaActiveEvent
406 * These values can be used as a bitset. Do not alter these mappings; they
407 * must match SDL.
409 enum NaClActive {
410 NACL_ACTIVE_MOUSE = 1, /**< mouse leaving/entering */
411 NACL_ACTIVE_INPUT_FOCUS = 2, /**< input focus lost/restored */
412 NACL_ACTIVE_APPLICATION = 4 /**< application minimized/restored */
416 * @nacl
417 * Key symbol structure
419 struct NaClMultimediaKeySymbol {
420 uint8_t scancode; /**< H/W scancode */
421 int16_t sym; /**< NaClKey symbol */
422 int16_t mod; /**< NaClKeyMod key modifier */
423 uint16_t unicode;
427 * @nacl
428 * Active event. Generated when mouse cursor exits/enters window,
429 * input focus is lost/gained, and application is minimized/restored.
431 struct NaClMultimediaActiveEvent {
432 uint8_t type; /**< NACL_EVENT_ACTIVE */
433 uint8_t gain; /**< NaClActive gain */
434 uint8_t state; /**< state 0 - lost, minimized, leaving
435 1 - acquired, restored, entering */
439 * @nacl
440 * Expose event. Generated when the windowing system requests
441 * an application redraw/repaint update. Upon receiving this
442 * event, an application should call nacl_video_update()
444 struct NaClMultimediaExposeEvent {
445 uint8_t type; /**< NACL_EVENT_EXPOSE */
449 * @nacl
450 * Keyboard event. For both key down and key up events.
452 struct NaClMultimediaKeyboardEvent {
453 uint8_t type; /**< NACL_EVENT_KEY_UP or NACL_EVENT_KEY_DOWN */
454 uint8_t which; /**< which keyboard (0 for primary) */
455 uint8_t state; /**< indicates pressed (1) or released (0) */
456 struct NaClMultimediaKeySymbol keysym; /**< key info */
460 * @nacl
461 * Mouse motion event. Generated when mouse moved by user and
462 * application is in focus.
464 struct NaClMultimediaMouseMotionEvent {
465 uint8_t type; /**< NACL_EVENT_MOUSE_MOTION */
466 uint8_t which; /**< which mouse (0 for primary) */
467 uint8_t state; /**< NaClMouseState button state bitset */
468 uint16_t x; /**< x position */
469 uint16_t y; /**< y position */
470 int16_t xrel; /**< relative x position */
471 int16_t yrel; /**< relative y position */
475 * @nacl
476 * Mouse button event. Generated when user presses or releases
477 * a mouse button, including the scroll wheel.
479 struct NaClMultimediaMouseButtonEvent {
480 uint8_t type; /**< NACL_EVENT_MOUSE_BUTTON_UP or
481 NACL_EVENT_MOUSE_BUTTON_DOWN */
482 uint8_t which; /**< which mouse (0 for primary) */
483 uint8_t button; /**< NaClMouseButton which button */
484 uint8_t state; /**< indicates pressed (1) or released (0) */
485 uint16_t x; /**< x position */
486 uint16_t y; /**< y position */
490 * @nacl
491 * Quit event. The application should quit when receiving this event.
492 * This includes shutting down the video subsystem with nacl_video_shutdown()
493 * and other active subsystems (audio) followed by shutting down the
494 * multimedia library with nacl_multimedia_shutdown().
496 struct NaClMultimediaQuitEvent {
497 uint8_t type; /**< NACL_EVENT_QUIT */
501 * @nacl
502 * Pad event. Not used, but defines the largest size the event union
503 * should ever be. Events added in the future should never be larger than
504 * this structure. 64 byte events should be enough for all sane events.
506 * *** Do not ever change the size of this structure. ***
507 * Doing so will break other existing native client applications
509 struct NaClMultimediaPadEvent {
510 uint8_t pad[64];
514 * @nacl
515 * The event wrapper. Use type field to select which structure to process.
516 * At all times, sizeof NaClMultimediaEvent must match sizeof
517 * NaClMultimediaPadEvent.
519 union NaClMultimediaEvent {
520 uint8_t type; /**< one of NaClEvent */
521 struct NaClMultimediaActiveEvent active;
522 struct NaClMultimediaExposeEvent expose;
523 struct NaClMultimediaKeyboardEvent key;
524 struct NaClMultimediaMouseMotionEvent motion;
525 struct NaClMultimediaMouseButtonEvent button;
526 struct NaClMultimediaQuitEvent quit;
527 struct NaClMultimediaPadEvent pad;
531 #ifdef __cplusplus
533 #endif
536 * @}
537 * End of Audio/Video group
540 #endif /* NATIVE_CLIENT_SERVICE_RUNTIME_AUDIO_VIDEO_H_ */