X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmaskengine.C;h=a8fd4acfec33b33674943ee3eafca5789b511fb4;hb=87141f1b454130848c34efdea9cf832d17463830;hp=9f2861feae44c6dd580ecfb04dda7a9c5384e217;hpb=dab459d8fcf93c377836bc30a1c4bc5505b79323;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/maskengine.C b/cinelerra-5.1/cinelerra/maskengine.C index 9f2861fe..a8fd4acf 100644 --- a/cinelerra-5.1/cinelerra/maskengine.C +++ b/cinelerra-5.1/cinelerra/maskengine.C @@ -63,77 +63,6 @@ MaskUnit::~MaskUnit() #define OVERSAMPLE 8 -#if 1 -// Bresenham's -void MaskUnit::draw_line_clamped(VFrame *frame, - int x1,int y1, int x2,int y2, unsigned char k) -{ - int w = frame->get_w(), h = frame->get_h(); - unsigned char **rows = (unsigned char**)frame->get_rows(); - int dx = x2-x1, dy = y2-y1; -//printf("MaskUnit::draw_line_clamped(%d,%d -> %d,%d, 0x%02x\n", x1,y1, x2,y2, k); - - int ax = 2*abs(dx), ay = 2*abs(dy); - - if( ax > ay ) { /* x dominant */ - if( dx == 0 ) return; - if( x1 > x2 ) { - int xx = x2; x2 = x1; x1 = xx; - int yy = y2; y2 = y1; y1 = yy; - } - if( x1 >= w || x2 < 0 ) return; - if( dx < 0 ) { dx = -dx; dy = -dy; } - int x = x1, y = y1, d = dx; - int sy = dy < 0 ? -1 : 1; - if( x1 < 0 ) { - double py = -(double)dy/dx * x1 + y1 + 0.5; - x = 0; y = py; - d = (py - y) * ay; - } - - for( int y0=-1;;) { - if( x >= w ) return; - if( y != y0 && y >= 0 && y < h ) { - y0 = y; - unsigned char *bp = rows[y] + x; - *bp = *bp == k ? 0 : k; - } - if( x == x2 ) return; - if( d < 0 ) { d += ax; y += sy; } - d -= ay; ++x; - } - } - else { /* y dominant */ - if( dy == 0 ) return; - if( y1 > y2 ) { - int xx = x2; x2 = x1; x1 = xx; - int yy = y2; y2 = y1; y1 = yy; - } - if( y1 >= h || y2 < 0 ) return; - if( dy < 0 ) { dx = -dx; dy = -dy; } - int x = x1, y = y1, d = dy; - int sx = dx < 0 ? -1 : 1; - if( y1 < 0 ) { - double px = -(double)dx/dy * y1 + x1 + 0.5; - x = px; y = 0; - d = (px - x) * ax; - } - - for(;;) { - if( y >= h ) return; - if( x >= 0 && x < w ) { - unsigned char *bp = rows[y] + x; - *bp = *bp == k ? 0 : k; - } - if( y == y2 ) return; - if( d < 0 ) { d += ay; x += sx; } - d -= ax; ++y; - } - } -} - -#else - void MaskUnit::draw_line_clamped(VFrame *frame, int x1, int y1, int x2, int y2, unsigned char k) { @@ -171,8 +100,6 @@ void MaskUnit::draw_line_clamped(VFrame *frame, } } -#endif - void MaskUnit::blur_strip(double *val_p, double *val_m, double *dst,