SDL  2.0
testoverlay2.c File Reference
#include "SDL.h"
#include "testyuv_cvt.h"
+ Include dependency graph for testoverlay2.c:

Go to the source code of this file.

Macros

#define MOOSEPIC_W   64
 
#define MOOSEPIC_H   88
 
#define MOOSEFRAME_SIZE   (MOOSEPIC_W * MOOSEPIC_H)
 
#define MOOSEFRAMES_COUNT   10
 

Functions

static void quit (int rc)
 
static void PrintUsage (char *argv0)
 
void loop ()
 
int main (int argc, char **argv)
 

Variables

SDL_Color MooseColors [84]
 
Uint8 MooseFrame [MOOSEFRAMES_COUNT][MOOSEFRAME_SIZE *2]
 
SDL_TextureMooseTexture
 
SDL_Rect displayrect
 
int window_w
 
int window_h
 
SDL_Windowwindow
 
SDL_Rendererrenderer
 
int paused = 0
 
int i
 
SDL_bool done = SDL_FALSE
 
static int fpsdelay
 

Macro Definition Documentation

#define MOOSEFRAME_SIZE   (MOOSEPIC_W * MOOSEPIC_H)

Definition at line 30 of file testoverlay2.c.

Referenced by main().

#define MOOSEFRAMES_COUNT   10

Definition at line 31 of file testoverlay2.c.

Referenced by loop(), and main().

#define MOOSEPIC_H   88

Definition at line 28 of file testoverlay2.c.

Referenced by main().

#define MOOSEPIC_W   64

Definition at line 27 of file testoverlay2.c.

Referenced by loop(), and main().

Function Documentation

void loop ( )

Definition at line 178 of file testoverlay2.c.

References done, SDL_WindowEvent::event, fpsdelay, SDL_Rect::h, i, SDL_Event::key, SDL_KeyboardEvent::keysym, MooseFrame, MOOSEFRAMES_COUNT, MOOSEPIC_W, SDL_Event::motion, NULL, paused, SDL_Delay, SDL_KEYDOWN, SDL_MOUSEBUTTONDOWN, SDL_MOUSEMOTION, SDL_PollEvent, SDL_QUIT, SDL_RenderClear, SDL_RenderCopy, SDL_RenderPresent, SDL_RenderSetViewport, SDL_TRUE, SDL_UpdateTexture, SDL_WINDOWEVENT, SDL_WINDOWEVENT_RESIZED, SDLK_ESCAPE, SDLK_SPACE, SDL_MouseMotionEvent::state, SDL_Keysym::sym, SDL_Event::type, SDL_Rect::w, SDL_Event::window, window_h, window_w, SDL_Rect::x, and SDL_Rect::y.

Referenced by main().

179 {
181 
182  while (SDL_PollEvent(&event)) {
183  switch (event.type) {
184  case SDL_WINDOWEVENT:
185  if (event.window.event == SDL_WINDOWEVENT_RESIZED) {
187  displayrect.w = window_w = event.window.data1;
188  displayrect.h = window_h = event.window.data2;
189  }
190  break;
191  case SDL_MOUSEBUTTONDOWN:
192  displayrect.x = event.button.x - window_w / 2;
193  displayrect.y = event.button.y - window_h / 2;
194  break;
195  case SDL_MOUSEMOTION:
196  if (event.motion.state) {
197  displayrect.x = event.motion.x - window_w / 2;
198  displayrect.y = event.motion.y - window_h / 2;
199  }
200  break;
201  case SDL_KEYDOWN:
202  if (event.key.keysym.sym == SDLK_SPACE) {
203  paused = !paused;
204  break;
205  }
206  if (event.key.keysym.sym != SDLK_ESCAPE) {
207  break;
208  }
209  case SDL_QUIT:
210  done = SDL_TRUE;
211  break;
212  }
213  }
214 
215 #ifndef __EMSCRIPTEN__
217 #endif
218 
219  if (!paused) {
220  i = (i + 1) % MOOSEFRAMES_COUNT;
221 
223  }
227 
228 #ifdef __EMSCRIPTEN__
229  if (done) {
230  emscripten_cancel_main_loop();
231  }
232 #endif
233 }
#define SDL_RenderSetViewport
SDL_MouseMotionEvent motion
Definition: SDL_events.h:566
#define MOOSEPIC_W
Definition: testoverlay2.c:27
#define SDL_PollEvent
SDL_Texture * MooseTexture
Definition: testoverlay2.c:141
SDL_bool done
Definition: testoverlay2.c:149
#define SDL_UpdateTexture
SDL_WindowEvent window
Definition: SDL_events.h:562
#define SDL_RenderCopy
Uint8 MooseFrame[MOOSEFRAMES_COUNT][MOOSEFRAME_SIZE *2]
Definition: testoverlay2.c:140
SDL_Renderer * renderer
Definition: testoverlay2.c:146
#define MOOSEFRAMES_COUNT
Definition: testoverlay2.c:31
struct _cl_event * event
static int fpsdelay
Definition: testoverlay2.c:150
int paused
Definition: testoverlay2.c:147
int x
Definition: SDL_rect.h:66
SDL_Keysym keysym
Definition: SDL_events.h:220
int w
Definition: SDL_rect.h:67
#define SDL_Delay
#define NULL
Definition: begin_code.h:164
#define SDL_RenderClear
SDL_KeyboardEvent key
Definition: SDL_events.h:563
int h
Definition: SDL_rect.h:67
SDL_Keycode sym
Definition: SDL_keyboard.h:50
int window_h
Definition: testoverlay2.c:144
int i
Definition: testoverlay2.c:148
General event structure.
Definition: SDL_events.h:557
SDL_Rect displayrect
Definition: testoverlay2.c:142
int y
Definition: SDL_rect.h:66
int window_w
Definition: testoverlay2.c:143
#define SDL_RenderPresent
Uint32 type
Definition: SDL_events.h:559
int main ( int  argc,
char **  argv 
)

