OpenCores
URL https://opencores.org/ocsvn/mb-jpeg/mb-jpeg/trunk

Subversion Repositories mb-jpeg

[/] [mb-jpeg/] [tags/] [arelease/] [decoder/] [utils.c] - Rev 66

Compare with Previous | Blame | View Log

/*-----------------------------------------*/
/* File : utils.c, utilities for jfif view */
/* Author : Pierre Guerrier, march 1998	   */
/*-----------------------------------------*/
 
#include <stdlib.h>
#include <stdio.h>
 
/* Prints a data block in frequency space. */
void
show_FBlock(FBlock *S)
{
  int i,j;
 
  for (i=0; i<8; i++) {
    for (j=0; j<8; j++)
      fprintf(stderr, "\t%d", S->block[i][j]);
    fprintf(stderr, "\n");
  }
}
 
/* Prints a data block in pixel space. */
void
show_PBlock(PBlock *S)
{
  int i,j;
 
  for (i=0; i<8; i++) {
    for (j=0; j<8; j++)
      fprintf(stderr, "\t%d", S->block[i][j]);
    fprintf(stderr, "\n");
  }
}
 
/* Prints the next 800 bits read from file `fi'. */
void
bin_dump(FILE *fi)
{
  int i;
 
  for (i=0; i<100; i++) {
    unsigned int bitmask;
    int c = fgetc(fi);
 
    for (bitmask = 0x80; bitmask; bitmask >>= 1)
      fprintf(stderr, "\t%1d", !!(c & bitmask));
    fprintf(stderr, "\n");
  }
}
 
 
/*-------------------------------------------*/
/* core dump generator for forensic analysis */
/*-------------------------------------------*/
 
void
suicide(void)
{
  int *P;
 
  fflush(stdout);
  fflush(stderr);
  P = NULL;
  *P = 1;
}
 
 
/*-------------------------------------------*/
 
 
void
aborted_stream(FILE *fi)
{
  fprintf(stderr, "%ld:\tERROR:\tAbnormal end of decompression process!\n",
	  ftell(fi));
  fprintf(stderr, "\tINFO:\tTotal skipped bytes %d, total stuffers %d\n",
	  passed, stuffers);
 
  fclose(fi);
 
  free_structures();
 
  if (DEBUG) suicide();
}
 
 
/*----------------------------------------------------------*/
 
/* Returns ceil(N/D). */
int
ceil_div(int N, int D)
{
  int i = N/D;
 
  if (N > D*i) i++;
  return i;
}
 
 
/* Returns floor(N/D). */
int
floor_div(int N, int D)
{
  int i = N/D;
 
  if (N < D*i) i--;
  return i;
}
 
 
/*----------------------------------------------------------*/
 
/* For all components reset DC prediction value to 0. */
void
reset_prediction(void)
{
  int i;
 
  for (i=0; i<3; i++) comp[i].PRED = 0;
}
 
 
/*---------------------------------------------------------*/
 
 
/* Transform JPEG number format into usual 2's-complement format. */
int
reformat(unsigned long S, int good)
{
  int St;
 
  if (!good)
    return 0;
  St = 1 << (good-1);	/* 2^(good-1) */
  if (S < (unsigned long) St)
    return (S+1+((-1) << good));
  else
    return S;
}
 
 
/*----------------------------------------------------------*/
 
void
free_structures(void)
{
  int i;
 
  for (i=0; i<4; i++) if (QTvalid[i]) free(QTable[i]);
 
  free(ColorBuffer);
  free(FrameBuffer);
 
  for (i=0; MCU_valid[i] != -1; i++) free(MCU_buff[i]);
}
 
 
/*-------------------------------------------*/
/* this is to save final RGB image to disk   */
/* using the sunraster uncompressed format   */
/*-------------------------------------------*/
 
/* Sun raster header */
 
typedef struct {
  unsigned long	MAGIC;
  unsigned long	Width;
  unsigned long	Heigth;
  unsigned long	Depth;
  unsigned long	Length;
  unsigned long	Type;
  unsigned long	CMapType;
  unsigned long	CMapLength;
} sunraster;
 
 
void
RGB_save(FILE *fo)
{
  sunraster *FrameHeader;
  int i;
 
  FrameHeader = (sunraster *) malloc(sizeof(sunraster));
  FrameHeader->MAGIC      = 0x59a66a95L;
  FrameHeader->Width      = 2 * ceil_div(x_size, 2); /* round to 2 more */
  FrameHeader->Heigth     = y_size;
  FrameHeader->Depth      = (n_comp>1) ? 24 : 8;
  FrameHeader->Length     = 0;	/* not required in v1.0 */
  FrameHeader->Type       = 0;	/* old one */
  FrameHeader->CMapType   = 0;	/* truecolor */
  FrameHeader->CMapLength = 0;	/* none */
 
  fwrite(FrameHeader, sizeof(sunraster), 1, fo);
  for (i=0; i<y_size; i++)
    fwrite(FrameBuffer+n_comp*i*x_size, n_comp, FrameHeader->Width, fo);
}
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.