Fixed some bugs when receiving large data.
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
#include "system.h"
|
||||
#include "pixy.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
bool pixy_connected = false;
|
||||
|
||||
@@ -113,10 +113,10 @@ int pixy_frame_test() {
|
||||
&videodata, // pointer to mem address for returned frame
|
||||
END_IN_ARGS);
|
||||
|
||||
|
||||
if(return_value==0) {
|
||||
return_value = renderBA81(renderflags,xwidth,ywidth,size,videodata);
|
||||
}
|
||||
|
||||
return return_value;
|
||||
}
|
||||
|
||||
@@ -171,8 +171,22 @@ int renderBA81(uint8_t renderFlags, uint16_t width, uint16_t height, uint32_t fr
|
||||
// don't render top and bottom rows, and left and rightmost columns because of color
|
||||
// interpolation
|
||||
//uint32_t decodedimage[(width-2)*(height-2)];
|
||||
uint16_t decodedimage[(width-2)*(height-2)];
|
||||
uint16_t* decodedimage = malloc(sizeof(uint16_t)*(width-2)*(height-2));
|
||||
|
||||
if(decodedimage==NULL) { //not enough free space to decode image in memory
|
||||
//decode & render image pixel by pixel
|
||||
uint16_t* line = decodedimage;
|
||||
for (y=1; y<height-1; y++)
|
||||
{
|
||||
frame++;
|
||||
for (x=1; x<width-1; x++, frame++)
|
||||
{
|
||||
interpolateBayer(width, x, y, frame, &r, &g, &b);
|
||||
tft_draw_pixel(x-1,y-1,RGB(r,g,b));
|
||||
}
|
||||
frame++;
|
||||
}
|
||||
} else { //enough space
|
||||
uint16_t* line = decodedimage;
|
||||
for (y=1; y<height-1; y++)
|
||||
{
|
||||
@@ -189,6 +203,9 @@ int renderBA81(uint8_t renderFlags, uint16_t width, uint16_t height, uint32_t fr
|
||||
|
||||
tft_draw_bitmap_unscaled(0,0,width-2,height-2,decodedimage);
|
||||
|
||||
free(decodedimage);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
bool ll_system_init();
|
||||
void ll_system_delay(uint32_t msec);
|
||||
void ll_system_process();
|
||||
void ll_system_toggle_led();
|
||||
|
||||
@@ -13,3 +13,7 @@ void system_delay(uint32_t msec) {
|
||||
void system_process() {
|
||||
ll_system_process();
|
||||
}
|
||||
|
||||
void system_toggle_led() {
|
||||
ll_system_toggle_led();
|
||||
}
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
bool system_init();
|
||||
void system_delay(uint32_t msec);
|
||||
void system_process();
|
||||
void system_toggle_led();
|
||||
|
||||
@@ -856,6 +856,10 @@ int Chirp::realloc(uint32_t min)
|
||||
min = m_bufSize+CRP_BUFSIZE;
|
||||
else
|
||||
min += CRP_BUFSIZE;
|
||||
|
||||
if(min==m_bufSize)
|
||||
return CRP_RES_OK;
|
||||
|
||||
uint8_t *newbuf = new (std::nothrow) uint8_t[min];
|
||||
if (newbuf==NULL)
|
||||
return CRP_RES_ERROR_MEMORY;
|
||||
|
||||
@@ -64,3 +64,8 @@ void ll_system_process() {
|
||||
void ll_system_delay(uint32_t msec) {
|
||||
USB_OTG_BSP_mDelay(msec);
|
||||
}
|
||||
|
||||
|
||||
void ll_system_toggle_led() {
|
||||
STM_EVAL_LEDToggle(LED6);
|
||||
}
|
||||
|
||||
@@ -111,6 +111,7 @@ usblink_open__close_and_exit:
|
||||
|
||||
usblink_open__exit:
|
||||
log("pixydebug: USBLink::open() returned %d\n", return_value);
|
||||
usleep(100* 1000); //let pixy init pass
|
||||
|
||||
return return_value;
|
||||
}
|
||||
|
||||
@@ -17,3 +17,6 @@ void ll_system_process() {
|
||||
QApplication::processEvents();
|
||||
}
|
||||
|
||||
void ll_system_toggle_led() {
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user