static inline int window_draw_overlay (zbar_window_t *w) { if(!w->overlay) return(0); if(w->overlay >= 1 && w->image && w->image->syms) { /* FIXME outline each symbol */ const zbar_symbol_t *sym = w->image->syms->head; for(; sym; sym = sym->next) { uint32_t color = ((sym->cache_count < 0) ? 4 : 2); if(sym->type == ZBAR_QRCODE) window_outline_symbol(w, color, sym); else { /* FIXME linear bbox broken */ point_t org = w->scaled_offset; int i; for(i = 0; i < sym->npts; i++) { point_t p = window_scale_pt(w, sym->pts[i]); p.x += org.x; p.y += org.y; if(p.x < 3) p.x = 3; else if(p.x > w->width - 4) p.x = w->width - 4; if(p.y < 3) p.y = 3; else if(p.y > w->height - 4) p.y = w->height - 4; _zbar_window_draw_marker(w, color, p); } } } } if(w->overlay >= 2) { /* calculate/display frame rate */ unsigned long _time; #if defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0 struct timespec abstime; clock_gettime(CLOCK_REALTIME, &abstime); _time = (abstime.tv_sec * 1000) + ((abstime.tv_nsec / 500000) + 1) / 2; #else struct timeval abstime; gettimeofday(&abstime, NULL); _time = (abstime.tv_sec * 1000) + ((abstime.tv_usec / 500) + 1) / 2; #endif point_t p = { -8, -1 }; char text[32]; if(w->time) { int avg = w->time_avg = (w->time_avg + _time - w->time) / 2; sprintf(text, "%d.%01d fps", 1000 / avg, (10000 / avg) % 10); _zbar_window_draw_text(w, 3, p, text); } w->time = _time; } return(0); }
static inline int window_draw_overlay (zbar_window_t *w) { if(!w->overlay) return(0); if(w->overlay >= 1 && w->image && w->image->syms) { /* FIXME outline each symbol */ const zbar_symbol_t *sym = w->image->syms->head; for(; sym; sym = sym->next) { uint32_t color = ((sym->cache_count < 0) ? 4 : 2); if(sym->type == ZBAR_QRCODE) window_outline_symbol(w, color, sym); else { /* FIXME linear bbox broken */ point_t org = w->scaled_offset; int i; for(i = 0; i < sym->npts; i++) { point_t p = window_scale_pt(w, sym->pts[i]); p.x += org.x; p.y += org.y; if(p.x < 3) p.x = 3; else if(p.x > w->width - 4) p.x = w->width - 4; if(p.y < 3) p.y = 3; else if(p.y > w->height - 4) p.y = w->height - 4; _zbar_window_draw_marker(w, color, p); } } } } if(w->overlay >= 2) { /* calculate/display frame rate */ unsigned long time = _zbar_timer_now(); if(w->time) { int avg = w->time_avg = (w->time_avg + time - w->time) / 2; point_t p = { -8, -1 }; char text[32]; sprintf(text, "%d.%01d fps", 1000 / avg, (10000 / avg) % 10); _zbar_window_draw_text(w, 3, p, text); } w->time = time; } return(0); }