BaseJpegDeocde exampe program

Dependencies:   BaseJpegDecode Terminal BaseUsbHost mbed mbed-rtos

Fork of BaseJpegDecode by Norimasa Okamoto

Committer:
va009039
Date:
Thu Oct 25 11:02:17 2012 +0000
Revision:
3:2709bbf8baae
Parent:
2:697ebeb8336f
support DQT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 2:697ebeb8336f 1 #if 0
va009039 2:697ebeb8336f 2 //
va009039 2:697ebeb8336f 3 // dump YCrCb
va009039 2:697ebeb8336f 4 // [Y0, Y1],
va009039 2:697ebeb8336f 5 // (Cr, Cb),
va009039 2:697ebeb8336f 6 //
va009039 2:697ebeb8336f 7 #include "mbed.h"
va009039 2:697ebeb8336f 8 #include "BaseJpegDecode.h"
va009039 2:697ebeb8336f 9 #include "uvc.h"
va009039 2:697ebeb8336f 10 #include "Terminal.h"
va009039 2:697ebeb8336f 11
va009039 2:697ebeb8336f 12 // Logitech C270
va009039 2:697ebeb8336f 13 #define WIDTH 160
va009039 2:697ebeb8336f 14 #define HEIGHT 120
va009039 2:697ebeb8336f 15
va009039 2:697ebeb8336f 16 #define ASSERT(A) while(!(A)){fprintf(stderr,"\n\n%s@%d %s ASSERT!\n\n",__PRETTY_FUNCTION__,__LINE__,#A);exit(1);};
va009039 2:697ebeb8336f 17
va009039 2:697ebeb8336f 18 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
va009039 2:697ebeb8336f 19 Terminal term(USBTX, USBRX);
va009039 2:697ebeb8336f 20
va009039 2:697ebeb8336f 21 class Decode1 : public BaseJpegDecode {
va009039 2:697ebeb8336f 22 public:
va009039 3:2709bbf8baae 23 int16_t m_y0[WIDTH/16*HEIGHT/8];
va009039 3:2709bbf8baae 24 int16_t m_y1[WIDTH/16*HEIGHT/8];
va009039 3:2709bbf8baae 25 int16_t m_cb[WIDTH/16*HEIGHT/8];
va009039 3:2709bbf8baae 26 int16_t m_cr[WIDTH/16*HEIGHT/8];
va009039 2:697ebeb8336f 27 virtual void outputDC(int mcu, int block, int value) {
va009039 2:697ebeb8336f 28 if (mcu >= (WIDTH/16*HEIGHT/8)) {
va009039 2:697ebeb8336f 29 return;
va009039 2:697ebeb8336f 30 }
va009039 2:697ebeb8336f 31 switch(block) { // 0-1:Y 2:Cb 3:Cr
va009039 3:2709bbf8baae 32 case 0: m_y0[mcu] = value * qt[0][0]; break;
va009039 3:2709bbf8baae 33 case 1: m_y1[mcu] = value * qt[0][0]; break;
va009039 3:2709bbf8baae 34 case 2: m_cb[mcu] = value * qt[1][0]; break;
va009039 3:2709bbf8baae 35 case 3: m_cr[mcu] = value * qt[1][0]; break;
va009039 2:697ebeb8336f 36 }
va009039 2:697ebeb8336f 37 }
va009039 2:697ebeb8336f 38 virtual void outputAC(int mcu, int block, int scan, int value){};
va009039 2:697ebeb8336f 39 virtual void outputMARK(uint8_t c){
va009039 2:697ebeb8336f 40 if (c == 0xd9) { // EOI
va009039 2:697ebeb8336f 41 led2 = !led2;
va009039 2:697ebeb8336f 42 }
va009039 2:697ebeb8336f 43 };
va009039 2:697ebeb8336f 44 };
va009039 2:697ebeb8336f 45
va009039 2:697ebeb8336f 46 Decode1* decode = NULL;
va009039 2:697ebeb8336f 47
va009039 2:697ebeb8336f 48 void callback_motion_jpeg(uint16_t frame, uint8_t* buf, int len)
va009039 2:697ebeb8336f 49 {
va009039 2:697ebeb8336f 50 if (decode) {
va009039 2:697ebeb8336f 51 decode->input(buf+12, len-12);
va009039 2:697ebeb8336f 52 }
va009039 2:697ebeb8336f 53 led1 = buf[1]&1; // FID
va009039 2:697ebeb8336f 54 }
va009039 2:697ebeb8336f 55
va009039 2:697ebeb8336f 56 int main() {
va009039 2:697ebeb8336f 57 term.baud(921600);
va009039 2:697ebeb8336f 58 printf("%s\n", __FILE__);
va009039 2:697ebeb8336f 59
va009039 2:697ebeb8336f 60 decode = new Decode1;
va009039 2:697ebeb8336f 61 ASSERT(decode);
va009039 2:697ebeb8336f 62 uvc* cam = new uvc;
va009039 2:697ebeb8336f 63 ASSERT(cam);
va009039 2:697ebeb8336f 64 cam->SetImageSize(WIDTH, HEIGHT);
va009039 2:697ebeb8336f 65 cam->SetFrameInterval(2000000); // 5.0fps
va009039 2:697ebeb8336f 66 cam->setOnResult(callback_motion_jpeg);
va009039 2:697ebeb8336f 67 ASSERT(cam->setup() >= 0);
va009039 2:697ebeb8336f 68 term.cls();
va009039 2:697ebeb8336f 69 while(1) {
va009039 2:697ebeb8336f 70 int column = 0;
va009039 2:697ebeb8336f 71 for(int y = 0; y < HEIGHT/8; y++) {
va009039 2:697ebeb8336f 72 term.locate(0, column++);
va009039 2:697ebeb8336f 73 for(int x = 0; x < WIDTH/16; x++) {
va009039 2:697ebeb8336f 74 int mcu = y*WIDTH/16+x;
va009039 3:2709bbf8baae 75 term.printf("%+4d,%+4d,", decode->m_y0[mcu], decode->m_y1[mcu]);
va009039 2:697ebeb8336f 76 cam->poll();
va009039 2:697ebeb8336f 77 }
va009039 2:697ebeb8336f 78 term.locate(0, column++);
va009039 2:697ebeb8336f 79 for(int x = 0; x < WIDTH/16; x++) {
va009039 2:697ebeb8336f 80 int mcu = y*WIDTH/16+x;
va009039 3:2709bbf8baae 81 term.printf("%+4d,%+4d,", decode->m_cb[mcu], decode->m_cr[mcu]);
va009039 2:697ebeb8336f 82 cam->poll();
va009039 2:697ebeb8336f 83 }
va009039 2:697ebeb8336f 84 }
va009039 2:697ebeb8336f 85 cam->wait_ms(500);
va009039 2:697ebeb8336f 86 led3 = !led3;
va009039 2:697ebeb8336f 87 }
va009039 2:697ebeb8336f 88 }
va009039 2:697ebeb8336f 89 #endif