diff --git a/sw/airborne/modules/computer_vision/colorfilter.c b/sw/airborne/modules/computer_vision/colorfilter.c index 0e4b6a0f59..6bd3086df8 100644 --- a/sw/airborne/modules/computer_vision/colorfilter.c +++ b/sw/airborne/modules/computer_vision/colorfilter.c @@ -41,8 +41,8 @@ uint8_t color_cr_max = 255; int color_count = 0; // Function -bool_t colorfilter_func(struct image_t* img); -bool_t colorfilter_func(struct image_t* img) +struct image_t* colorfilter_func(struct image_t* img); +struct image_t* colorfilter_func(struct image_t* img) { // Filter color_count = image_yuv422_colorfilt(img,img, @@ -51,7 +51,7 @@ bool_t colorfilter_func(struct image_t* img) color_cr_min,color_cr_max ); - return FALSE; + return img; // Colorfilter did not make a new image } void colorfilter_init(void) diff --git a/sw/airborne/modules/computer_vision/cv.c b/sw/airborne/modules/computer_vision/cv.c index a18ad02ced..b54cecfca5 100644 --- a/sw/airborne/modules/computer_vision/cv.c +++ b/sw/airborne/modules/computer_vision/cv.c @@ -42,7 +42,12 @@ void cv_add(cvFunction func) void cv_run(struct image_t *img) { + struct image_t* temp_image = img; for (int i = 0; i < cv_func_cnt; i++) { - cv_func[i](img); + struct image_t* new_image = cv_func[i](temp_image); + if (new_image != 0) + { + temp_image = new_image; + } } } diff --git a/sw/airborne/modules/computer_vision/cv.h b/sw/airborne/modules/computer_vision/cv.h index 4ac6d34471..ce69d899d8 100644 --- a/sw/airborne/modules/computer_vision/cv.h +++ b/sw/airborne/modules/computer_vision/cv.h @@ -32,7 +32,7 @@ #include "std.h" #include "lib/vision/image.h" -typedef bool_t (*cvFunction)(struct image_t *img); +typedef struct image_t* (*cvFunction)(struct image_t *img); extern void cv_add(cvFunction func); extern void cv_run(struct image_t *img); diff --git a/sw/airborne/modules/computer_vision/cv_blob_locator.c b/sw/airborne/modules/computer_vision/cv_blob_locator.c index 12d8b7d091..4b1ad49d45 100644 --- a/sw/airborne/modules/computer_vision/cv_blob_locator.c +++ b/sw/airborne/modules/computer_vision/cv_blob_locator.c @@ -122,7 +122,7 @@ bool_t cv_blob_locator_func(struct image_t *img); bool_t cv_blob_locator_func(struct image_t *img) { if (!blob_enabled) - return FALSE; + return 0; // Color Filter @@ -209,7 +209,7 @@ bool_t cv_blob_locator_func(struct image_t *img) { image_free(&dst); - return FALSE; + return 0; // No new image is available for follow up modules } #include "modules/computer_vision/cv_georeference.h" diff --git a/sw/airborne/modules/computer_vision/detect_window.c b/sw/airborne/modules/computer_vision/detect_window.c index f798e13c5a..0101849d63 100644 --- a/sw/airborne/modules/computer_vision/detect_window.c +++ b/sw/airborne/modules/computer_vision/detect_window.c @@ -53,7 +53,7 @@ extern bool_t detect_window(struct image_t *img) printf("Response = %d\n", response); image_free(&gray); - return 1; + return 0; // No new image was created } diff --git a/sw/airborne/modules/computer_vision/qrcode/qr_code.c b/sw/airborne/modules/computer_vision/qrcode/qr_code.c index 61c8b884bc..41917da9c3 100644 --- a/sw/airborne/modules/computer_vision/qrcode/qr_code.c +++ b/sw/airborne/modules/computer_vision/qrcode/qr_code.c @@ -41,7 +41,7 @@ void qrcode_init(void) zbar_image_scanner_t *scanner = 0; -bool_t qrscan(struct image_t *img) +struct image_t* qrscan(struct image_t *img) { int i, j; @@ -98,4 +98,6 @@ bool_t qrscan(struct image_t *img) // clean up zbar_image_destroy(image); //zbar_image_scanner_destroy(scanner); + + return 0; // QRCode is not returning a new image. } diff --git a/sw/airborne/modules/computer_vision/viewvideo.c b/sw/airborne/modules/computer_vision/viewvideo.c index 8062987e49..656f9d3663 100644 --- a/sw/airborne/modules/computer_vision/viewvideo.c +++ b/sw/airborne/modules/computer_vision/viewvideo.c @@ -189,7 +189,7 @@ bool_t viewvideo_function(struct image_t *img) // Free all buffers image_free(&img_jpeg); image_free(&img_small); - return TRUE; + return 0; // No new images were created } /**