| Index: third_party/libjpeg_turbo/jdatasrc-tj.c | 
| =================================================================== | 
| --- third_party/libjpeg_turbo/jdatasrc-tj.c	(revision 0) | 
| +++ third_party/libjpeg_turbo/jdatasrc-tj.c	(revision 0) | 
| @@ -0,0 +1,182 @@ | 
| +/* | 
| + * jdatasrc.c | 
| + * | 
| + * Copyright (C) 1994-1996, Thomas G. Lane. | 
| + * Modified 2009-2010 by Guido Vollbeding. | 
| + * This file is part of the Independent JPEG Group's software. | 
| + * For conditions of distribution and use, see the accompanying README file. | 
| + * | 
| + * This file contains decompression data source routines for the case of | 
| + * reading JPEG data from memory or from a file (or any stdio stream). | 
| + * While these routines are sufficient for most applications, | 
| + * some will want to use a different source manager. | 
| + * IMPORTANT: we assume that fread() will correctly transcribe an array of | 
| + * JOCTETs from 8-bit-wide elements on external storage.  If char is wider | 
| + * than 8 bits on your machine, you may need to do some tweaking. | 
| + */ | 
| + | 
| +/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ | 
| +#include "jinclude.h" | 
| +#include "jpeglib.h" | 
| +#include "jerror.h" | 
| + | 
| + | 
| +/* | 
| + * Initialize source --- called by jpeg_read_header | 
| + * before any data is actually read. | 
| + */ | 
| + | 
| +METHODDEF(void) | 
| +init_mem_source (j_decompress_ptr cinfo) | 
| +{ | 
| +  /* no work necessary here */ | 
| +} | 
| + | 
| + | 
| +/* | 
| + * Fill the input buffer --- called whenever buffer is emptied. | 
| + * | 
| + * In typical applications, this should read fresh data into the buffer | 
| + * (ignoring the current state of next_input_byte & bytes_in_buffer), | 
| + * reset the pointer & count to the start of the buffer, and return TRUE | 
| + * indicating that the buffer has been reloaded.  It is not necessary to | 
| + * fill the buffer entirely, only to obtain at least one more byte. | 
| + * | 
| + * There is no such thing as an EOF return.  If the end of the file has been | 
| + * reached, the routine has a choice of ERREXIT() or inserting fake data into | 
| + * the buffer.  In most cases, generating a warning message and inserting a | 
| + * fake EOI marker is the best course of action --- this will allow the | 
| + * decompressor to output however much of the image is there.  However, | 
| + * the resulting error message is misleading if the real problem is an empty | 
| + * input file, so we handle that case specially. | 
| + * | 
| + * In applications that need to be able to suspend compression due to input | 
| + * not being available yet, a FALSE return indicates that no more data can be | 
| + * obtained right now, but more may be forthcoming later.  In this situation, | 
| + * the decompressor will return to its caller (with an indication of the | 
| + * number of scanlines it has read, if any).  The application should resume | 
| + * decompression after it has loaded more data into the input buffer.  Note | 
| + * that there are substantial restrictions on the use of suspension --- see | 
| + * the documentation. | 
| + * | 
| + * When suspending, the decompressor will back up to a convenient restart point | 
| + * (typically the start of the current MCU). next_input_byte & bytes_in_buffer | 
| + * indicate where the restart point will be if the current call returns FALSE. | 
| + * Data beyond this point must be rescanned after resumption, so move it to | 
| + * the front of the buffer rather than discarding it. | 
| + */ | 
| + | 
| +METHODDEF(boolean) | 
| +fill_mem_input_buffer (j_decompress_ptr cinfo) | 
| +{ | 
| +  static JOCTET mybuffer[4]; | 
| + | 
| +  /* The whole JPEG data is expected to reside in the supplied memory | 
| +   * buffer, so any request for more data beyond the given buffer size | 
| +   * is treated as an error. | 
| +   */ | 
| +  WARNMS(cinfo, JWRN_JPEG_EOF); | 
| +  /* Insert a fake EOI marker */ | 
| +  mybuffer[0] = (JOCTET) 0xFF; | 
| +  mybuffer[1] = (JOCTET) JPEG_EOI; | 
| + | 
| +  cinfo->src->next_input_byte = mybuffer; | 
| +  cinfo->src->bytes_in_buffer = 2; | 
| + | 
| +  return TRUE; | 
| +} | 
| + | 
| + | 
| +/* | 
| + * Skip data --- used to skip over a potentially large amount of | 
| + * uninteresting data (such as an APPn marker). | 
| + * | 
| + * Writers of suspendable-input applications must note that skip_input_data | 
| + * is not granted the right to give a suspension return.  If the skip extends | 
| + * beyond the data currently in the buffer, the buffer can be marked empty so | 
| + * that the next read will cause a fill_input_buffer call that can suspend. | 
| + * Arranging for additional bytes to be discarded before reloading the input | 
| + * buffer is the application writer's problem. | 
| + */ | 
| + | 
| +METHODDEF(void) | 
| +skip_input_data (j_decompress_ptr cinfo, long num_bytes) | 
| +{ | 
| +  struct jpeg_source_mgr * src = cinfo->src; | 
| + | 
| +  /* Just a dumb implementation for now.  Could use fseek() except | 
| +   * it doesn't work on pipes.  Not clear that being smart is worth | 
| +   * any trouble anyway --- large skips are infrequent. | 
| +   */ | 
| +  if (num_bytes > 0) { | 
| +    while (num_bytes > (long) src->bytes_in_buffer) { | 
| +      num_bytes -= (long) src->bytes_in_buffer; | 
| +      (void) (*src->fill_input_buffer) (cinfo); | 
| +      /* note we assume that fill_input_buffer will never return FALSE, | 
| +       * so suspension need not be handled. | 
| +       */ | 
| +    } | 
| +    src->next_input_byte += (size_t) num_bytes; | 
| +    src->bytes_in_buffer -= (size_t) num_bytes; | 
| +  } | 
| +} | 
| + | 
| + | 
| +/* | 
| + * An additional method that can be provided by data source modules is the | 
| + * resync_to_restart method for error recovery in the presence of RST markers. | 
| + * For the moment, this source module just uses the default resync method | 
| + * provided by the JPEG library.  That method assumes that no backtracking | 
| + * is possible. | 
| + */ | 
| + | 
| + | 
| +/* | 
| + * Terminate source --- called by jpeg_finish_decompress | 
| + * after all data has been read.  Often a no-op. | 
| + * | 
| + * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding | 
| + * application must deal with any cleanup that should happen even | 
| + * for error exit. | 
| + */ | 
| + | 
| +METHODDEF(void) | 
| +term_source (j_decompress_ptr cinfo) | 
| +{ | 
| +  /* no work necessary here */ | 
| +} | 
| + | 
| + | 
| +/* | 
| + * Prepare for input from a supplied memory buffer. | 
| + * The buffer must contain the whole JPEG data. | 
| + */ | 
| + | 
| +GLOBAL(void) | 
| +jpeg_mem_src_tj (j_decompress_ptr cinfo, | 
| +	      unsigned char * inbuffer, unsigned long insize) | 
| +{ | 
| +  struct jpeg_source_mgr * src; | 
| + | 
| +  if (inbuffer == NULL || insize == 0)	/* Treat empty input as fatal error */ | 
| +    ERREXIT(cinfo, JERR_INPUT_EMPTY); | 
| + | 
| +  /* The source object is made permanent so that a series of JPEG images | 
| +   * can be read from the same buffer by calling jpeg_mem_src only before | 
| +   * the first one. | 
| +   */ | 
| +  if (cinfo->src == NULL) {	/* first time for this JPEG object? */ | 
| +    cinfo->src = (struct jpeg_source_mgr *) | 
| +      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, | 
| +				  SIZEOF(struct jpeg_source_mgr)); | 
| +  } | 
| + | 
| +  src = cinfo->src; | 
| +  src->init_source = init_mem_source; | 
| +  src->fill_input_buffer = fill_mem_input_buffer; | 
| +  src->skip_input_data = skip_input_data; | 
| +  src->resync_to_restart = jpeg_resync_to_restart; /* use default method */ | 
| +  src->term_source = term_source; | 
| +  src->bytes_in_buffer = (size_t) insize; | 
| +  src->next_input_byte = (JOCTET *) inbuffer; | 
| +} | 
|  | 
| Property changes on: third_party/libjpeg_turbo/jdatasrc-tj.c | 
| ___________________________________________________________________ | 
| Added: svn:eol-style | 
| + LF | 
|  | 
|  |