Webcam Server.

Dependencies:   uvchost FatFileSystem mbed HTTPServer NetServicesMin

Committer:
va009039
Date:
Tue Aug 14 03:42:12 2012 +0000
Revision:
1:7a4f2c038803
Parent:
0:2b4ea8a138e5
supported LogitechC270 and Safari

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 1:7a4f2c038803 1 #include "WebcamServerConfig.h"
va009039 0:2b4ea8a138e5 2 #include "WebcamInput.h"
va009039 0:2b4ea8a138e5 3 #include "WebcamHandler.h"
va009039 1:7a4f2c038803 4 #include "myjpeg.h"
va009039 0:2b4ea8a138e5 5 //#define __DEBUG
va009039 0:2b4ea8a138e5 6 #include "mydbg.h"
va009039 0:2b4ea8a138e5 7
va009039 0:2b4ea8a138e5 8 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
va009039 0:2b4ea8a138e5 9
va009039 0:2b4ea8a138e5 10
va009039 0:2b4ea8a138e5 11 WebcamInput::WebcamInput(int cam)
va009039 0:2b4ea8a138e5 12 :m_seq(0),m_cam(cam)
va009039 0:2b4ea8a138e5 13 {
va009039 0:2b4ea8a138e5 14 DBG("%p cam=%d\n", this, cam);
va009039 0:2b4ea8a138e5 15 m_t.reset();
va009039 0:2b4ea8a138e5 16 m_t.start();
va009039 1:7a4f2c038803 17 m_size = IMAGE_SIZE;
va009039 1:7a4f2c038803 18 m_image_buf = new uint8_t[m_size];
va009039 0:2b4ea8a138e5 19 DBG_ASSERT(m_image_buf);
va009039 0:2b4ea8a138e5 20 }
va009039 0:2b4ea8a138e5 21
va009039 0:2b4ea8a138e5 22 void WebcamInput::input(uint16_t frame, uint8_t* buf, int len)
va009039 0:2b4ea8a138e5 23 {
va009039 0:2b4ea8a138e5 24 if (len <= 12) {
va009039 0:2b4ea8a138e5 25 return;
va009039 0:2b4ea8a138e5 26 }
va009039 0:2b4ea8a138e5 27 uint8_t* data = buf+12;
va009039 0:2b4ea8a138e5 28 int data_len = len - 12;
va009039 0:2b4ea8a138e5 29
va009039 0:2b4ea8a138e5 30 switch(m_seq) {
va009039 0:2b4ea8a138e5 31 case 0:
va009039 0:2b4ea8a138e5 32 if (m_t.read_ms() > INTERVAL_MS) {
va009039 0:2b4ea8a138e5 33 m_seq++;
va009039 0:2b4ea8a138e5 34 }
va009039 0:2b4ea8a138e5 35 break;
va009039 0:2b4ea8a138e5 36 case 1:
va009039 0:2b4ea8a138e5 37 if (!WebcamHandler::busy()) {
va009039 0:2b4ea8a138e5 38 m_seq++;
va009039 0:2b4ea8a138e5 39 }
va009039 0:2b4ea8a138e5 40 break;
va009039 0:2b4ea8a138e5 41 case 2:
va009039 0:2b4ea8a138e5 42 if ((buf[1]^m_bfh)&0x01) { // FID change
va009039 0:2b4ea8a138e5 43 m_pos = 0;
va009039 0:2b4ea8a138e5 44 if (m_cam == 0) {
va009039 0:2b4ea8a138e5 45 led3 = 1;
va009039 0:2b4ea8a138e5 46 } else {
va009039 0:2b4ea8a138e5 47 led4 = 1;
va009039 0:2b4ea8a138e5 48 }
va009039 0:2b4ea8a138e5 49 m_seq++;
va009039 0:2b4ea8a138e5 50 } else {
va009039 0:2b4ea8a138e5 51 break;
va009039 0:2b4ea8a138e5 52 }
va009039 0:2b4ea8a138e5 53 case 3:
va009039 0:2b4ea8a138e5 54 for(int i = 0; m_pos < IMAGE_SIZE && i < data_len; i++) {
va009039 0:2b4ea8a138e5 55 m_image_buf[m_pos++] = data[i];
va009039 0:2b4ea8a138e5 56 }
va009039 0:2b4ea8a138e5 57 if (buf[1]&0x02) { // EOF
va009039 1:7a4f2c038803 58 #ifdef UVC_INSERT_DHT
va009039 1:7a4f2c038803 59 myjpeg JPEG(m_image_buf, m_pos, m_size);
va009039 1:7a4f2c038803 60 JPEG.analytics();
va009039 1:7a4f2c038803 61 if (JPEG.DHT_pos == 0) {
va009039 1:7a4f2c038803 62 m_pos = JPEG.insertDHT();
va009039 1:7a4f2c038803 63 }
va009039 1:7a4f2c038803 64 #endif // UVC_INSERT_DHT
va009039 0:2b4ea8a138e5 65 WebcamHandler::setImage(m_image_buf, m_pos, m_cam);
va009039 0:2b4ea8a138e5 66 m_t.reset();
va009039 0:2b4ea8a138e5 67 m_seq = 0;
va009039 0:2b4ea8a138e5 68 if (m_cam == 0) {
va009039 0:2b4ea8a138e5 69 led3 = 0;
va009039 0:2b4ea8a138e5 70 } else {
va009039 0:2b4ea8a138e5 71 led4 = 0;
va009039 0:2b4ea8a138e5 72 }
va009039 0:2b4ea8a138e5 73 }
va009039 0:2b4ea8a138e5 74 break;
va009039 0:2b4ea8a138e5 75 }
va009039 0:2b4ea8a138e5 76 m_bfh = buf[1];
va009039 0:2b4ea8a138e5 77 if (m_cam == 0) {
va009039 0:2b4ea8a138e5 78 led1 = buf[1]&1; // FID
va009039 0:2b4ea8a138e5 79 } else {
va009039 0:2b4ea8a138e5 80 led2 = buf[1]&1; // FID
va009039 0:2b4ea8a138e5 81 }
va009039 0:2b4ea8a138e5 82 //led4 = WebcamHandler::busy();
va009039 0:2b4ea8a138e5 83 }