xref: /aosp_15_r20/external/webp/extras/vwebp_sdl.c (revision b2055c353e87c8814eb2b6b1b11112a1562253bd)
1*b2055c35SXin Li // Copyright 2017 Google Inc. All Rights Reserved.
2*b2055c35SXin Li //
3*b2055c35SXin Li // Use of this source code is governed by a BSD-style license
4*b2055c35SXin Li // that can be found in the COPYING file in the root of the source
5*b2055c35SXin Li // tree. An additional intellectual property rights grant can be found
6*b2055c35SXin Li // in the file PATENTS. All contributing project authors may
7*b2055c35SXin Li // be found in the AUTHORS file in the root of the source tree.
8*b2055c35SXin Li // -----------------------------------------------------------------------------
9*b2055c35SXin Li //
10*b2055c35SXin Li // Simple SDL-based WebP file viewer.
11*b2055c35SXin Li // Does not support animation, just static images.
12*b2055c35SXin Li //
13*b2055c35SXin Li // Press 'q' to exit.
14*b2055c35SXin Li //
15*b2055c35SXin Li // Author: James Zern ([email protected])
16*b2055c35SXin Li 
17*b2055c35SXin Li #include <stdio.h>
18*b2055c35SXin Li 
19*b2055c35SXin Li #ifdef HAVE_CONFIG_H
20*b2055c35SXin Li #include "webp/config.h"
21*b2055c35SXin Li #endif
22*b2055c35SXin Li 
23*b2055c35SXin Li #if defined(WEBP_HAVE_SDL)
24*b2055c35SXin Li 
25*b2055c35SXin Li #include "webp_to_sdl.h"
26*b2055c35SXin Li #include "webp/decode.h"
27*b2055c35SXin Li #include "imageio/imageio_util.h"
28*b2055c35SXin Li #include "../examples/unicode.h"
29*b2055c35SXin Li 
30*b2055c35SXin Li #if defined(WEBP_HAVE_JUST_SDL_H)
31*b2055c35SXin Li #include <SDL.h>
32*b2055c35SXin Li #else
33*b2055c35SXin Li #include <SDL2/SDL.h>
34*b2055c35SXin Li #endif
35*b2055c35SXin Li 
ProcessEvents(void)36*b2055c35SXin Li static void ProcessEvents(void) {
37*b2055c35SXin Li   int done = 0;
38*b2055c35SXin Li   SDL_Event event;
39*b2055c35SXin Li   while (!done && SDL_WaitEvent(&event)) {
40*b2055c35SXin Li     switch (event.type) {
41*b2055c35SXin Li       case SDL_KEYUP:
42*b2055c35SXin Li         switch (event.key.keysym.sym) {
43*b2055c35SXin Li           case SDLK_q: done = 1; break;
44*b2055c35SXin Li           default: break;
45*b2055c35SXin Li         }
46*b2055c35SXin Li         break;
47*b2055c35SXin Li       default: break;
48*b2055c35SXin Li     }
49*b2055c35SXin Li   }
50*b2055c35SXin Li }
51*b2055c35SXin Li 
main(int argc,char * argv[])52*b2055c35SXin Li int main(int argc, char* argv[]) {
53*b2055c35SXin Li   int c;
54*b2055c35SXin Li   int ok = 0;
55*b2055c35SXin Li 
56*b2055c35SXin Li   INIT_WARGV(argc, argv);
57*b2055c35SXin Li 
58*b2055c35SXin Li   for (c = 1; c < argc; ++c) {
59*b2055c35SXin Li     const char* file = NULL;
60*b2055c35SXin Li     const uint8_t* webp = NULL;
61*b2055c35SXin Li     size_t webp_size = 0;
62*b2055c35SXin Li     if (!strcmp(argv[c], "-h")) {
63*b2055c35SXin Li       printf("Usage: %s [-h] image.webp [more_files.webp...]\n", argv[0]);
64*b2055c35SXin Li       FREE_WARGV_AND_RETURN(0);
65*b2055c35SXin Li     } else {
66*b2055c35SXin Li       file = (const char*)GET_WARGV(argv, c);
67*b2055c35SXin Li     }
68*b2055c35SXin Li     if (file == NULL) continue;
69*b2055c35SXin Li     if (!ImgIoUtilReadFile(file, &webp, &webp_size)) {
70*b2055c35SXin Li       WFPRINTF(stderr, "Error opening file: %s\n", (const W_CHAR*)file);
71*b2055c35SXin Li       goto Error;
72*b2055c35SXin Li     }
73*b2055c35SXin Li     if (webp_size != (size_t)(int)webp_size) {
74*b2055c35SXin Li       free((void*)webp);
75*b2055c35SXin Li       fprintf(stderr, "File too large.\n");
76*b2055c35SXin Li       goto Error;
77*b2055c35SXin Li     }
78*b2055c35SXin Li     ok = WebPToSDL((const char*)webp, (int)webp_size);
79*b2055c35SXin Li     free((void*)webp);
80*b2055c35SXin Li     if (!ok) {
81*b2055c35SXin Li       WFPRINTF(stderr, "Error decoding file %s\n", (const W_CHAR*)file);
82*b2055c35SXin Li       goto Error;
83*b2055c35SXin Li     }
84*b2055c35SXin Li     ProcessEvents();
85*b2055c35SXin Li   }
86*b2055c35SXin Li   ok = 1;
87*b2055c35SXin Li 
88*b2055c35SXin Li  Error:
89*b2055c35SXin Li   SDL_Quit();
90*b2055c35SXin Li   FREE_WARGV_AND_RETURN(ok ? 0 : 1);
91*b2055c35SXin Li }
92*b2055c35SXin Li 
93*b2055c35SXin Li #else  // !WEBP_HAVE_SDL
94*b2055c35SXin Li 
main(int argc,const char * argv[])95*b2055c35SXin Li int main(int argc, const char* argv[]) {
96*b2055c35SXin Li   fprintf(stderr, "SDL support not enabled in %s.\n", argv[0]);
97*b2055c35SXin Li   (void)argc;
98*b2055c35SXin Li   return 0;
99*b2055c35SXin Li }
100*b2055c35SXin Li 
101*b2055c35SXin Li #endif
102