Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Small jpeg decoder library - testing application
  3.  *
  4.  * Copyright (c) 2006, Luc Saillard <luc@saillard.org>
  5.  * Copyright (c) 2012 Intel Corporation.
  6.  * All rights reserved.
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions are met:
  9.  *
  10.  * - Redistributions of source code must retain the above copyright notice,
  11.  *  this list of conditions and the following disclaimer.
  12.  *
  13.  * - Redistributions in binary form must reproduce the above copyright notice,
  14.  *  this list of conditions and the following disclaimer in the documentation
  15.  *  and/or other materials provided with the distribution.
  16.  *
  17.  * - Neither the name of the author nor the names of its contributors may be
  18.  *  used to endorse or promote products derived from this software without
  19.  *  specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  22.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  25.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  26.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  27.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  28.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  29.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  30.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  31.  * POSSIBILITY OF SUCH DAMAGE.
  32.  *
  33.  */
  34.  
  35. #include "tinyjpeg.h"
  36. #include <stdio.h>
  37. #include <stdlib.h>
  38. #include <string.h>
  39. #include <time.h>
  40. #include "va_display.h"
  41.  
  42. static void exitmessage(const char *message) __attribute__((noreturn));
  43. static void exitmessage(const char *message)
  44. {
  45.   printf("%s\n", message);
  46.   exit(0);
  47. }
  48.  
  49. static int filesize(FILE *fp)
  50. {
  51.   long pos;
  52.   fseek(fp, 0, SEEK_END);
  53.   pos = ftell(fp);
  54.   fseek(fp, 0, SEEK_SET);
  55.   return pos;
  56. }
  57.  
  58. /**
  59.  * Load one jpeg image, and decompress it, and save the result.
  60.  */
  61. int convert_one_image(const char *infilename)
  62. {
  63.   FILE *fp;
  64.   unsigned int length_of_file;
  65.   unsigned int width, height;
  66.   unsigned char *buf;
  67.   struct jdec_private *jdec;
  68.  
  69.   /* Load the Jpeg into memory */
  70.   fp = fopen(infilename, "rb");
  71.   if (fp == NULL)
  72.     exitmessage("Cannot open filename\n");
  73.   length_of_file = filesize(fp);
  74.   buf = (unsigned char *)malloc(length_of_file + 4);
  75.   if (buf == NULL)
  76.     exitmessage("Not enough memory for loading file\n");
  77.   fread(buf, length_of_file, 1, fp);
  78.   fclose(fp);
  79.  
  80.   /* Decompress it */
  81.   jdec = tinyjpeg_init();
  82.   if (jdec == NULL)
  83.     exitmessage("Not enough memory to alloc the structure need for decompressing\n");
  84.  
  85.   if (tinyjpeg_parse_header(jdec, buf, length_of_file)<0)
  86.     exitmessage(tinyjpeg_get_errorstring(jdec));
  87.  
  88.   /* Get the size of the image */
  89.   tinyjpeg_get_size(jdec, &width, &height);
  90.  
  91.   printf("Decoding JPEG image %dx%d...\n", width, height);
  92.   if (tinyjpeg_decode(jdec) < 0)
  93.     exitmessage(tinyjpeg_get_errorstring(jdec));
  94.  
  95.   tinyjpeg_free(jdec);
  96.  
  97.   free(buf);
  98.   return 0;
  99. }
  100.  
  101. static void usage(void)
  102. {
  103.     fprintf(stderr, "Usage: loadjpeg <input_filename.jpeg> \n");
  104.     exit(1);
  105. }
  106.  
  107. /**
  108.  * main
  109.  *
  110.  */
  111. int main(int argc, char *argv[])
  112. {
  113.   char *input_filename;
  114.   clock_t start_time, finish_time;
  115.   unsigned int duration;
  116.   int current_argument;
  117.  
  118.   va_init_display_args(&argc, argv);
  119.  
  120.   if (argc < 2)
  121.     usage();
  122.  
  123.   current_argument = 1;
  124.   input_filename = argv[current_argument];
  125.  
  126.   start_time = clock();
  127.   convert_one_image(input_filename);
  128.   finish_time = clock();
  129.   duration = finish_time - start_time;
  130.   printf("Decoding finished in %u ticks\n", duration);
  131.  
  132.   return 0;
  133. }
  134.  
  135.  
  136.  
  137.  
  138.