BaseJpegDeocde exampe program

Dependencies:   BaseJpegDecode Terminal BaseUsbHost mbed mbed-rtos

Fork of BaseJpegDecode by Norimasa Okamoto

Committer:
va009039
Date:
Tue Oct 30 15:35:36 2012 +0000
Revision:
4:7d88de31c55a
Child:
5:033432f9baf3
add simpleJpegDecode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 4:7d88de31c55a 1 #if 1
va009039 4:7d88de31c55a 2 //
va009039 4:7d88de31c55a 3 // split jpeg to bmp files
va009039 4:7d88de31c55a 4 //
va009039 4:7d88de31c55a 5 #include "mbed.h"
va009039 4:7d88de31c55a 6 #include "SimpleJpegDecode.h"
va009039 4:7d88de31c55a 7 #include "bmp24.h"
va009039 4:7d88de31c55a 8 #include "uvc.h"
va009039 4:7d88de31c55a 9 #include "msc.h"
va009039 4:7d88de31c55a 10
va009039 4:7d88de31c55a 11 #define ASSERT(A) while(!(A)){fprintf(stderr,"\n\n%s@%d %s ASSERT!\n\n",__PRETTY_FUNCTION__,__LINE__,#A);exit(1);};
va009039 4:7d88de31c55a 12
va009039 4:7d88de31c55a 13 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
va009039 4:7d88de31c55a 14 Serial pc(USBTX, USBRX);
va009039 4:7d88de31c55a 15
va009039 4:7d88de31c55a 16 SimpleJpegDecode* decode = NULL;
va009039 4:7d88de31c55a 17 bmp24* bmp = NULL;
va009039 4:7d88de31c55a 18
va009039 4:7d88de31c55a 19 int offset_x = 0;
va009039 4:7d88de31c55a 20 int offset_y = 0;
va009039 4:7d88de31c55a 21 void callback(int x, int y, uint8_t* yuv)
va009039 4:7d88de31c55a 22 {
va009039 4:7d88de31c55a 23 led1 = !led1;
va009039 4:7d88de31c55a 24 if (bmp) {
va009039 4:7d88de31c55a 25 uint8_t rgb[3];
va009039 4:7d88de31c55a 26 int r = yuv[0] + (yuv[2]-128) * 1.4020;
va009039 4:7d88de31c55a 27 if (r < 0) {
va009039 4:7d88de31c55a 28 r = 0;
va009039 4:7d88de31c55a 29 } else if (r > 255) {
va009039 4:7d88de31c55a 30 r = 255;
va009039 4:7d88de31c55a 31 }
va009039 4:7d88de31c55a 32 rgb[0] = r;
va009039 4:7d88de31c55a 33 int g = yuv[0] - (yuv[1]-128) * 0.3441 - (yuv[2]-128) * 0.7139;
va009039 4:7d88de31c55a 34 if (g < 0) {
va009039 4:7d88de31c55a 35 g = 0;
va009039 4:7d88de31c55a 36 } else if (g > 255) {
va009039 4:7d88de31c55a 37 g = 255;
va009039 4:7d88de31c55a 38 }
va009039 4:7d88de31c55a 39 rgb[1] = g;
va009039 4:7d88de31c55a 40 int b = yuv[0] + (yuv[1]-128) * 1.7718 - (yuv[2]-128) * 0.0012;
va009039 4:7d88de31c55a 41 if (b < 0) {
va009039 4:7d88de31c55a 42 b = 0;
va009039 4:7d88de31c55a 43 } else if (b > 255) {
va009039 4:7d88de31c55a 44 b = 255;
va009039 4:7d88de31c55a 45 }
va009039 4:7d88de31c55a 46 rgb[2] = b;
va009039 4:7d88de31c55a 47 bmp->point(x - offset_x, y - offset_y, rgb);
va009039 4:7d88de31c55a 48 }
va009039 4:7d88de31c55a 49 }
va009039 4:7d88de31c55a 50
va009039 4:7d88de31c55a 51 int main() {
va009039 4:7d88de31c55a 52 pc.baud(921600);
va009039 4:7d88de31c55a 53 printf("%s\n", __FILE__);
va009039 4:7d88de31c55a 54
va009039 4:7d88de31c55a 55 msc* usb = new msc("usb");
va009039 4:7d88de31c55a 56 int r = usb->setup();
va009039 4:7d88de31c55a 57 ASSERT(r == 0);
va009039 4:7d88de31c55a 58
va009039 4:7d88de31c55a 59 bmp = new bmp24;
va009039 4:7d88de31c55a 60 ASSERT(bmp);
va009039 4:7d88de31c55a 61
va009039 4:7d88de31c55a 62 decode = new SimpleJpegDecode;
va009039 4:7d88de31c55a 63 ASSERT(decode);
va009039 4:7d88de31c55a 64 decode->setOnResult(callback);
va009039 4:7d88de31c55a 65
va009039 4:7d88de31c55a 66 const char* input_file = "/usb/input.jpg";
va009039 4:7d88de31c55a 67 printf("input: %s\n", input_file);
va009039 4:7d88de31c55a 68 int n = 0;
va009039 4:7d88de31c55a 69 for(offset_y = 0; offset_y < 240; offset_y += 48) {
va009039 4:7d88de31c55a 70 for(offset_x = 0; offset_x < 320; offset_x += 64) {
va009039 4:7d88de31c55a 71 bmp->clear();
va009039 4:7d88de31c55a 72 decode->clear();
va009039 4:7d88de31c55a 73 FILE *fp = fopen(input_file, "rb");
va009039 4:7d88de31c55a 74 ASSERT(fp != NULL);
va009039 4:7d88de31c55a 75 while(!feof(fp)) {
va009039 4:7d88de31c55a 76 int c = fgetc(fp);
va009039 4:7d88de31c55a 77 decode->input(c);
va009039 4:7d88de31c55a 78 led2 = !led2;
va009039 4:7d88de31c55a 79 }
va009039 4:7d88de31c55a 80 fclose(fp);
va009039 4:7d88de31c55a 81 char path[32];
va009039 4:7d88de31c55a 82 sprintf(path, "/usb/output%02d.bmp", n++);
va009039 4:7d88de31c55a 83 printf("offset: (%3d,%3d) %s\n", offset_x, offset_y, path);
va009039 4:7d88de31c55a 84 bmp->writeFile(path);
va009039 4:7d88de31c55a 85 led3 = !led3;
va009039 4:7d88de31c55a 86 }
va009039 4:7d88de31c55a 87 led4 = !led4;
va009039 4:7d88de31c55a 88 }
va009039 4:7d88de31c55a 89 printf("width: %d, height: %d, yblock: %d\n", decode->width, decode->height, decode->m_yblocks);
va009039 4:7d88de31c55a 90 exit(1);
va009039 4:7d88de31c55a 91 }
va009039 4:7d88de31c55a 92 #endif