From: Hector Martin Date: Sat, 12 Mar 2011 16:26:10 +0000 (+0100) Subject: Add icoord typedef for tracer, clean up stuff X-Git-Url: https://gitweb.aptx.org/?a=commitdiff_plain;h=d357f68b1da034caef2bad5645156d40be565f09;p=openlase.git Add icoord typedef for tracer, clean up stuff --- diff --git a/tools/trace.c b/tools/trace.c index cf82c23..8f5bcc0 100644 --- a/tools/trace.c +++ b/tools/trace.c @@ -58,10 +58,6 @@ struct OLTraceCtx { unsigned int pb_size; }; -#define ABS(a) ((a)<0?(-(a)):(a)) - -#define OVERDRAW 8 - //#define DEBUG #ifdef DEBUG @@ -76,13 +72,13 @@ static const int tdy[8] = { 0, -1, -1, -1, 0, 1, 1, 1 }; static const int tdx2[16] = { 2, 2, 2, 1, 0, -1, -2, -2, -2, -2, -2, -1, 0, 1, 2, 2 }; static const int tdy2[16] = { 0, -1, -2, -2, -2, -2, -2, -1, 0, 1, 2, 2, 2, 2, 2, 1 }; -static inline void add_bufpoint(OLTraceCtx *ctx, uint32_t x, uint32_t y) +static inline void add_bufpoint(OLTraceCtx *ctx, icoord x, icoord y) { ctx->pbp->x = x; ctx->pbp->y = y; ctx->pbp++; if (ctx->pbp == ctx->pb_end) { - int cur = ctx->pbp - ctx->pb; + unsigned int cur = ctx->pbp - ctx->pb; ctx->pb_size *= 2; ctx->pb = realloc(ctx->pb, ctx->pb_size * sizeof(*ctx->pb)); ctx->pbp = ctx->pb + cur; @@ -90,13 +86,13 @@ static inline void add_bufpoint(OLTraceCtx *ctx, uint32_t x, uint32_t y) } } -static inline void add_startpoint(OLTraceCtx *ctx, uint32_t x, uint32_t y) +static inline void add_startpoint(OLTraceCtx *ctx, icoord x, icoord y) { ctx->sbp->x = x; ctx->sbp->y = y; ctx->sbp++; if (ctx->sbp == ctx->sb_end) { - int cur = ctx->sbp - ctx->sb; + unsigned int cur = ctx->sbp - ctx->sb; ctx->sb_size *= 2; ctx->sb = realloc(ctx->sb, ctx->sb_size * sizeof(*ctx->sb)); ctx->sbp = ctx->sb + cur; @@ -104,11 +100,12 @@ static inline void add_startpoint(OLTraceCtx *ctx, uint32_t x, uint32_t y) } } -static int trace_pixels(OLTraceCtx *ctx, uint16_t *buf, int s, int output, uint32_t *cx, uint32_t *cy, uint16_t flag) +static int trace_pixels(OLTraceCtx *ctx, uint16_t *buf, int output, icoord *cx, icoord *cy, uint16_t flag) { - unsigned int x = *cx; - unsigned int y = *cy; - int iters = 0; + icoord x = *cx; + icoord y = *cy; + icoord s = ctx->p.width; + unsigned int iters = 0; int start = 1; #ifdef DEBUG if (decimate != -1) { @@ -116,11 +113,11 @@ static int trace_pixels(OLTraceCtx *ctx, uint16_t *buf, int s, int output, uint3 pc %= 160; } #endif - int lidx = 0; - int dir = 0; + unsigned int lidx = 0; + unsigned int dir = 0; while (1) { - int idx = y*s+x; + unsigned int idx = y*s+x; if (output) add_bufpoint(ctx, x, y); iters++; @@ -189,7 +186,7 @@ static int trace_pixels(OLTraceCtx *ctx, uint16_t *buf, int s, int output, uint3 // when moving diagonally, clear out some adjacent pixels // this deals with double-thickness diagonals if (dir & 1) { - int adir = (dir + 1) % 8; + unsigned int adir = (dir + 1) % 8; buf[idx+tdx[adir]+s*tdy[adir]] &= ~flag; adir = (dir + 7) % 8; buf[idx+tdx[adir]+s*tdy[adir]] &= ~flag; @@ -260,7 +257,7 @@ void olTraceDeinit(OLTraceCtx *ctx) static void find_edges_thresh(OLTraceCtx *ctx, uint8_t *src, unsigned int stride) { unsigned int thresh = ctx->p.threshold; - uint32_t x, y, w, h; + icoord x, y, w, h; w = ctx->p.width; h = ctx->p.height; @@ -294,11 +291,10 @@ static void find_edges_thresh(OLTraceCtx *ctx, uint8_t *src, unsigned int stride int olTrace(OLTraceCtx *ctx, uint8_t *src, unsigned int stride, OLTraceResult *result) { - uint32_t x, y; - int i; + icoord x, y; unsigned int objects = 0; - int w = ctx->p.width; - int h = ctx->p.height; + icoord w = ctx->p.width; + icoord h = ctx->p.height; memset(ctx->tracebuf, 0, w*h*2); #ifdef DEBUG @@ -315,16 +311,16 @@ int olTrace(OLTraceCtx *ctx, uint8_t *src, unsigned int stride, OLTraceResult *r x = ps->x; y = ps->y; ps++; - int flg = 1; + uint16_t flg = 1; while (ctx->tracebuf[y*w+x] & 0x8000) { - uint32_t tx = x, ty = y; + icoord tx = x, ty = y; if (flg != 64) flg <<= 1; - trace_pixels(ctx, ctx->tracebuf, w, 0, &tx, &ty, flg); + trace_pixels(ctx, ctx->tracebuf, 0, &tx, &ty, flg); #ifdef DEBUG - uint32_t sx = tx, sy = ty; + icoord sx = tx, sy = ty; #endif - if (trace_pixels(ctx, ctx->tracebuf, w, 1, &tx, &ty, 0xFFFF)) { + if (trace_pixels(ctx, ctx->tracebuf, 1, &tx, &ty, 0xFFFF)) { ctx->pbp[-1].x |= 1<<31; objects++; } diff --git a/tools/trace.h b/tools/trace.h index c8fb189..949eefc 100644 --- a/tools/trace.h +++ b/tools/trace.h @@ -22,6 +22,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA typedef struct OLTraceCtx OLTraceCtx; +typedef uint32_t icoord; + typedef enum { OL_TRACE_THRESHOLD, OL_TRACE_CANNY @@ -29,13 +31,13 @@ typedef enum { typedef struct { OLTraceMode mode; - unsigned int width, height; + icoord width, height; float sigma; unsigned int threshold; } OLTraceParams; typedef struct { - uint32_t x, y; + icoord x, y; } OLTracePoint; typedef struct { @@ -51,7 +53,7 @@ typedef struct { int olTraceInit(OLTraceCtx **ctx, OLTraceParams *params); int olTraceReInit(OLTraceCtx **ctx, OLTraceParams *params); -int olTrace(OLTraceCtx *ctx, uint8_t *src, unsigned int stride, OLTraceResult *result); +int olTrace(OLTraceCtx *ctx, uint8_t *src, icoord stride, OLTraceResult *result); void olTraceFree(OLTraceResult *result); void olTraceDeinit(OLTraceCtx *ctx);