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: HttpServer_snapshot_mbed-os LWIPBP3595Interface_STA_for_mbed-os RomRamBlockDevice mbed-rpc
Fork of GR-Boards_WebCamera by
Diff: main.cpp
- Revision:
- 1:ebff3aeb40a0
- Parent:
- 0:c5448e500c90
- Child:
- 2:82a6d79d05f0
--- a/main.cpp Fri Aug 21 02:15:59 2015 +0000
+++ b/main.cpp Fri Oct 09 08:26:51 2015 +0000
@@ -51,8 +51,20 @@
static uint8_t FrameBuffer_Video[VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT]__attribute((section("NC_BSS"),aligned(16))); //16 bytes aligned!;
static volatile int32_t vsync_count = 0;
static volatile int32_t vfield_count = 1;
-static uint8_t JpegBuffer[1024 * 20]__attribute((section("NC_BSS"),aligned(8))); //8 bytes aligned!;
+static uint8_t JpegBuffer[2][1024 * 50]__attribute((section("NC_BSS"),aligned(8))); //8 bytes aligned!;
+static size_t jcu_encode_size[2];
static int image_change = 0;
+JPEG_Converter Jcu;
+static int jcu_buf_index_write = 0;
+static int jcu_buf_index_write_done = 0;
+static int jcu_buf_index_read = 0;
+static int jcu_encoding = 0;
+
+static void JcuEncodeCallBackFunc(JPEG_Converter::jpeg_conv_error_t err_code) {
+ jcu_buf_index_write_done = jcu_buf_index_write;
+ image_change = 1;
+ jcu_encoding = 0;
+}
static void IntCallbackFunc_Vfield(DisplayBase::int_type_t int_type) {
//Interrupt callback function
@@ -60,7 +72,31 @@
vfield_count = 0;
} else {
vfield_count = 1;
- image_change = 1;
+
+ JPEG_Converter::bitmap_buff_info_t bitmap_buff_info;
+ JPEG_Converter::encode_options_t encode_options;
+
+ bitmap_buff_info.width = PIXEL_HW;
+ bitmap_buff_info.height = PIXEL_VW;
+ bitmap_buff_info.format = JPEG_Converter::WR_RD_YCbCr422;
+ bitmap_buff_info.buffer_address = (void *)FrameBuffer_Video;
+
+ encode_options.encode_buff_size = sizeof(JpegBuffer[0]);
+ encode_options.p_EncodeCallBackFunc = &JcuEncodeCallBackFunc;
+
+ jcu_encoding = 1;
+ if (jcu_buf_index_read == jcu_buf_index_write) {
+ if (jcu_buf_index_write != 0) {
+ jcu_buf_index_write = 0;
+ } else {
+ jcu_buf_index_write = 1;
+ }
+ }
+ jcu_encode_size[jcu_buf_index_write] = 0;
+ if (Jcu.encode(&bitmap_buff_info, JpegBuffer[jcu_buf_index_write], &jcu_encode_size[jcu_buf_index_write], &encode_options) != JPEG_Converter::JPEG_CONV_OK) {
+ jcu_encode_size[jcu_buf_index_write] = 0;
+ jcu_encoding = 0;
+ }
}
}
@@ -209,31 +245,18 @@
}
static int snapshot_req(const char ** pp_data) {
- JPEG_Converter Jcu;
- size_t encode_size;
- JPEG_Converter::bitmap_buff_info_t bitmap_buff_info;
- JPEG_Converter::encode_options_t encode_options;
+ int encode_size;
- while ((vfield_count == 0) || (image_change == 0)) {
+ while ((jcu_encoding == 1) || (image_change == 0)) {
Thread::wait(1);
}
+ jcu_buf_index_read = jcu_buf_index_write_done;
image_change = 0;
- bitmap_buff_info.width = PIXEL_HW;
- bitmap_buff_info.height = PIXEL_VW;
- bitmap_buff_info.format = JPEG_Converter::WR_RD_YCbCr422;
- bitmap_buff_info.buffer_address = (void *)FrameBuffer_Video;
-
- encode_options.encode_buff_size = sizeof(JpegBuffer);
+ *pp_data = (const char *)JpegBuffer[jcu_buf_index_read];
+ encode_size = (int)jcu_encode_size[jcu_buf_index_read];
- if (Jcu.encode(&bitmap_buff_info, JpegBuffer, &encode_size, &encode_options) == JPEG_Converter::JPEG_CONV_OK) {
- *pp_data = (const char *)JpegBuffer;
- } else {
- *pp_data = NULL;
- encode_size = 0;
- }
-
- return (int)encode_size;
+ return encode_size;
}
static void TerminalWrite(Arguments* arg, Reply* r) {
@@ -279,8 +302,8 @@
RPCFunction rpcFunc(TerminalWrite, "TerminalWrite");
printf("EthernetInterface Setting up...\r\n");
- if (eth.init() != 0) { //for DHCP Server
-// if (eth.init("192.168.0.2","255.255.255.0","192.168.0.3") != 0) { //for Static IP Address (IPAddress, NetMasks, Gateway)
+// if (eth.init() != 0) { //for DHCP Server
+ if (eth.init("192.168.0.2","255.255.255.0","192.168.0.3") != 0) { //for Static IP Address (IPAddress, NetMasks, Gateway)
printf("EthernetInterface Initialize Error \r\n");
return -1;
}
