BaseJpegDeocde exampe program

Dependencies:   BaseJpegDecode Terminal BaseUsbHost mbed mbed-rtos

Fork of BaseJpegDecode by Norimasa Okamoto

Committer:
va009039
Date:
Mon Oct 22 14:10:04 2012 +0000
Revision:
2:697ebeb8336f
use Terminal

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 // view webcam
va009039 2:697ebeb8336f 4 //
va009039 2:697ebeb8336f 5 #include "mbed.h"
va009039 2:697ebeb8336f 6 #include "BaseJpegDecode.h"
va009039 2:697ebeb8336f 7 #include "uvc.h"
va009039 2:697ebeb8336f 8 #include "Terminal.h"
va009039 2:697ebeb8336f 9
va009039 2:697ebeb8336f 10 // Logitech C270
va009039 2:697ebeb8336f 11 #define WIDTH 320
va009039 2:697ebeb8336f 12 #define HEIGHT 176
va009039 2:697ebeb8336f 13
va009039 2:697ebeb8336f 14 #define ASSERT(A) while(!(A)){fprintf(stderr,"\n\n%s@%d %s ASSERT!\n\n",__PRETTY_FUNCTION__,__LINE__,#A);exit(1);};
va009039 2:697ebeb8336f 15
va009039 2:697ebeb8336f 16 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
va009039 2:697ebeb8336f 17 Terminal term(USBTX, USBRX);
va009039 2:697ebeb8336f 18
va009039 2:697ebeb8336f 19 class JpegDecode : public BaseJpegDecode {
va009039 2:697ebeb8336f 20 public:
va009039 2:697ebeb8336f 21 int8_t m_buf[WIDTH/8*HEIGHT/8];
va009039 2:697ebeb8336f 22 virtual void outputDC(int mcu, int block, int value) {
va009039 2:697ebeb8336f 23 if (mcu < (WIDTH/8*HEIGHT/8/2)) {
va009039 2:697ebeb8336f 24 if (block <= 1) { // 0-1:Y 2:Cb 3:Cr
va009039 2:697ebeb8336f 25 m_buf[mcu*2+block] = value;
va009039 2:697ebeb8336f 26 }
va009039 2:697ebeb8336f 27 }
va009039 2:697ebeb8336f 28 }
va009039 2:697ebeb8336f 29 virtual void outputAC(int mcu, int block, int scan, int value){};
va009039 2:697ebeb8336f 30 virtual void outputMARK(uint8_t c){};
va009039 2:697ebeb8336f 31 };
va009039 2:697ebeb8336f 32
va009039 2:697ebeb8336f 33 JpegDecode* decode = NULL;
va009039 2:697ebeb8336f 34
va009039 2:697ebeb8336f 35 void callback_motion_jpeg(uint16_t frame, uint8_t* buf, int len)
va009039 2:697ebeb8336f 36 {
va009039 2:697ebeb8336f 37 if (decode) {
va009039 2:697ebeb8336f 38 decode->input(buf+12, len-12);
va009039 2:697ebeb8336f 39 }
va009039 2:697ebeb8336f 40 led1 = buf[1]&1; // FID
va009039 2:697ebeb8336f 41 }
va009039 2:697ebeb8336f 42
va009039 2:697ebeb8336f 43 int main() {
va009039 2:697ebeb8336f 44 term.baud(921600);
va009039 2:697ebeb8336f 45 term.printf("%s\n", __FILE__);
va009039 2:697ebeb8336f 46
va009039 2:697ebeb8336f 47 decode = new JpegDecode;
va009039 2:697ebeb8336f 48 ASSERT(decode);
va009039 2:697ebeb8336f 49 uvc* cam = new uvc;
va009039 2:697ebeb8336f 50 ASSERT(cam);
va009039 2:697ebeb8336f 51 cam->SetImageSize(WIDTH, HEIGHT);
va009039 2:697ebeb8336f 52 cam->SetFrameInterval(1000000); // 10.0fps
va009039 2:697ebeb8336f 53 cam->setOnResult(callback_motion_jpeg);
va009039 2:697ebeb8336f 54 ASSERT(cam->setup() >= 0);
va009039 2:697ebeb8336f 55 term.cls();
va009039 2:697ebeb8336f 56 int n = 0;
va009039 2:697ebeb8336f 57 while(1) {
va009039 2:697ebeb8336f 58 int y;
va009039 2:697ebeb8336f 59 for(y = 0; y < HEIGHT/8; y++) {
va009039 2:697ebeb8336f 60 term.locate(0, y);
va009039 2:697ebeb8336f 61 for(int x = 0; x < WIDTH/8; x++) {
va009039 2:697ebeb8336f 62 if (decode->m_buf[y*WIDTH/8+x] > 0) {
va009039 2:697ebeb8336f 63 term.printf("**");
va009039 2:697ebeb8336f 64 } else {
va009039 2:697ebeb8336f 65 term.printf("..");
va009039 2:697ebeb8336f 66 }
va009039 2:697ebeb8336f 67 cam->poll();
va009039 2:697ebeb8336f 68 }
va009039 2:697ebeb8336f 69 }
va009039 2:697ebeb8336f 70 term.locate(0, y);
va009039 2:697ebeb8336f 71 term.printf("%d", n);
va009039 2:697ebeb8336f 72 n++;
va009039 2:697ebeb8336f 73 cam->wait_ms(5);
va009039 2:697ebeb8336f 74 led2 = !led2;
va009039 2:697ebeb8336f 75 }
va009039 2:697ebeb8336f 76 }
va009039 2:697ebeb8336f 77 #endif