
BaseJpegDeocde exampe program
Dependencies: BaseJpegDecode Terminal BaseUsbHost mbed mbed-rtos
Fork of BaseJpegDecode by
example3_c270.cpp@2:697ebeb8336f, 2012-10-22 (annotated)
- Committer:
- va009039
- Date:
- Mon Oct 22 14:10:04 2012 +0000
- Revision:
- 2:697ebeb8336f
use Terminal
Who changed what in which revision?
User | Revision | Line number | New 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 |