X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Fvideoscope%2Fvideoscope.C;h=1b7322df0091dcafe23302b62b2dde53b1e03f28;hb=e1e5dee5935f9f416a31014906a7e0dfacb10c02;hp=76b7cf720740f5d9a1116a79b71d0c608c6ae664;hpb=e7751964a70df32d5e34ad4052db892b1e1ff0e0;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/plugins/videoscope/videoscope.C b/cinelerra-5.1/plugins/videoscope/videoscope.C index 76b7cf72..1b7322df 100644 --- a/cinelerra-5.1/plugins/videoscope/videoscope.C +++ b/cinelerra-5.1/plugins/videoscope/videoscope.C @@ -356,193 +356,111 @@ VideoScopeUnit::VideoScopeUnit(VideoScopeEffect *plugin, } -#define INTENSITY(p) ((unsigned int)(((p)[0]) * 77+ \ - ((p)[1] * 150) + \ - ((p)[2] * 29)) >> 8) - - -static void draw_point(unsigned char **rows, - int color_model, - int x, - int y, - int r, - int g, - int b) +#define INTENSITY(p) ((unsigned int)(((p)[0]) * 77+ ((p)[1] * 150) + ((p)[2] * 29)) >> 8) + + +static void draw_point(unsigned char **rows, int color_model, + int x, int y, int r, int g, int b) { - switch(color_model) - { - case BC_BGR8888: - { - unsigned char *pixel = rows[y] + x * 4; - pixel[0] = b; - pixel[1] = g; - pixel[2] = r; - break; - } - case BC_BGR888: - break; - case BC_RGB565: - { - unsigned char *pixel = rows[y] + x * 2; - pixel[0] = (r & 0xf8) | (g >> 5); - pixel[1] = ((g & 0xfc) << 5) | (b >> 3); - break; - } - case BC_BGR565: - break; - case BC_RGB8: - break; + switch( color_model ) { + case BC_BGR8888: { + unsigned char *pixel = rows[y] + x * 4; + pixel[0] = b; pixel[1] = g; pixel[2] = r; + break; + } + case BC_BGR888: break; + case BC_RGB565: { + unsigned char *pixel = rows[y] + x * 2; + pixel[0] = (r & 0xf8) | (g >> 5); + pixel[1] = ((g & 0xfc) << 5) | (b >> 3); + break; + } + case BC_BGR565: break; + case BC_RGB8: break; } } - - -#define VIDEOSCOPE(type, temp_type, max, components, use_yuv) \ -{ \ - for(int i = pkg->row1; i < pkg->row2; i++) \ - { \ +#define VIDEOSCOPE(type, temp_type, max, components, use_yuv) { \ + for( int i=pkg->row1; irow2; ++i ) { \ type *in_row = (type*)plugin->input->get_rows()[i]; \ - for(int j = 0; j < w; j++) \ - { \ + for( int j=0; j= 0 && x < waveform_w / 3 && y >= 0 && y < waveform_h) \ - draw_point(waveform_rows, \ - waveform_cmodel, \ - x, \ - y, \ - 0xff, \ - 0x0, \ - 0x0); \ - \ -/* green */ \ - x = waveform_w / 3 + j * waveform_w / w / 3; \ + draw_point(waveform_rows, waveform_cmodel, x, y, \ + 0xff, 0x00, 0x00); \ + x = waveform_w / 3 + j * waveform_w / w / 3; /* green */ \ y = waveform_h - (int)(((float)g / max - FLOAT_MIN) / \ - (FLOAT_MAX - FLOAT_MIN) * \ - waveform_h); \ + (FLOAT_MAX - FLOAT_MIN) * waveform_h); \ if(x >= waveform_w / 3 && x < waveform_w * 2 / 3 && \ y >= 0 && y < waveform_h) \ - draw_point(waveform_rows, \ - waveform_cmodel, \ - x, \ - y, \ - 0x0, \ - 0xff, \ - 0x0); \ - \ -/* blue */ \ - x = waveform_w * 2 / 3 + j * waveform_w / w / 3; \ + draw_point(waveform_rows, waveform_cmodel, x, y, \ + 0x00, 0xff, 0x00); \ + x = waveform_w * 2 / 3 + j * waveform_w / w / 3; /* blue */ \ y = waveform_h - (int)(((float)b / max - FLOAT_MIN) / \ - (FLOAT_MAX - FLOAT_MIN) * \ - waveform_h); \ + (FLOAT_MAX - FLOAT_MIN) * waveform_h); \ if(x >= waveform_w * 2 / 3 && x < waveform_w && \ y >= 0 && y < waveform_h) \ - draw_point(waveform_rows, \ - waveform_cmodel, \ - x, \ - y, \ - 0x0, \ - 0x0, \ - 0xff); \ + draw_point(waveform_rows, waveform_cmodel, x, y, \ + 0x00, 0x00, 0xff); \ } \ - else \ - { \ + else { \ if(!use_yuv) intensity = v; \ intensity = (intensity - FLOAT_MIN) / (FLOAT_MAX - FLOAT_MIN) * \ waveform_h; \ int y = waveform_h - (int)intensity; \ int x = j * waveform_w / w; \ if(x >= 0 && x < waveform_w && y >= 0 && y < waveform_h) \ - draw_point(waveform_rows, \ - waveform_cmodel, \ - x, \ - y, \ - 0xff, \ - 0xff, \ - 0xff); \ + draw_point(waveform_rows, waveform_cmodel, x, y, \ + 0xff, 0xff, 0xff); \ } \ - \ /* Calculate vectorscope */ \ float adjacent = cos((h + 90) / 360 * 2 * M_PI); \ float opposite = sin((h + 90) / 360 * 2 * M_PI); \ int x = (int)(vector_w / 2 + \ adjacent * (s - FLOAT_MIN) / (FLOAT_MAX - FLOAT_MIN) * radius); \ - \ int y = (int)(vector_h / 2 - \ opposite * (s - FLOAT_MIN) / (FLOAT_MAX - FLOAT_MIN) * radius); \ - \ - \ CLAMP(x, 0, vector_w - 1); \ CLAMP(y, 0, vector_h - 1); \ /* Get color with full saturation & value */ \ float r_f, g_f, b_f; \ - HSV::hsv_to_rgb(r_f, \ - g_f, \ - b_f, \ - h, \ - s, \ - 1); \ + HSV::hsv_to_rgb(r_f, g_f, b_f, h, s, 1); \ r = (int)(r_f * 255); \ g = (int)(g_f * 255); \ b = (int)(b_f * 255); \ - \ - /* float */ \ - if(sizeof(type) == 4) \ - { \ + if(sizeof(type) == 4) { /* float */ \ r = CLIP(r, 0, 0xff); \ g = CLIP(g, 0, 0xff); \ b = CLIP(b, 0, 0xff); \ } \ - \ - draw_point(vector_rows, \ - vector_cmodel, \ - x, \ - y, \ - (int)r, \ - (int)g, \ - (int)b); \ - \ + draw_point(vector_rows, vector_cmodel, x, y, \ + (int)r, (int)g, (int)b); \ } \ } \ } @@ -555,64 +473,58 @@ void VideoScopeUnit::process_package(LoadPackage *package) // int h = plugin->input->get_h(); int waveform_h = window->wave_h; int waveform_w = window->wave_w; - int waveform_cmodel = window->waveform_bitmap->get_color_model(); - unsigned char **waveform_rows = window->waveform_bitmap->get_row_pointers(); - int vector_h = window->vector_bitmap->get_h(); - int vector_w = window->vector_bitmap->get_w(); - int vector_cmodel = window->vector_bitmap->get_color_model(); - unsigned char **vector_rows = window->vector_bitmap->get_row_pointers(); + int waveform_cmodel = window->waveform_vframe->get_color_model(); + unsigned char **waveform_rows = window->waveform_vframe->get_rows(); + int vector_h = window->vector_vframe->get_h(); + int vector_w = window->vector_vframe->get_w(); + int vector_cmodel = window->vector_vframe->get_color_model(); + unsigned char **vector_rows = window->vector_vframe->get_rows(); float radius = MIN(vector_w / 2, vector_h / 2); int parade = 1; - switch(plugin->input->get_color_model()) - { - case BC_RGB888: - VIDEOSCOPE(unsigned char, int, 0xff, 3, 0) - break; + switch( plugin->input->get_color_model() ) { + case BC_RGB888: + VIDEOSCOPE(unsigned char, int, 0xff, 3, 0) + break; - case BC_RGB_FLOAT: - VIDEOSCOPE(float, float, 1, 3, 0) - break; + case BC_RGB_FLOAT: + VIDEOSCOPE(float, float, 1, 3, 0) + break; - case BC_YUV888: - VIDEOSCOPE(unsigned char, int, 0xff, 3, 1) - break; + case BC_YUV888: + VIDEOSCOPE(unsigned char, int, 0xff, 3, 1) + break; - case BC_RGB161616: - VIDEOSCOPE(uint16_t, int, 0xffff, 3, 0) - break; + case BC_RGB161616: + VIDEOSCOPE(uint16_t, int, 0xffff, 3, 0) + break; - case BC_YUV161616: - VIDEOSCOPE(uint16_t, int, 0xffff, 3, 1) - break; + case BC_YUV161616: + VIDEOSCOPE(uint16_t, int, 0xffff, 3, 1) + break; - case BC_RGBA8888: - VIDEOSCOPE(unsigned char, int, 0xff, 4, 0) - break; + case BC_RGBA8888: + VIDEOSCOPE(unsigned char, int, 0xff, 4, 0) + break; - case BC_RGBA_FLOAT: - VIDEOSCOPE(float, float, 1, 4, 0) - break; + case BC_RGBA_FLOAT: + VIDEOSCOPE(float, float, 1, 4, 0) + break; - case BC_YUVA8888: - VIDEOSCOPE(unsigned char, int, 0xff, 4, 1) - break; + case BC_YUVA8888: + VIDEOSCOPE(unsigned char, int, 0xff, 4, 1) + break; - case BC_RGBA16161616: - VIDEOSCOPE(uint16_t, int, 0xffff, 4, 0) - break; + case BC_RGBA16161616: + VIDEOSCOPE(uint16_t, int, 0xffff, 4, 0) + break; - case BC_YUVA16161616: - VIDEOSCOPE(uint16_t, int, 0xffff, 4, 1) - break; + case BC_YUVA16161616: + VIDEOSCOPE(uint16_t, int, 0xffff, 4, 1) + break; } } - - - - - VideoScopeEngine::VideoScopeEngine(VideoScopeEffect *plugin, int cpus) : LoadServer(cpus, cpus) {