mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Allocate kpts until GC is almost out of memory
* Keep allocating keypoints until GC is out of memory.
This commit is contained in:
parent
5ff5419bf1
commit
1b27383c9d
@ -2,10 +2,10 @@
|
|||||||
#include "imlib.h"
|
#include "imlib.h"
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
#include "fb_alloc.h"
|
#include "fb_alloc.h"
|
||||||
|
#include "gc.h"
|
||||||
|
|
||||||
#define PATTERN_SCALE (22)
|
#define PATTERN_SCALE (22)
|
||||||
#define MAX_CORNERS (1500) // allocated on fb
|
#define MAX_CORNERS (1500) // allocated on fb
|
||||||
#define MAX_KEYPOINTS (200) // ~17KBs
|
|
||||||
#define Compare(X, Y) ((X)>=(Y))
|
#define Compare(X, Y) ((X)>=(Y))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -67,6 +67,8 @@ void fast_detect(image_t *image, array_t *keypoints, int threshold, rectangle_t
|
|||||||
|
|
||||||
static void nonmax_suppression(corner_t *corners, int num_corners, array_t *keypoints)
|
static void nonmax_suppression(corner_t *corners, int num_corners, array_t *keypoints)
|
||||||
{
|
{
|
||||||
|
gc_info_t info;
|
||||||
|
|
||||||
int last_row;
|
int last_row;
|
||||||
int* row_start;
|
int* row_start;
|
||||||
const int sz = num_corners;
|
const int sz = num_corners;
|
||||||
@ -145,12 +147,20 @@ static void nonmax_suppression(corner_t *corners, int num_corners, array_t *keyp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
array_push_back(keypoints, alloc_keypoint(pos.x, pos.y));
|
gc_info(&info);
|
||||||
|
#define MIN_MEM (2*1024)
|
||||||
// Do not add more than max keypoints
|
// Allocate keypoints until we're almost out of memory
|
||||||
if (array_length(keypoints) == MAX_KEYPOINTS) {
|
if (info.free < MIN_MEM) {
|
||||||
break;
|
// Try collecting memory
|
||||||
|
gc_collect();
|
||||||
|
// If it didn't work break
|
||||||
|
gc_info(&info);
|
||||||
|
if (info.free < MIN_MEM) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
#undef MIN_MEM
|
||||||
|
array_push_back(keypoints, alloc_keypoint(pos.x, pos.y));
|
||||||
nonmax:
|
nonmax:
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user