video streaming using websocket. but,streaming is very slower than 0.1fps.
Dependencies: BaseUsbHost EthernetInterface WebSocketClient mbed-rtos mbed
Fork of BaseUsbHost_example by
example_captureJPEG.cpp
- Committer:
- va009039
- Date:
- 2012-12-11
- Revision:
- 2:c10029b87439
File content as of revision 2:c10029b87439:
#if 0 // example_captureJPEG.cpp #include "mbed.h" #include "rtos.h" #include "BaseUsbHost.h" #include "LogitechC270.h" #include "UvcCam.h" #include "UsbFlashDrive.h" #include "decodeMJPEG.h" #include "MyThread.h" #define IMAGE_BUF_SIZE (1024*8) #define INTERVAL_S 10 #define SHOT_N 5 #define BASE_PATH "usb" Serial pc(USBTX, USBRX); DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4); class captureJPEG : public MyThread, public decodeMJPEG { public: captureJPEG(BaseUvc* cam) { m_cam = cam; m_cam->setOnResult(this, &captureJPEG::callback_motion_jpeg); interval_t.start(); shot = 0; for(buf_size = IMAGE_BUF_SIZE; ; buf_size -= 128) { buf = new uint8_t[buf_size]; if (buf) { break; } } printf("%p buf size: %d\n", buf, buf_size); } int shot; Timer interval_t; protected: virtual void outputJPEG(uint8_t c, int status) { if (status == JPEG_START) { pos = 0; led2 = !led2; } if (pos < buf_size) { buf[pos++] = c; } if (status == JPEG_END) { led3 = !led3; if (interval_t.read_ms() > INTERVAL_S*1000) { interval_t.reset(); led4 = !led4; if (shot < SHOT_N) { char path[32]; snprintf(path, sizeof(path), "/%s/image%02d.jpg", BASE_PATH, shot); printf("%d %s %d bytes\n", shot, path, pos); FILE* fp = fopen(path, "wb"); if (fp) { fwrite(buf, pos, 1, fp); fclose(fp); } shot++; } } } } void callback_motion_jpeg(uint16_t frame, uint8_t* buf, int len) { inputPacket(buf, len); if (buf[1]&1) { // FID led1 = !led1; } if (buf[1]&2) { // EOF led2 = !led2; } } virtual void run() { while(true) { if (m_cam) { m_cam->poll(); } } } uint8_t* buf; int buf_size; int pos; BaseUvc* m_cam; }; int main() { pc.baud(921600); printf("%s\n", __FILE__); BaseUvc* cam = NULL; UsbFlashDrive* drive = NULL; BaseUsbHost* usbHost = new BaseUsbHost(); UsbHub* hub = new UsbHub(); for(int i = 1; i <= MAX_HUB_PORT; i++) { ControlEp* ctlEp = hub->GetPortEp(i); if (drive == NULL && UsbFlashDrive::check(ctlEp)) { drive = new UsbFlashDrive("usb", ctlEp); } if (cam == NULL && LogitechC270::check(ctlEp)) { cam = new LogitechC270(C270_160x120, _5FPS, ctlEp); } if (cam == NULL && UvcCam::check(ctlEp)) { cam = new UvcCam(UVC_MJPEG, UVC_160x120, _5FPS, ctlEp); } } if (cam == NULL) { error("UVC cam not found\n"); } if (drive == NULL) { error("USB flash drive not found\n"); } captureJPEG* capture = new captureJPEG(cam); printf("captureJPEG: %p %d\n", capture, sizeof(captureJPEG)); capture->set_stack(DEFAULT_STACK_SIZE+256); capture->start(); for(int n = 0; ; n++) { printf("%d captureJPEG stack used: %d/%d bytes, interval %d/%d %d/%d sec\n", n, capture->stack_used(), capture->stack_size(), capture->shot, SHOT_N, capture->interval_t.read_ms()/1000, INTERVAL_S); printf("CC:"); for(int i = 0; i < 16; i++) { printf(" %u", cam->report_cc_count[i]); } printf("\n"); printf("PS:"); for(int i = 0; i < 16; i++) { printf(" %u", cam->report_ps_cc_count[i]); } printf("\n"); Thread::wait(3000); } } #endif