#include <stdio.h>
extern "C" {
#include <jpeglib.h>
}

struct rgb { int r; int g; int b; }
my_buffer[256][256];

void 
put_scanline_someplace (JSAMPLE* ba, int row_stride)
{
  static int height;
  int i;

  for (i=0; i < row_stride; i++)
    printf("%d\n", ba[i]);

  //printf ("width: %3d height: %3d\n", row_stride, height++);
}

int main (int argc, char* argv[])
{
  struct jpeg_error_mgr jerr;	/* "public" fields */

  struct jpeg_decompress_struct cinfo;
  FILE * infile;		/* source file */
  JSAMPARRAY buffer;		/* Output row buffer */
  int row_stride;		/* physical row width in output buffer */
  char* filename = "somefile.jpg";

  if ((infile = fopen(filename, "rb")) == NULL) {
    fprintf(stderr, "can't open %s\n", filename);
    return 0;
  }


  cinfo.err = jpeg_std_error(&jerr);
  jpeg_create_decompress(&cinfo);
  jpeg_stdio_src(&cinfo, infile);
  (void) jpeg_read_header(&cinfo, TRUE);
  (void) jpeg_start_decompress(&cinfo);

  printf ("P3\n# CREATOR: The GIMP's PNM Filter Version 1.0\n");
  printf ("%d %d\n255\n", cinfo.output_width, cinfo.output_height);

  row_stride = cinfo.output_width * cinfo.output_components;
  buffer = (*cinfo.mem->alloc_sarray)
	  ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);

  while (cinfo.output_scanline < cinfo.output_height) {
    /* jpeg_read_scanlines expects an array of pointers to scanlines.
     * Here the array is only one element long, but you could ask for
     * more than one scanline at a time if that's more convenient.
     */
    (void) jpeg_read_scanlines(&cinfo, buffer, 1);
    /* Assume put_scanline_someplace wants a pointer and sample count. */
    put_scanline_someplace(buffer[0], row_stride);
  }

  (void) jpeg_finish_decompress(&cinfo);
  jpeg_destroy_decompress(&cinfo);
  fclose(infile);
  return 0;
}

