go-libwebp

Experimental translation from libwebp to Go source.
Log | Files | Refs | README | LICENSE

vwebp_sdl.c (2692B)


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