Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BaseJpegDecode Terminal BaseUsbHost mbed mbed-rtos
Fork of BaseJpegDecode by
example3_c270.cpp@3:2709bbf8baae, 2012-10-25 (annotated)
- Committer:
- va009039
- Date:
- Thu Oct 25 11:02:17 2012 +0000
- Revision:
- 3:2709bbf8baae
- Parent:
- 2:697ebeb8336f
support DQT
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 |