Definition at line 236 of file testoverlay2.c.

References SDL_Color::b, ConvertRGBtoYUV(), done, fpsdelay, frame, free, SDL_Color::g, SDL_Rect::h, i, j, loop(), malloc, MooseFrame, MOOSEFRAME_SIZE, MOOSEFRAMES_COUNT, MOOSEPIC_H, MOOSEPIC_W, NULL, PrintUsage(), quit(), SDL_Color::r, SDL_atoi, SDL_CreateRenderer, SDL_CreateTexture, SDL_CreateWindow, SDL_DestroyRenderer, SDL_EventState, SDL_GetError, SDL_GetYUVConversionModeForResolution, SDL_IGNORE, SDL_Init, SDL_INIT_VIDEO, SDL_KEYUP, SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, SDL_LogError, SDL_LogSetPriority, SDL_PIXELFORMAT_YV12, SDL_RWclose, SDL_RWFromFile, SDL_RWread, SDL_TEXTUREACCESS_STREAMING, SDL_WINDOW_RESIZABLE, SDL_WINDOWPOS_UNDEFINED, SDL_Rect::w, window, window_h, window_w, SDL_Rect::x, and SDL_Rect::y.

237 {
238  Uint8 *RawMooseData;
239  SDL_RWops *handle;
241  int j;
242  int fps = 12;
243  int nodelay = 0;
244  int scale = 5;
245 
246  /* Enable standard application logging */
248 
249  if (SDL_Init(SDL_INIT_VIDEO) < 0) {
250  SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
251  return 3;
252  }
253 
254  while (argc > 1) {
255  if (strcmp(argv[1], "-fps") == 0) {
256  if (argv[2]) {
257  fps = SDL_atoi(argv[2]);
258  if (fps == 0) {
260  "The -fps option requires an argument [from 1 to 1000], default is 12.\n");
261  quit(10);
262  }
263  if ((fps < 0) || (fps > 1000)) {
265  "The -fps option must be in range from 1 to 1000, default is 12.\n");
266  quit(10);
267  }
268  argv += 2;
269  argc -= 2;
270  } else {
272  "The -fps option requires an argument [from 1 to 1000], default is 12.\n");
273  quit(10);
274  }
275  } else if (strcmp(argv[1], "-nodelay") == 0) {
276  nodelay = 1;
277  argv += 1;
278  argc -= 1;
279  } else if (strcmp(argv[1], "-scale") == 0) {
280  if (argv[2]) {
281  scale = SDL_atoi(argv[2]);
282  if (scale == 0) {
284  "The -scale option requires an argument [from 1 to 50], default is 5.\n");
285  quit(10);
286  }
287  if ((scale < 0) || (scale > 50)) {
289  "The -scale option must be in range from 1 to 50, default is 5.\n");
290  quit(10);
291  }
292  argv += 2;
293  argc -= 2;
294  } else {
296  "The -fps option requires an argument [from 1 to 1000], default is 12.\n");
297  quit(10);
298  }
299  } else if ((strcmp(argv[1], "-help") == 0)
300  || (strcmp(argv[1], "-h") == 0)) {
301  PrintUsage(argv[0]);
302  quit(0);
303  } else {
304  SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unrecognized option: %s.\n", argv[1]);
305  quit(10);
306  }
307  break;
308  }
309 
310  RawMooseData = (Uint8 *) malloc(MOOSEFRAME_SIZE * MOOSEFRAMES_COUNT);
311  if (RawMooseData == NULL) {
312  SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Can't allocate memory for movie !\n");
313  quit(1);
314  }
315 
316  /* load the trojan moose images */
317  handle = SDL_RWFromFile("moose.dat", "rb");
318  if (handle == NULL) {
319  SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Can't find the file moose.dat !\n");
320  free(RawMooseData);
321  quit(2);
322  }
323 
324  SDL_RWread(handle, RawMooseData, MOOSEFRAME_SIZE, MOOSEFRAMES_COUNT);
325 
326  SDL_RWclose(handle);
327 
328  /* Create the window and renderer */
331  window = SDL_CreateWindow("Happy Moose",
336  if (!window) {
337  SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create window: %s\n", SDL_GetError());
338  free(RawMooseData);
339  quit(4);
340  }
341 
342  renderer = SDL_CreateRenderer(window, -1, 0);
343  if (!renderer) {
344  SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create renderer: %s\n", SDL_GetError());
345  free(RawMooseData);
346  quit(4);
347  }
348 
350  if (!MooseTexture) {
351  SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create texture: %s\n", SDL_GetError());
352  free(RawMooseData);
353  quit(5);
354  }
355  /* Uncomment this to check vertex color with a YUV texture */
356  /* SDL_SetTextureColorMod(MooseTexture, 0xff, 0x80, 0x80); */
357 
358  for (i = 0; i < MOOSEFRAMES_COUNT; i++) {
359  Uint8 MooseFrameRGB[MOOSEFRAME_SIZE*3];
360  Uint8 *rgb;
361  Uint8 *frame;
362 
363  rgb = MooseFrameRGB;
364  frame = RawMooseData + i * MOOSEFRAME_SIZE;
365  for (j = 0; j < MOOSEFRAME_SIZE; ++j) {
366  rgb[0] = MooseColors[frame[j]].r;
367  rgb[1] = MooseColors[frame[j]].g;
368  rgb[2] = MooseColors[frame[j]].b;
369  rgb += 3;
370  }
373  0, 100);
374  }
375 
376  free(RawMooseData);
377 
378  /* set the start frame */
379  i = 0;
380  if (nodelay) {
381  fpsdelay = 0;
382  } else {
383  fpsdelay = 1000 / fps;
384  }
385 
386  displayrect.x = 0;
387  displayrect.y = 0;
390 
391  /* Ignore key up events, they don't even get filtered */
393 
394  /* Loop, waiting for QUIT or RESIZE */
395 #ifdef __EMSCRIPTEN__
396  emscripten_set_main_loop(loop, nodelay ? 0 : fps, 1);
397 #else
398  while (!done) {
399  loop();
400  }
401 #endif
402 
404  quit(0);
405  return 0;
406 }
#define SDL_CreateTexture
GLenum GLenum GLenum GLenum GLenum scale
#define MOOSEPIC_W
Definition: testoverlay2.c:27
void loop()
Definition: testoverlay2.c:178
#define SDL_GetError
Uint8 g
Definition: SDL_pixels.h:298
static void quit(int rc)
Definition: testoverlay2.c:154
#define MOOSEFRAME_SIZE
Definition: testoverlay2.c:30
SDL_EventEntry * free
Definition: SDL_events.c:84
SDL_Texture * MooseTexture
Definition: testoverlay2.c:141
SDL_bool done
Definition: testoverlay2.c:149
#define SDL_RWread(ctx, ptr, size, n)
Definition: SDL_rwops.h:187
Uint8 b
Definition: SDL_pixels.h:299
#define SDL_CreateWindow
#define SDL_WINDOWPOS_UNDEFINED
Definition: SDL_video.h:130
#define SDL_LogError
#define MOOSEPIC_H
Definition: testoverlay2.c:28
Uint8 MooseFrame[MOOSEFRAMES_COUNT][MOOSEFRAME_SIZE *2]
Definition: testoverlay2.c:140
#define SDL_RWFromFile
SDL_Renderer * renderer
Definition: testoverlay2.c:146
#define MOOSEFRAMES_COUNT
Definition: testoverlay2.c:31
Uint8 r
Definition: SDL_pixels.h:297
EGLImageKHR EGLint EGLint * handle
Definition: eglext.h:937
uint8_t Uint8
Definition: SDL_stdinc.h:179
int frame
Definition: teststreaming.c:60
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int int in j)
Definition: SDL_x11sym.h:50
static int fpsdelay
Definition: testoverlay2.c:150
int x
Definition: SDL_rect.h:66
int w
Definition: SDL_rect.h:67
#define SDL_atoi
#define SDL_LogSetPriority
#define NULL
Definition: begin_code.h:164
#define SDL_RWclose(ctx)
Definition: SDL_rwops.h:189
int h
Definition: SDL_rect.h:67
The type used to identify a window.
Definition: SDL_sysvideo.h:73
#define SDL_EventState
SDL_Window * window
Definition: testoverlay2.c:145
int window_h
Definition: testoverlay2.c:144
int i
Definition: testoverlay2.c:148
SDL_Color MooseColors[84]
Definition: testoverlay2.c:33
#define SDL_Init
SDL_Rect displayrect
Definition: testoverlay2.c:142
#define SDL_DestroyRenderer
#define SDL_GetYUVConversionModeForResolution
static void PrintUsage(char *argv0)
Definition: testoverlay2.c:161
int y
Definition: SDL_rect.h:66
int window_w
Definition: testoverlay2.c:143
#define SDL_INIT_VIDEO
Definition: SDL.h:79
#define SDL_CreateRenderer
#define malloc
Definition: SDL_qsort.c:47
#define SDL_IGNORE
Definition: SDL_events.h:754
SDL_bool ConvertRGBtoYUV(Uint32 format, Uint8 *src, int pitch, Uint8 *out, int w, int h, SDL_YUV_CONVERSION_MODE mode, int monochrome, int luminance)
Definition: testyuv_cvt.c:262
static void PrintUsage ( char *  argv0)
static

