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
Diff: example4_c270.cpp
- Revision:
- 3:2709bbf8baae
diff -r 697ebeb8336f -r 2709bbf8baae example4_c270.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/example4_c270.cpp Thu Oct 25 11:02:17 2012 +0000
@@ -0,0 +1,103 @@
+#if 1
+//
+// dump YCrCb
+// [Y0, Y1],
+// (Cr, Cb),
+//
+#include "mbed.h"
+#include "BaseJpegDecode.h"
+#include "uvc.h"
+#include "Terminal.h"
+
+// Logitech C270
+#define WIDTH 160
+#define HEIGHT 120
+
+#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);
+Terminal term(USBTX, USBRX);
+
+class Decode1 : public BaseJpegDecode {
+public:
+ int16_t m_y0[WIDTH/16*HEIGHT/8];
+ int16_t m_y1[WIDTH/16*HEIGHT/8];
+ int16_t m_cb[WIDTH/16*HEIGHT/8];
+ int16_t m_cr[WIDTH/16*HEIGHT/8];
+ virtual void outputDC(int mcu, int block, int value) {
+ if (mcu >= (WIDTH/16*HEIGHT/8)) {
+ return;
+ }
+ switch(block) { // 0-1:Y 2:Cb 3:Cr
+ case 0: m_y0[mcu] = value * qt[0][0]; break;
+ case 1: m_y1[mcu] = value * qt[0][0]; break;
+ case 2: m_cb[mcu] = value * qt[1][0]; break;
+ case 3: m_cr[mcu] = value * qt[1][0]; break;
+ }
+ }
+ virtual void outputAC(int mcu, int block, int scan, int value){};
+ virtual void outputMARK(uint8_t c){
+ if (c == 0xd9) { // EOI
+ led2 = !led2;
+ }
+ };
+};
+
+Decode1* decode = NULL;
+
+void callback_motion_jpeg(uint16_t frame, uint8_t* buf, int len)
+{
+ if (decode) {
+ decode->input(buf+12, len-12);
+ }
+ led1 = buf[1]&1; // FID
+}
+
+int main() {
+ term.baud(921600);
+ printf("%s\n", __FILE__);
+
+ decode = new Decode1;
+ ASSERT(decode);
+ uvc* cam = new uvc;
+ ASSERT(cam);
+ cam->SetImageSize(WIDTH, HEIGHT);
+ cam->SetFrameInterval(2000000); // 5.0fps
+ cam->setOnResult(callback_motion_jpeg);
+ ASSERT(cam->setup() >= 0);
+ term.cls();
+ while(1) {
+ int column = 0;
+ term.locate(0, column++);
+ term.printf("Y: qt:");
+ for(int i = 0; i < 16; i++) {
+ term.printf(" %d", decode->qt[0][i]);
+ }
+ term.printf("]");
+ for(int y = 0; y < HEIGHT/8; y++) {
+ term.locate(0, column++);
+ for(int x = 0; x < WIDTH/16; x++) {
+ int mcu = y*WIDTH/16+x;
+ term.printf("%+5d,%+5d,", decode->m_y0[mcu], decode->m_y1[mcu]);
+ cam->poll();
+ }
+ }
+ term.locate(0, column++);
+ term.printf("CbCr: [qt:");
+ for(int i = 0; i < 16; i++) {
+ term.printf(" %d", decode->qt[1][i]);
+ }
+ term.printf("]");
+ for(int y = 0; y < HEIGHT/8; y++) {
+ term.locate(0, column++);
+ for(int x = 0; x < WIDTH/16; x++) {
+ int mcu = y*WIDTH/16+x;
+ term.printf("%+5d,%+5d|", decode->m_cb[mcu], decode->m_cr[mcu]);
+ cam->poll();
+ }
+ }
+ cam->wait_ms(500);
+ led3 = !led3;
+ }
+}
+#endif
