File: listjpeg.c

package info (click to toggle)
libming 0.2a.cvs20020110-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 2,204 kB
  • ctags: 4,173
  • sloc: ansic: 19,467; yacc: 2,149; cpp: 1,518; java: 1,253; ruby: 516; perl: 462; python: 436; makefile: 295; sh: 4
file content (84 lines) | stat: -rw-r--r-- 1,680 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

#include <stdlib.h>
#include <stdio.h>

/* JPEG stream markers: */
#define JPEG_MARKER 0xFF

/* Start of Image, End of Image */
#define JPEG_SOI  0xD8
#define JPEG_EOI  0xD9

#define JPEG_JFIF 0xE0

/* encoding markers, quantization tables and Huffman tables */
#define JPEG_QUANT 0xDB
#define JPEG_HUFF  0xC4

/* image markers, start of frame and start of scan */
#define JPEG_SOF0 0xC0
#define JPEG_SOF1 0xC1
#define JPEG_SOF2 0xC2
#define JPEG_SOS  0xDA

void printJpegStream(FILE *f)
{
  int c, l;

  while(!feof(f))
  {
    if(fgetc(f) != JPEG_MARKER)
    {
      printf("Jpeg marker not found!\n");
      break;
    }

    switch(c=fgetc(f))
    {
      case JPEG_SOI:   printf("SOI\n"); break;
      case JPEG_EOI:   printf("EOI\n"); break;
      case JPEG_JFIF:  printf("JFIF\n"); break;
      case JPEG_QUANT: printf("Quantization table\n"); break;
      case JPEG_HUFF:  printf("Huffman table\n"); break;
      case JPEG_SOF0:  printf("Start of frame 0\n"); break;
      case JPEG_SOF1:  printf("Start of frame 1\n"); break;
      case JPEG_SOF2:  printf("Start of frame 2\n"); break;
      case JPEG_SOS:   printf("Start of scan\n"); break;
      default:         printf("Unknown JPEG block: %02x\n", c);
    }

    if(c==JPEG_SOS)
      break;

    if(c != JPEG_SOI && c != JPEG_EOI)
    {
      l = (fgetc(f)<<8) + fgetc(f);
      printf("%i bytes\n", l);

      for(l-=2; l>0; --l)
	fgetc(f);
    }
  }
}

int main(int argc, char *argv[])
{
  FILE *f;

  f = fopen(argv[1], "rb");

  if(argc<1)
  {
    printf("Gimme file name\n");
    exit(1);
  }

  if(!f)
  {
    printf("Couldn't open file %s!\n", argv[1]);
    exit(1);
  }

  printJpegStream(f);
  exit(0);
}