Debugging: Add code to print backtrace for guest on SIGSEGV
[nativeclient.git] / service_runtime / include / sys / audio_video.h
blob48bc8db33628648a8cf5835c4a32d821fa626bcd
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 #ifdef __native_client__
47 # include <stdint.h>
48 # include <machine/_default_types.h>
49 #else
50 # include "native_client/include/portability.h"
51 #endif
53 /**
54 * @file
55 * Defines a basic audio/video interface for Native Client applications.
57 * @addtogroup audio_video
58 * @{
61 #ifdef __cplusplus
62 extern "C" {
63 #endif
65 #define kNaClAudioBufferLength (16 * 1024)
66 #define kNaClVideoMinWindowSize (32)
67 #define kNaClVideoMaxWindowSize (4096)
69 /**
70 * @nacl
71 * Subsystem enumerations for nacl_multimedia_init()
72 * These values can be used as a bitset.
73 * To initialize multiple subsystems, use the | operator to
74 * combine them, for example:
75 * NACL_SUBSYSTEM_VIDEO | NACL_SUBSYSTEM_AUDIO
77 enum {
78 NACL_SUBSYSTEM_VIDEO = 0x01, /**< application will output video */
79 NACL_SUBSYSTEM_AUDIO = 0x02, /**< application will emit audio */
80 NACL_SUBSYSTEM_EMBED = 0x04 /**< application will embed in browser */
83 /**
84 * @nacl
85 * Audio format enumerations for nacl_audio_init()
86 * Describes the source data format that will be used to drive
87 * audio output.
89 enum NaClAudioFormat {
90 NACL_AUDIO_FORMAT_STEREO_44K = 0, /**< 44.1kHz 16 bit stereo */
91 NACL_AUDIO_FORMAT_STEREO_48K /**< 48kHz 16 bit stereo */
94 /**
95 * @nacl
96 * Event type enumerations used to identify event structure.
98 enum NaClEvent {
99 NACL_EVENT_NOT_USED = 0,
100 NACL_EVENT_ACTIVE, /**< triggered when focus gained / lost */
101 NACL_EVENT_EXPOSE, /**< external source requests redraw */
102 NACL_EVENT_KEY_DOWN, /**< key down (pressed) */
103 NACL_EVENT_KEY_UP, /**< key up (released) */
104 NACL_EVENT_MOUSE_MOTION, /**< mouse movement */
105 NACL_EVENT_MOUSE_BUTTON_DOWN, /**< mouse button down (pressed) */
106 NACL_EVENT_MOUSE_BUTTON_UP, /**< mouse button up (released) */
107 NACL_EVENT_QUIT, /**< application quit */
108 NACL_EVENT_UNSUPPORTED
112 * @nacl
113 * Key enumerations
114 * Do not alter these mappings; they must match SDL.
116 enum NaClKey {
117 NACL_KEY_UNKNOWN = 0,
118 NACL_KEY_FIRST = 0,
119 NACL_KEY_BACKSPACE = 8,
120 NACL_KEY_TAB = 9,
121 NACL_KEY_CLEAR = 12,
122 NACL_KEY_RETURN = 13,
123 NACL_KEY_PAUSE = 19,
124 NACL_KEY_ESCAPE = 27,
125 NACL_KEY_SPACE = 32,
126 NACL_KEY_EXCLAIM = 33,
127 NACL_KEY_QUOTEDBL = 34,
128 NACL_KEY_HASH = 35,
129 NACL_KEY_DOLLAR = 36,
130 NACL_KEY_AMPERSAND = 38,
131 NACL_KEY_QUOTE = 39,
132 NACL_KEY_LEFTPAREN = 40,
133 NACL_KEY_RIGHTPAREN = 41,
134 NACL_KEY_ASTERISK = 42,
135 NACL_KEY_PLUS = 43,
136 NACL_KEY_COMMA = 44,
137 NACL_KEY_MINUS = 45,
138 NACL_KEY_PERIOD = 46,
139 NACL_KEY_SLASH = 47,
140 NACL_KEY_0 = 48,
141 NACL_KEY_1 = 49,
142 NACL_KEY_2 = 50,
143 NACL_KEY_3 = 51,
144 NACL_KEY_4 = 52,
145 NACL_KEY_5 = 53,
146 NACL_KEY_6 = 54,
147 NACL_KEY_7 = 55,
148 NACL_KEY_8 = 56,
149 NACL_KEY_9 = 57,
150 NACL_KEY_COLON = 58,
151 NACL_KEY_SEMICOLON = 59,
152 NACL_KEY_LESS = 60,
153 NACL_KEY_EQUALS = 61,
154 NACL_KEY_GREATER = 62,
155 NACL_KEY_QUESTION = 63,
156 NACL_KEY_AT = 64,
157 NACL_KEY_LEFTBRACKET = 91,
158 NACL_KEY_BACKSLASH = 92,
159 NACL_KEY_RIGHTBRACKET = 93,
160 NACL_KEY_CARET = 94,
161 NACL_KEY_UNDERSCORE = 95,
162 NACL_KEY_BACKQUOTE = 96,
163 NACL_KEY_a = 97,
164 NACL_KEY_b = 98,
165 NACL_KEY_c = 99,
166 NACL_KEY_d = 100,
167 NACL_KEY_e = 101,
168 NACL_KEY_f = 102,
169 NACL_KEY_g = 103,
170 NACL_KEY_h = 104,
171 NACL_KEY_i = 105,
172 NACL_KEY_j = 106,
173 NACL_KEY_k = 107,
174 NACL_KEY_l = 108,
175 NACL_KEY_m = 109,
176 NACL_KEY_n = 110,
177 NACL_KEY_o = 111,
178 NACL_KEY_p = 112,
179 NACL_KEY_q = 113,
180 NACL_KEY_r = 114,
181 NACL_KEY_s = 115,
182 NACL_KEY_t = 116,
183 NACL_KEY_u = 117,
184 NACL_KEY_v = 118,
185 NACL_KEY_w = 119,
186 NACL_KEY_x = 120,
187 NACL_KEY_y = 121,
188 NACL_KEY_z = 122,
189 NACL_KEY_DELETE = 127,
190 NACL_KEY_WORLD_0 = 160,
191 NACL_KEY_WORLD_1 = 161,
192 NACL_KEY_WORLD_2 = 162,
193 NACL_KEY_WORLD_3 = 163,
194 NACL_KEY_WORLD_4 = 164,
195 NACL_KEY_WORLD_5 = 165,
196 NACL_KEY_WORLD_6 = 166,
197 NACL_KEY_WORLD_7 = 167,
198 NACL_KEY_WORLD_8 = 168,
199 NACL_KEY_WORLD_9 = 169,
200 NACL_KEY_WORLD_10 = 170,
201 NACL_KEY_WORLD_11 = 171,
202 NACL_KEY_WORLD_12 = 172,
203 NACL_KEY_WORLD_13 = 173,
204 NACL_KEY_WORLD_14 = 174,
205 NACL_KEY_WORLD_15 = 175,
206 NACL_KEY_WORLD_16 = 176,
207 NACL_KEY_WORLD_17 = 177,
208 NACL_KEY_WORLD_18 = 178,
209 NACL_KEY_WORLD_19 = 179,
210 NACL_KEY_WORLD_20 = 180,
211 NACL_KEY_WORLD_21 = 181,
212 NACL_KEY_WORLD_22 = 182,
213 NACL_KEY_WORLD_23 = 183,
214 NACL_KEY_WORLD_24 = 184,
215 NACL_KEY_WORLD_25 = 185,
216 NACL_KEY_WORLD_26 = 186,
217 NACL_KEY_WORLD_27 = 187,
218 NACL_KEY_WORLD_28 = 188,
219 NACL_KEY_WORLD_29 = 189,
220 NACL_KEY_WORLD_30 = 190,
221 NACL_KEY_WORLD_31 = 191,
222 NACL_KEY_WORLD_32 = 192,
223 NACL_KEY_WORLD_33 = 193,
224 NACL_KEY_WORLD_34 = 194,
225 NACL_KEY_WORLD_35 = 195,
226 NACL_KEY_WORLD_36 = 196,
227 NACL_KEY_WORLD_37 = 197,
228 NACL_KEY_WORLD_38 = 198,
229 NACL_KEY_WORLD_39 = 199,
230 NACL_KEY_WORLD_40 = 200,
231 NACL_KEY_WORLD_41 = 201,
232 NACL_KEY_WORLD_42 = 202,
233 NACL_KEY_WORLD_43 = 203,
234 NACL_KEY_WORLD_44 = 204,
235 NACL_KEY_WORLD_45 = 205,
236 NACL_KEY_WORLD_46 = 206,
237 NACL_KEY_WORLD_47 = 207,
238 NACL_KEY_WORLD_48 = 208,
239 NACL_KEY_WORLD_49 = 209,
240 NACL_KEY_WORLD_50 = 210,
241 NACL_KEY_WORLD_51 = 211,
242 NACL_KEY_WORLD_52 = 212,
243 NACL_KEY_WORLD_53 = 213,
244 NACL_KEY_WORLD_54 = 214,
245 NACL_KEY_WORLD_55 = 215,
246 NACL_KEY_WORLD_56 = 216,
247 NACL_KEY_WORLD_57 = 217,
248 NACL_KEY_WORLD_58 = 218,
249 NACL_KEY_WORLD_59 = 219,
250 NACL_KEY_WORLD_60 = 220,
251 NACL_KEY_WORLD_61 = 221,
252 NACL_KEY_WORLD_62 = 222,
253 NACL_KEY_WORLD_63 = 223,
254 NACL_KEY_WORLD_64 = 224,
255 NACL_KEY_WORLD_65 = 225,
256 NACL_KEY_WORLD_66 = 226,
257 NACL_KEY_WORLD_67 = 227,
258 NACL_KEY_WORLD_68 = 228,
259 NACL_KEY_WORLD_69 = 229,
260 NACL_KEY_WORLD_70 = 230,
261 NACL_KEY_WORLD_71 = 231,
262 NACL_KEY_WORLD_72 = 232,
263 NACL_KEY_WORLD_73 = 233,
264 NACL_KEY_WORLD_74 = 234,
265 NACL_KEY_WORLD_75 = 235,
266 NACL_KEY_WORLD_76 = 236,
267 NACL_KEY_WORLD_77 = 237,
268 NACL_KEY_WORLD_78 = 238,
269 NACL_KEY_WORLD_79 = 239,
270 NACL_KEY_WORLD_80 = 240,
271 NACL_KEY_WORLD_81 = 241,
272 NACL_KEY_WORLD_82 = 242,
273 NACL_KEY_WORLD_83 = 243,
274 NACL_KEY_WORLD_84 = 244,
275 NACL_KEY_WORLD_85 = 245,
276 NACL_KEY_WORLD_86 = 246,
277 NACL_KEY_WORLD_87 = 247,
278 NACL_KEY_WORLD_88 = 248,
279 NACL_KEY_WORLD_89 = 249,
280 NACL_KEY_WORLD_90 = 250,
281 NACL_KEY_WORLD_91 = 251,
282 NACL_KEY_WORLD_92 = 252,
283 NACL_KEY_WORLD_93 = 253,
284 NACL_KEY_WORLD_94 = 254,
285 NACL_KEY_WORLD_95 = 255,
287 /* numeric keypad */
288 NACL_KEY_KP0 = 256,
289 NACL_KEY_KP1 = 257,
290 NACL_KEY_KP2 = 258,
291 NACL_KEY_KP3 = 259,
292 NACL_KEY_KP4 = 260,
293 NACL_KEY_KP5 = 261,
294 NACL_KEY_KP6 = 262,
295 NACL_KEY_KP7 = 263,
296 NACL_KEY_KP8 = 264,
297 NACL_KEY_KP9 = 265,
298 NACL_KEY_KP_PERIOD = 266,
299 NACL_KEY_KP_DIVIDE = 267,
300 NACL_KEY_KP_MULTIPLY = 268,
301 NACL_KEY_KP_MINUS = 269,
302 NACL_KEY_KP_PLUS = 270,
303 NACL_KEY_KP_ENTER = 271,
304 NACL_KEY_KP_EQUALS = 272,
306 /* arrow & insert/delete pad */
307 NACL_KEY_UP = 273,
308 NACL_KEY_DOWN = 274,
309 NACL_KEY_RIGHT = 275,
310 NACL_KEY_LEFT = 276,
311 NACL_KEY_INSERT = 277,
312 NACL_KEY_HOME = 278,
313 NACL_KEY_END = 279,
314 NACL_KEY_PAGEUP = 280,
315 NACL_KEY_PAGEDOWN = 281,
317 /* function keys */
318 NACL_KEY_F1 = 282,
319 NACL_KEY_F2 = 283,
320 NACL_KEY_F3 = 284,
321 NACL_KEY_F4 = 285,
322 NACL_KEY_F5 = 286,
323 NACL_KEY_F6 = 287,
324 NACL_KEY_F7 = 288,
325 NACL_KEY_F8 = 289,
326 NACL_KEY_F9 = 290,
327 NACL_KEY_F10 = 291,
328 NACL_KEY_F11 = 292,
329 NACL_KEY_F12 = 293,
330 NACL_KEY_F13 = 294,
331 NACL_KEY_F14 = 295,
332 NACL_KEY_F15 = 296,
334 /* modifier keys */
335 NACL_KEY_NUMLOCK = 300,
336 NACL_KEY_CAPSLOCK = 301,
337 NACL_KEY_SCROLLOCK = 302,
338 NACL_KEY_RSHIFT = 303,
339 NACL_KEY_LSHIFT = 304,
340 NACL_KEY_RCTRL = 305,
341 NACL_KEY_LCTRL = 306,
342 NACL_KEY_RALT = 307,
343 NACL_KEY_LALT = 308,
344 NACL_KEY_RMETA = 309,
345 NACL_KEY_LMETA = 310,
346 NACL_KEY_LSUPER = 311,
347 NACL_KEY_RSUPER = 312,
348 NACL_KEY_MODE = 313,
349 NACL_KEY_COMPOSE = 314,
351 /* misc keys */
352 NACL_KEY_HELP = 315,
353 NACL_KEY_PRINT = 316,
354 NACL_KEY_SYSREQ = 317,
355 NACL_KEY_BREAK = 318,
356 NACL_KEY_MENU = 319,
357 NACL_KEY_POWER = 320,
358 NACL_KEY_EURO = 321,
359 NACL_KEY_UNDO = 322,
361 /* Add any other keys here */
362 NACL_KEY_LAST
366 * @nacl
367 * Key modifier enumerations
368 * These values can be used as a bitset.
369 * Do not alter these mappings; they must match SDL.
371 enum NaClKeyMod {
372 /* mods represented as bitset */
373 NACL_KEYMOD_NONE = 0x0000,
374 NACL_KEYMOD_LSHIFT= 0x0001,
375 NACL_KEYMOD_RSHIFT= 0x0002,
376 NACL_KEYMOD_LCTRL = 0x0040,
377 NACL_KEYMOD_RCTRL = 0x0080,
378 NACL_KEYMOD_LALT = 0x0100,
379 NACL_KEYMOD_RALT = 0x0200,
380 NACL_KEYMOD_LMETA = 0x0400,
381 NACL_KEYMOD_RMETA = 0x0800,
382 NACL_KEYMOD_NUM = 0x1000,
383 NACL_KEYMOD_CAPS = 0x2000,
384 NACL_KEYMOD_MODE = 0x4000,
385 NACL_KEYMOD_RESERVED = 0x8000
389 * @nacl
390 * Mouse Buttons. Do not alter these mappings; they must match SDL.
392 enum NaClMouseButton {
393 NACL_MOUSE_BUTTON_LEFT = 1,
394 NACL_MOUSE_BUTTON_MIDDLE = 2,
395 NACL_MOUSE_BUTTON_RIGHT = 3,
396 NACL_MOUSE_SCROLL_UP = 4,
397 NACL_MOUSE_SCROLL_DOWN = 5
401 * @nacl
402 * Mouse states
403 * These values can be used as bitsets. Do not alter these mappings; they
404 * must match SDL.
406 enum NaClMouseState {
407 NACL_MOUSE_STATE_LEFT_BUTTON_PRESSED = 1,
408 NACL_MOUSE_STATE_MIDDLE_BUTTON_PRESSED = 2,
409 NACL_MOUSE_STATE_RIGHT_BUTTON_PRESSED = 4
413 * @nacl
414 * Gain enumerations for NaClMultimediaActiveEvent
415 * These values can be used as a bitset. Do not alter these mappings; they
416 * must match SDL.
418 enum NaClActive {
419 NACL_ACTIVE_MOUSE = 1, /**< mouse leaving/entering */
420 NACL_ACTIVE_INPUT_FOCUS = 2, /**< input focus lost/restored */
421 NACL_ACTIVE_APPLICATION = 4 /**< application minimized/restored */
425 * @nacl
426 * Key symbol structure
428 struct NaClMultimediaKeySymbol {
429 uint8_t scancode; /**< H/W scancode */
430 int16_t sym; /**< NaClKey symbol */
431 int16_t mod; /**< NaClKeyMod key modifier */
432 uint16_t unicode;
436 * @nacl
437 * Active event. Generated when mouse cursor exits/enters window,
438 * input focus is lost/gained, and application is minimized/restored.
440 struct NaClMultimediaActiveEvent {
441 uint8_t type; /**< NACL_EVENT_ACTIVE */
442 uint8_t gain; /**< NaClActive gain */
443 uint8_t state; /**< state 0 - lost, minimized, leaving
444 1 - acquired, restored, entering */
448 * @nacl
449 * Expose event. Generated when the windowing system requests
450 * an application redraw/repaint update. Upon receiving this
451 * event, an application should call nacl_video_update()
453 struct NaClMultimediaExposeEvent {
454 uint8_t type; /**< NACL_EVENT_EXPOSE */
458 * @nacl
459 * Keyboard event. For both key down and key up events.
461 struct NaClMultimediaKeyboardEvent {
462 uint8_t type; /**< NACL_EVENT_KEY_UP or NACL_EVENT_KEY_DOWN */
463 uint8_t which; /**< which keyboard (0 for primary) */
464 uint8_t state; /**< indicates pressed (1) or released (0) */
465 struct NaClMultimediaKeySymbol keysym; /**< key info */
469 * @nacl
470 * Mouse motion event. Generated when mouse moved by user and
471 * application is in focus.
473 struct NaClMultimediaMouseMotionEvent {
474 uint8_t type; /**< NACL_EVENT_MOUSE_MOTION */
475 uint8_t which; /**< which mouse (0 for primary) */
476 uint8_t state; /**< NaClMouseState button state bitset */
477 uint16_t x; /**< x position */
478 uint16_t y; /**< y position */
479 int16_t xrel; /**< relative x position */
480 int16_t yrel; /**< relative y position */
484 * @nacl
485 * Mouse button event. Generated when user presses or releases
486 * a mouse button, including the scroll wheel.
488 struct NaClMultimediaMouseButtonEvent {
489 uint8_t type; /**< NACL_EVENT_MOUSE_BUTTON_UP or
490 NACL_EVENT_MOUSE_BUTTON_DOWN */
491 uint8_t which; /**< which mouse (0 for primary) */
492 uint8_t button; /**< NaClMouseButton which button */
493 uint8_t state; /**< indicates pressed (1) or released (0) */
494 uint16_t x; /**< x position */
495 uint16_t y; /**< y position */
499 * @nacl
500 * Quit event. The application should quit when receiving this event.
501 * This includes shutting down the video subsystem with nacl_video_shutdown()
502 * and other active subsystems (audio) followed by shutting down the
503 * multimedia library with nacl_multimedia_shutdown().
505 struct NaClMultimediaQuitEvent {
506 uint8_t type; /**< NACL_EVENT_QUIT */
510 * @nacl
511 * Pad event. Not used, but defines the largest size the event union
512 * should ever be. Events added in the future should never be larger than
513 * this structure. 64 byte events should be enough for all sane events.
515 * *** Do not ever change the size of this structure. ***
516 * Doing so will break other existing native client applications
518 struct NaClMultimediaPadEvent {
519 uint8_t pad[64];
523 * @nacl
524 * The event wrapper. Use type field to select which structure to process.
525 * At all times, sizeof NaClMultimediaEvent must match sizeof
526 * NaClMultimediaPadEvent.
528 union NaClMultimediaEvent {
529 uint8_t type; /**< one of NaClEvent */
530 struct NaClMultimediaActiveEvent active;
531 struct NaClMultimediaExposeEvent expose;
532 struct NaClMultimediaKeyboardEvent key;
533 struct NaClMultimediaMouseMotionEvent motion;
534 struct NaClMultimediaMouseButtonEvent button;
535 struct NaClMultimediaQuitEvent quit;
536 struct NaClMultimediaPadEvent pad;
540 #ifdef __cplusplus
542 #endif
545 * @}
546 * End of Audio/Video group
549 #endif /* NATIVE_CLIENT_SERVICE_RUNTIME_AUDIO_VIDEO_H_ */