utils.c

来自「基于4个mips核的noc设计」· C语言 代码 · 共 240 行

C
240
字号
/*-----------------------------------------*//* File : utils.c, utilities for jfif view *//* Author : Pierre Guerrier, march 1998	   *//*-----------------------------------------*/#include <stdlib.h>#include <stdio.h>#include "jpeg.h"/* Prints a data block in frequency space. */voidshow_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. */voidshow_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'. */voidbin_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 *//*-------------------------------------------*/voidsuicide(void){  int *P;  fflush(stdout);  fflush(stderr);  P = NULL;  *P = 1;}/*-------------------------------------------*/voidaborted_stream(FILE *fi, FILE *fo){  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);  if (DEBUG) RGB_save(fo); else free_structures();  fclose(fo);  if (DEBUG) suicide(); else exit(1);}/*----------------------------------------------------------*//* Returns ceil(N/D). */intceil_div(int N, int D){  int i = N/D;  if (N > D*i) i++;  return i;}/* Returns floor(N/D). */intfloor_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. */voidreset_prediction(void){  int i;  for (i=0; i<3; i++) comp[i].PRED = 0;}/*---------------------------------------------------------*//* Transform JPEG number format into usual 2's-complement format. */intreformat(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;}/*----------------------------------------------------------*/voidfree_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;voidRGB_save(FILE *fo){  sunraster *FrameHeader;  int i;  unsigned long bigendian_value;    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 */  /* Frameheader must be in Big-Endian format */#if BYTE_ORDER == LITTLE_ENDIAN  #define MACHINE_2_BIGENDIAN(value)\ ((( (value) & (unsigned long)(0x000000FF)) << 24) | \  (( (value) & (unsigned long)(0x0000FF00)) << 8) | \  (( (value) & (unsigned long)(0x00FF0000)) >> 8) | \  (( (value) & (unsigned long)(0xFF000000)) >> 24))    bigendian_value = MACHINE_2_BIGENDIAN(FrameHeader->MAGIC);  fwrite(&bigendian_value, 4, 1, fo);    bigendian_value = MACHINE_2_BIGENDIAN(FrameHeader->Width);  fwrite(&bigendian_value, 4, 1, fo);    bigendian_value = MACHINE_2_BIGENDIAN(FrameHeader->Heigth);  fwrite(&bigendian_value, 4, 1, fo);    bigendian_value = MACHINE_2_BIGENDIAN(FrameHeader->Depth);  fwrite(&bigendian_value, 4, 1, fo);    bigendian_value = MACHINE_2_BIGENDIAN(FrameHeader->Length);  fwrite(&bigendian_value, 4, 1, fo);    bigendian_value = MACHINE_2_BIGENDIAN(FrameHeader->Type);  fwrite(&bigendian_value, 4, 1, fo);    bigendian_value = MACHINE_2_BIGENDIAN(FrameHeader->CMapType);  fwrite(&bigendian_value, 4, 1, fo);    bigendian_value = MACHINE_2_BIGENDIAN(FrameHeader->CMapLength);  fwrite(&bigendian_value, 4, 1, fo);  #else  fwrite(FrameHeader, sizeof(sunraster), 1, fo);#endif  for (i=0; i<y_size; i++)    fwrite(FrameBuffer+n_comp*i*x_size, n_comp, FrameHeader->Width, fo);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?