
BaseJpegDeocde exampe program
Dependencies: BaseJpegDecode Terminal BaseUsbHost mbed mbed-rtos
Fork of BaseJpegDecode by
Diff: example2_c270.cpp
- Revision:
- 4:7d88de31c55a
- Parent:
- 3:2709bbf8baae
- Child:
- 5:033432f9baf3
--- a/example2_c270.cpp Thu Oct 25 11:02:17 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -#if 0 -// -// dump YCrCb -// [Y0, Y1], -// (Cr, Cb), -// -#include "mbed.h" -#include "BaseJpegDecode.h" -#include "uvc.h" -#include "Terminal.h" - -// Logitech C270 -#define WIDTH 160 -#define HEIGHT 120 - -#define ASSERT(A) while(!(A)){fprintf(stderr,"\n\n%s@%d %s ASSERT!\n\n",__PRETTY_FUNCTION__,__LINE__,#A);exit(1);}; - -DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4); -Terminal term(USBTX, USBRX); - -class Decode1 : public BaseJpegDecode { -public: - int16_t m_y0[WIDTH/16*HEIGHT/8]; - int16_t m_y1[WIDTH/16*HEIGHT/8]; - int16_t m_cb[WIDTH/16*HEIGHT/8]; - int16_t m_cr[WIDTH/16*HEIGHT/8]; - virtual void outputDC(int mcu, int block, int value) { - if (mcu >= (WIDTH/16*HEIGHT/8)) { - return; - } - switch(block) { // 0-1:Y 2:Cb 3:Cr - case 0: m_y0[mcu] = value * qt[0][0]; break; - case 1: m_y1[mcu] = value * qt[0][0]; break; - case 2: m_cb[mcu] = value * qt[1][0]; break; - case 3: m_cr[mcu] = value * qt[1][0]; break; - } - } - virtual void outputAC(int mcu, int block, int scan, int value){}; - virtual void outputMARK(uint8_t c){ - if (c == 0xd9) { // EOI - led2 = !led2; - } - }; -}; - -Decode1* decode = NULL; - -void callback_motion_jpeg(uint16_t frame, uint8_t* buf, int len) -{ - if (decode) { - decode->input(buf+12, len-12); - } - led1 = buf[1]&1; // FID -} - -int main() { - term.baud(921600); - printf("%s\n", __FILE__); - - decode = new Decode1; - ASSERT(decode); - uvc* cam = new uvc; - ASSERT(cam); - cam->SetImageSize(WIDTH, HEIGHT); - cam->SetFrameInterval(2000000); // 5.0fps - cam->setOnResult(callback_motion_jpeg); - ASSERT(cam->setup() >= 0); - term.cls(); - while(1) { - int column = 0; - for(int y = 0; y < HEIGHT/8; y++) { - term.locate(0, column++); - for(int x = 0; x < WIDTH/16; x++) { - int mcu = y*WIDTH/16+x; - term.printf("%+4d,%+4d,", decode->m_y0[mcu], decode->m_y1[mcu]); - cam->poll(); - } - term.locate(0, column++); - for(int x = 0; x < WIDTH/16; x++) { - int mcu = y*WIDTH/16+x; - term.printf("%+4d,%+4d,", decode->m_cb[mcu], decode->m_cr[mcu]); - cam->poll(); - } - } - cam->wait_ms(500); - led3 = !led3; - } -} -#endif