BaseJpegDeocde exampe program
Dependencies: BaseJpegDecode Terminal BaseUsbHost mbed mbed-rtos
Fork of BaseJpegDecode by
example1_c270.cpp
- Committer:
- va009039
- Date:
- 2012-10-07
- Revision:
- 0:7121d9fb45f4
- Child:
- 2:697ebeb8336f
File content as of revision 0:7121d9fb45f4:
#if 1 #include "mbed.h" #include "BaseJpegDecode.h" #include "uvc.h" // Logitech C270 #define WIDTH 320 #define HEIGHT 176 #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); Serial pc(USBTX, USBRX); class CalcCenter : public BaseJpegDecode { public: int y_center, x_center; int m_x_sum, m_y_sum, m_sum; int8_t m_buf[WIDTH/16*HEIGHT/8]; virtual void outputDC(int mcu, int block, int value) { if (mcu >= (WIDTH/16*HEIGHT/8)) { return; } if (block == 3) { // 0-1:Y 2:Cb 3:Cr m_buf[mcu] = value; // debug if (value >= 2) { // red m_x_sum += value*(mcu%(WIDTH/16)); m_y_sum += value*(mcu/(WIDTH/16)); m_sum += value; } } } virtual void outputAC(int mcu, int block, int scan, int value){}; virtual void outputMARK(uint8_t c){ if (c == 0xd9) { // EOI if(m_sum == 0) { x_center = y_center = -1; // not found } else { x_center = m_x_sum / m_sum; y_center = m_y_sum / m_sum; } m_x_sum = m_y_sum = m_sum = 0; // reset led2 = !led2; } }; }; CalcCenter* calc = NULL; void callback_motion_jpeg(uint16_t frame, uint8_t* buf, int len) { if (calc) { calc->input(buf+12, len-12); } led1 = buf[1]&1; // FID } int main() { pc.baud(921600); printf("%s\n", __FILE__); calc = new CalcCenter; ASSERT(calc); uvc* cam = new uvc; ASSERT(cam); cam->SetImageSize(WIDTH, HEIGHT); cam->SetFrameInterval(2000000); // 5.0fps cam->setOnResult(callback_motion_jpeg); ASSERT(cam->setup() >= 0); while(1) { printf("\n"); // start debug dump for(int y = 0; y < HEIGHT/8; y++) { for(int x = 0; x < WIDTH/16; x++) { printf("%+3d,", calc->m_buf[y*WIDTH/16+x]); cam->poll(); } printf("\n"); } printf("red:(%d,%d)\n", calc->x_center, calc->y_center); cam->wait_ms(500); led3 = !led3; } } #endif