summaryrefslogtreecommitdiffstats
path: root/src/jpeg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/jpeg.c')
-rw-r--r--src/jpeg.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/jpeg.c b/src/jpeg.c
new file mode 100644
index 0000000..5c779ea
--- /dev/null
+++ b/src/jpeg.c
@@ -0,0 +1,62 @@
+#define SOI_MK 0xFFD8 /* start of image */
+#define SOF_MK 0xFFC0 /* start of frame */
+#define EOI_MK 0xFFD9 /* end of image */
+#define DRI_MK 0xFFDD /* restart interval */
+
+#define get_size(fi) (((unsigned int)Image[fi]) << 8) + (unsigned int)Image[fi+1]
+
+unsigned char GetJPEGHeaderInfo (unsigned char *Image,unsigned int *offset,unsigned int *x_size,unsigned int *y_size, unsigned char *depth)
+{
+ unsigned int aux;
+ int hCounter = 0;
+ /* First find the SOI marker: */
+ aux = get_size(hCounter); hCounter+=2;
+ if (aux != SOI_MK)
+ { printf("INFO:\tNO SOI marker!\n"); return 0;}
+
+ printf("%ld:\tINFO:\tFound the SOI marker!\n", hCounter);
+
+ /* Read first marker */
+ while( aux != SOF_MK)
+ {
+ aux = get_size(hCounter); hCounter+=2;
+ if(aux == SOF_MK)
+ {
+ get_size(hCounter); hCounter+=2; /* header size, don't care */
+
+ /* load basic image parameters */
+ hCounter++; /* precision, 8bit, don't care */
+ *y_size = get_size(hCounter); hCounter+=2;
+ *x_size = get_size(hCounter); hCounter+=2;
+
+ printf("\tINFO:\tImage size is %d by %d\n", *x_size, *y_size);
+
+ *depth = Image[hCounter]; /* # of components */
+
+ printf("\tINFO:\t");
+ switch (*depth)
+ {
+ case 1:
+ printf("Monochrome");
+ break;
+ case 3:
+ printf("Color");
+ break;
+ default:
+ printf("Not a");
+ break;
+ }
+ printf(" JPEG image!\n");
+
+ return 0;
+ }
+ else
+ hCounter = hCounter + get_size(hCounter);
+ }
+ return 1;
+}
+
+unsigned char WriteJPEGHeaderInfo (unsigned char *Image,unsigned int offset,unsigned int x_size,unsigned int y_size, unsigned char depth)
+{
+ return 0;
+}