
BaseJpegDeocde exampe program
Dependencies: BaseJpegDecode Terminal BaseUsbHost mbed mbed-rtos
Fork of BaseJpegDecode by
example4_c270.cpp@3:2709bbf8baae, 2012-10-25 (annotated)
- Committer:
- va009039
- Date:
- Thu Oct 25 11:02:17 2012 +0000
- Revision:
- 3:2709bbf8baae
support DQT
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 3:2709bbf8baae | 1 | #if 1 |
va009039 | 3:2709bbf8baae | 2 | // |
va009039 | 3:2709bbf8baae | 3 | // dump YCrCb |
va009039 | 3:2709bbf8baae | 4 | // [Y0, Y1], |
va009039 | 3:2709bbf8baae | 5 | // (Cr, Cb), |
va009039 | 3:2709bbf8baae | 6 | // |
va009039 | 3:2709bbf8baae | 7 | #include "mbed.h" |
va009039 | 3:2709bbf8baae | 8 | #include "BaseJpegDecode.h" |
va009039 | 3:2709bbf8baae | 9 | #include "uvc.h" |
va009039 | 3:2709bbf8baae | 10 | #include "Terminal.h" |
va009039 | 3:2709bbf8baae | 11 | |
va009039 | 3:2709bbf8baae | 12 | // Logitech C270 |
va009039 | 3:2709bbf8baae | 13 | #define WIDTH 160 |
va009039 | 3:2709bbf8baae | 14 | #define HEIGHT 120 |
va009039 | 3:2709bbf8baae | 15 | |
va009039 | 3:2709bbf8baae | 16 | #define ASSERT(A) while(!(A)){fprintf(stderr,"\n\n%s@%d %s ASSERT!\n\n",__PRETTY_FUNCTION__,__LINE__,#A);exit(1);}; |
va009039 | 3:2709bbf8baae | 17 | |
va009039 | 3:2709bbf8baae | 18 | DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4); |
va009039 | 3:2709bbf8baae | 19 | Terminal term(USBTX, USBRX); |
va009039 | 3:2709bbf8baae | 20 | |
va009039 | 3:2709bbf8baae | 21 | class Decode1 : public BaseJpegDecode { |
va009039 | 3:2709bbf8baae | 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 | 3:2709bbf8baae | 27 | virtual void outputDC(int mcu, int block, int value) { |
va009039 | 3:2709bbf8baae | 28 | if (mcu >= (WIDTH/16*HEIGHT/8)) { |
va009039 | 3:2709bbf8baae | 29 | return; |
va009039 | 3:2709bbf8baae | 30 | } |
va009039 | 3:2709bbf8baae | 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 | 3:2709bbf8baae | 36 | } |
va009039 | 3:2709bbf8baae | 37 | } |
va009039 | 3:2709bbf8baae | 38 | virtual void outputAC(int mcu, int block, int scan, int value){}; |
va009039 | 3:2709bbf8baae | 39 | virtual void outputMARK(uint8_t c){ |
va009039 | 3:2709bbf8baae | 40 | if (c == 0xd9) { // EOI |
va009039 | 3:2709bbf8baae | 41 | led2 = !led2; |
va009039 | 3:2709bbf8baae | 42 | } |
va009039 | 3:2709bbf8baae | 43 | }; |
va009039 | 3:2709bbf8baae | 44 | }; |
va009039 | 3:2709bbf8baae | 45 | |
va009039 | 3:2709bbf8baae | 46 | Decode1* decode = NULL; |
va009039 | 3:2709bbf8baae | 47 | |
va009039 | 3:2709bbf8baae | 48 | void callback_motion_jpeg(uint16_t frame, uint8_t* buf, int len) |
va009039 | 3:2709bbf8baae | 49 | { |
va009039 | 3:2709bbf8baae | 50 | if (decode) { |
va009039 | 3:2709bbf8baae | 51 | decode->input(buf+12, len-12); |
va009039 | 3:2709bbf8baae | 52 | } |
va009039 | 3:2709bbf8baae | 53 | led1 = buf[1]&1; // FID |
va009039 | 3:2709bbf8baae | 54 | } |
va009039 | 3:2709bbf8baae | 55 | |
va009039 | 3:2709bbf8baae | 56 | int main() { |
va009039 | 3:2709bbf8baae | 57 | term.baud(921600); |
va009039 | 3:2709bbf8baae | 58 | printf("%s\n", __FILE__); |
va009039 | 3:2709bbf8baae | 59 | |
va009039 | 3:2709bbf8baae | 60 | decode = new Decode1; |
va009039 | 3:2709bbf8baae | 61 | ASSERT(decode); |
va009039 | 3:2709bbf8baae | 62 | uvc* cam = new uvc; |
va009039 | 3:2709bbf8baae | 63 | ASSERT(cam); |
va009039 | 3:2709bbf8baae | 64 | cam->SetImageSize(WIDTH, HEIGHT); |
va009039 | 3:2709bbf8baae | 65 | cam->SetFrameInterval(2000000); // 5.0fps |
va009039 | 3:2709bbf8baae | 66 | cam->setOnResult(callback_motion_jpeg); |
va009039 | 3:2709bbf8baae | 67 | ASSERT(cam->setup() >= 0); |
va009039 | 3:2709bbf8baae | 68 | term.cls(); |
va009039 | 3:2709bbf8baae | 69 | while(1) { |
va009039 | 3:2709bbf8baae | 70 | int column = 0; |
va009039 | 3:2709bbf8baae | 71 | term.locate(0, column++); |
va009039 | 3:2709bbf8baae | 72 | term.printf("Y: qt:"); |
va009039 | 3:2709bbf8baae | 73 | for(int i = 0; i < 16; i++) { |
va009039 | 3:2709bbf8baae | 74 | term.printf(" %d", decode->qt[0][i]); |
va009039 | 3:2709bbf8baae | 75 | } |
va009039 | 3:2709bbf8baae | 76 | term.printf("]"); |
va009039 | 3:2709bbf8baae | 77 | for(int y = 0; y < HEIGHT/8; y++) { |
va009039 | 3:2709bbf8baae | 78 | term.locate(0, column++); |
va009039 | 3:2709bbf8baae | 79 | for(int x = 0; x < WIDTH/16; x++) { |
va009039 | 3:2709bbf8baae | 80 | int mcu = y*WIDTH/16+x; |
va009039 | 3:2709bbf8baae | 81 | term.printf("%+5d,%+5d,", decode->m_y0[mcu], decode->m_y1[mcu]); |
va009039 | 3:2709bbf8baae | 82 | cam->poll(); |
va009039 | 3:2709bbf8baae | 83 | } |
va009039 | 3:2709bbf8baae | 84 | } |
va009039 | 3:2709bbf8baae | 85 | term.locate(0, column++); |
va009039 | 3:2709bbf8baae | 86 | term.printf("CbCr: [qt:"); |
va009039 | 3:2709bbf8baae | 87 | for(int i = 0; i < 16; i++) { |
va009039 | 3:2709bbf8baae | 88 | term.printf(" %d", decode->qt[1][i]); |
va009039 | 3:2709bbf8baae | 89 | } |
va009039 | 3:2709bbf8baae | 90 | term.printf("]"); |
va009039 | 3:2709bbf8baae | 91 | for(int y = 0; y < HEIGHT/8; y++) { |
va009039 | 3:2709bbf8baae | 92 | term.locate(0, column++); |
va009039 | 3:2709bbf8baae | 93 | for(int x = 0; x < WIDTH/16; x++) { |
va009039 | 3:2709bbf8baae | 94 | int mcu = y*WIDTH/16+x; |
va009039 | 3:2709bbf8baae | 95 | term.printf("%+5d,%+5d|", decode->m_cb[mcu], decode->m_cr[mcu]); |
va009039 | 3:2709bbf8baae | 96 | cam->poll(); |
va009039 | 3:2709bbf8baae | 97 | } |
va009039 | 3:2709bbf8baae | 98 | } |
va009039 | 3:2709bbf8baae | 99 | cam->wait_ms(500); |
va009039 | 3:2709bbf8baae | 100 | led3 = !led3; |
va009039 | 3:2709bbf8baae | 101 | } |
va009039 | 3:2709bbf8baae | 102 | } |
va009039 | 3:2709bbf8baae | 103 | #endif |