Definition at line 161 of file testoverlay2.c.

References SDL_Log.

Referenced by main().

162 {
163  SDL_Log("Usage: %s [arg] [arg] [arg] ...\n", argv0);
164  SDL_Log("\n");
165  SDL_Log("Where 'arg' is any of the following options:\n");
166  SDL_Log("\n");
167  SDL_Log(" -fps <frames per second>\n");
168  SDL_Log(" -nodelay\n");
169  SDL_Log(" -format <fmt> (one of the: YV12, IYUV, YUY2, UYVY, YVYU)\n");
170  SDL_Log(" -scale <scale factor> (initial scale of the overlay)\n");
171  SDL_Log(" -help (shows this help)\n");
172  SDL_Log("\n");
173  SDL_Log("Press ESC to exit, or SPACE to freeze the movie while application running.\n");
174  SDL_Log("\n");
175 }
#define SDL_Log
static void quit ( int  rc)
static

Definition at line 154 of file testoverlay2.c.

References SDL_Quit.

Referenced by main().

155 {
156  SDL_Quit();
157  exit(rc);
158 }
#define SDL_Quit

Variable Documentation

SDL_Rect displayrect

Definition at line 142 of file testoverlay2.c.

Definition at line 149 of file testoverlay2.c.

Referenced by loop(), and main().

int fpsdelay
static

Definition at line 150 of file testoverlay2.c.

Referenced by loop(), and main().

int i

Definition at line 148 of file testoverlay2.c.

Referenced by loop(), and main().

SDL_Color MooseColors[84]

Definition at line 33 of file testoverlay2.c.

Definition at line 140 of file testoverlay2.c.

Referenced by loop(), and main().

SDL_Texture* MooseTexture

Definition at line 141 of file testoverlay2.c.

int paused = 0

Definition at line 147 of file testoverlay2.c.

Referenced by loop().

SDL_Renderer* renderer

Definition at line 146 of file testoverlay2.c.

Definition at line 145 of file testoverlay2.c.

Referenced by main().

int window_h

Definition at line 144 of file testoverlay2.c.

Referenced by loop(), main(), MoveSprites(), and SDL_CreateRenderer().

int window_w

Definition at line 143 of file testoverlay2.c.

Referenced by loop(), main(), MoveSprites(), and SDL_CreateRenderer().