/*
  Copyright (C) 1999 E. H. Haley

  Changes the size of a 2^n x 2^n jpeg (in the most naive way) by a factor of
  2^m, m an integer.
*/

#include <stdio.h>
#include <stdlib.h>
#include <jpeglib.h>
#include "rez.h"

JSAMPLE *rez(JSAMPLE *arr, int ww, int hh, int exp, int c)
{
  int i,j,k,f,g,w,h, temp, fac;
  JSAMPLE *scr;

  if (exp<0)
    {
      fac=1<<-exp;
      w=ww/fac;
      h=hh/fac;
    }
  else if (exp>0)
    {
      fac=1<<exp;
      w=ww*fac;
      h=hh*fac;
    }
  else
    {
      w=ww;
      h=hh;
    }

  scr=(JSAMPLE *)calloc(w*h*c,sizeof(JSAMPLE));
  if (exp<0)
    {
      for(i=0; i<w; i++)
	for(j=0; j<h; j++)
	  for(k=0; k<c; k++)
	    {
	      temp=0;
	      for(f=0; f<fac; f++)
		for(g=0; g<fac; g++)
		  temp+=arr[((fac*i+f)+(fac*j+g)*ww)*c+k];
	      scr[(i+j*w)*c+k]
		=(JSAMPLE)((float)temp/(float)(fac*fac));
	    }
    }
  else if (exp>0)
    {
      for(i=0; i<ww; i++)
	for(j=0; j<hh; j++)
	  for(k=0; k<c; k++)
	    {
	      for(f=0; f<fac; f++)
		for(g=0; g<fac; g++)
		  scr[((fac*i+f)+(fac*j+g)*w)*c+k]=arr[(i+j*ww)*c+k];
	    }
    }
  else
    {
      for (i=0; i<w*h*c; i++)
	scr[i]=arr[i];
    }

  return scr;
}

/*
#include "loadj.h"
int main(int aardc, char **aardv)
{
  JSAMPLE *arr, *scr;
  int w,h,c;

  if (aardc<3) exit(0);

  arr = rjf(*++aardv,&w,&h,&c);

  scr=rez(arr,w,h,1,c);

  w*=2; h*=2;

  wjf(scr, *++aardv, &w,&h,&c);

  free(scr);
  exit(0);
}

*/

