X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Fmotion-hv%2Fmotion-hv.C;h=bb663c7dac05b0ec3b16299a4be8c49abbda698d;hb=b2eb290b3f6e5c233393017aa152e67c76243130;hp=ba5b5d198508571c8c15bd174e78c7f7e8469074;hpb=723142d62d61cde588e961426440f839ca9dcda9;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/motion-hv/motion-hv.C b/cinelerra-5.1/plugins/motion-hv/motion-hv.C index ba5b5d19..bb663c7d 100644 --- a/cinelerra-5.1/plugins/motion-hv/motion-hv.C +++ b/cinelerra-5.1/plugins/motion-hv/motion-hv.C @@ -332,7 +332,7 @@ void MotionHVMain::save_data(KeyFrame *keyframe) FileXML output; // cause data to be stored directly in text - output.set_shared_output(keyframe->get_data(), MESSAGESIZE); + output.set_shared_output(keyframe->xbuf); output.tag.set_title("MOTIONHV"); output.tag.set_property("BLOCK_COUNT", config.block_count); @@ -372,7 +372,7 @@ void MotionHVMain::read_data(KeyFrame *keyframe) { FileXML input; - input.set_shared_input(keyframe->get_data(), strlen(keyframe->get_data())); + input.set_shared_input(keyframe->xbuf); int result = 0; @@ -1281,118 +1281,35 @@ void MotionHVMain::draw_vectors(VFrame *frame) } - -void MotionHVMain::draw_pixel(VFrame *frame, int x, int y) +MotionHvVVFrame::MotionHvVVFrame(VFrame *vfrm, int n) + : VFrame(vfrm->get_data(), -1, vfrm->get_y()-vfrm->get_data(), + vfrm->get_u()-vfrm->get_data(), vfrm->get_v()-vfrm->get_data(), + vfrm->get_w(), vfrm->get_h(), vfrm->get_color_model(), + vfrm->get_bytes_per_line()) { - if(!(x >= 0 && y >= 0 && x < frame->get_w() && y < frame->get_h())) return; - -#define DRAW_PIXEL(x, y, components, do_yuv, max, type) \ -{ \ - type **rows = (type**)frame->get_rows(); \ - rows[y][x * components] = max - rows[y][x * components]; \ - if(!do_yuv) \ - { \ - rows[y][x * components + 1] = max - rows[y][x * components + 1]; \ - rows[y][x * components + 2] = max - rows[y][x * components + 2]; \ - } \ - else \ - { \ - rows[y][x * components + 1] = (max / 2 + 1) - rows[y][x * components + 1]; \ - rows[y][x * components + 2] = (max / 2 + 1) - rows[y][x * components + 2]; \ - } \ - if(components == 4) \ - rows[y][x * components + 3] = max; \ + this->n = n; } - - switch(frame->get_color_model()) - { - case BC_RGB888: - DRAW_PIXEL(x, y, 3, 0, 0xff, unsigned char); - break; - case BC_RGBA8888: - DRAW_PIXEL(x, y, 4, 0, 0xff, unsigned char); - break; - case BC_RGB_FLOAT: - DRAW_PIXEL(x, y, 3, 0, 1.0, float); - break; - case BC_RGBA_FLOAT: - DRAW_PIXEL(x, y, 4, 0, 1.0, float); - break; - case BC_YUV888: - DRAW_PIXEL(x, y, 3, 1, 0xff, unsigned char); - break; - case BC_YUVA8888: - DRAW_PIXEL(x, y, 4, 1, 0xff, unsigned char); - break; - case BC_RGB161616: - DRAW_PIXEL(x, y, 3, 0, 0xffff, uint16_t); - break; - case BC_YUV161616: - DRAW_PIXEL(x, y, 3, 1, 0xffff, uint16_t); - break; - case BC_RGBA16161616: - DRAW_PIXEL(x, y, 4, 0, 0xffff, uint16_t); - break; - case BC_YUVA16161616: - DRAW_PIXEL(x, y, 4, 1, 0xffff, uint16_t); - break; +int MotionHvVVFrame::draw_pixel(int x, int y) +{ + VFrame::draw_pixel(x+0, y+0); + for( int i=1; i h) - { -// Flip coordinates so x1 < x2 - if(x2 < x1) - { - y2 ^= y1; - y1 ^= y2; - y2 ^= y1; - x1 ^= x2; - x2 ^= x1; - x1 ^= x2; - } - int numerator = y2 - y1; - int denominator = x2 - x1; - for(int i = x1; i < x2; i++) - { - int y = y1 + (int64_t)(i - x1) * (int64_t)numerator / (int64_t)denominator; - draw_pixel(frame, i, y); - } - } - else - { -// Flip coordinates so y1 < y2 - if(y2 < y1) - { - y2 ^= y1; - y1 ^= y2; - y2 ^= y1; - x1 ^= x2; - x2 ^= x1; - x1 ^= x2; - } - int numerator = x2 - x1; - int denominator = y2 - y1; - for(int i = y1; i < y2; i++) - { - int x = x1 + (int64_t)(i - y1) * (int64_t)numerator / (int64_t)denominator; - draw_pixel(frame, x, i); - } - } -//printf("MotionHVMain::draw_line 2\n"); + int iw = frame->get_w(), ih = frame->get_h(); + int mx = iw > ih ? iw : ih; + int n = mx/800 + 1; + MotionHvVVFrame vfrm(frame, n); + vfrm.set_pixel_color(WHITE); + int m = 2; while( m < n ) m <<= 1; + vfrm.set_stiple(2*m); + vfrm.draw_line(x1,y1, x2,y2); } #define ARROW_SIZE 10