/*
* CINELERRA
* Copyright (C) 2012 Adam Williams <broadcast at earthling dot net>
- *
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ *
*/
#include "bcdisplayinfo.h"
#include "language.h"
#include "loadbalance.h"
#include "playback3d.h"
-#include "cicolors.h"
+#include "bccolors.h"
#include "pluginvclient.h"
#include "vframe.h"
ChromaKeyConfig::ChromaKeyConfig ()
+{
+ reset();
+}
+
+void ChromaKeyConfig::reset()
+
{
red = 0.0;
green = 1.0;
ChromaKeyWindow::ChromaKeyWindow (ChromaKeyHSV * plugin)
- : PluginClientWindow(plugin,
- 400,
- 450,
- 400,
- 450,
+ : PluginClientWindow(plugin,
+ 400,
+ 450,
+ 400,
+ 450,
0)
{
this->plugin = plugin;
add_subwindow (use_colorpicker =
new ChromaKeyUseColorPicker (plugin, this, x, y));
y += use_colorpicker->get_h() + 10;
+
+ add_subwindow (new ChromaKeyReset (plugin, this, x2+240, y));
add_subwindow (show_mask = new ChromaKeyShowMask (plugin, x2, y));
y += show_mask->get_h() + 5;
sample->flash ();
}
+void ChromaKeyWindow::done_event(int result)
+{
+ color_thread->close_window();
+}
ChromaKeyColor::ChromaKeyColor (ChromaKeyHSV * plugin,
return 1;
}
+ChromaKeyReset::ChromaKeyReset (ChromaKeyHSV *plugin, ChromaKeyWindow *gui, int x, int y)
+ :BC_GenericButton(x, y, _("Reset"))
+{
+ this->plugin = plugin;
+ this->gui = gui;
+}
+
+int ChromaKeyReset::handle_event ()
+{
+ plugin->config.reset();
+ gui->update_gui();
+ plugin->send_configure_change();
+ return 1;
+}
+
ChromaKeyUseColorPicker::ChromaKeyUseColorPicker (ChromaKeyHSV * plugin, ChromaKeyWindow * gui, int x, int y)
: BC_GenericButton (x, y,
_
ChromaKeyColorThread::ChromaKeyColorThread (ChromaKeyHSV * plugin, ChromaKeyWindow * gui)
- : ColorThread (1, _("Inner color"))
+ : ColorPicker (1, _("Inner color"))
{
this->plugin = plugin;
this->gui = gui;
value_key);
-template <typename component_type>
-void ChromaKeyUnit::process_chromakey(int components,
- component_type max,
- bool use_yuv,
- ChromaKeyPackage *pkg)
-{
+template <typename component_type>
+void ChromaKeyUnit::process_chromakey(int components,
+ component_type max,
+ bool use_yuv,
+ ChromaKeyPackage *pkg)
+{
OUTER_VARIABLES
int w = plugin->input->get_w();
if (tolerance == 0)
ah = 1.0;
- else
+ else
if (ABS (h - hue_key) < tolerance_in * 180)
ah = 0;
- else
+ else
if ((out_slope != 0) && (ABS (h - hue_key) < tolerance * 180))
/* we scale alpha between 0 and 1/2 */
- ah = ABS (h - hue_key) / tolerance / 360;
- else
+ ah = ABS (h - hue_key) / tolerance / 360;
+ else
if (ABS (h - hue_key) < tolerance_out * 180)
/* we scale alpha between 1/2 and 1 */
- ah = ABS (h - hue_key) / tolerance_out / 360;
+ ah = ABS (h - hue_key) / tolerance_out / 360;
else
has_match = false;
if (has_match)
a = MAX (MAX (ah, av), MAX (as, avm));
- // Spill light processing
+ // Spill light processing
if ((ABS (h - hue_key) < spill_threshold * 180) ||
((ABS (h - hue_key) > 360)
&& (ABS (h - hue_key) - 360 < spill_threshold * 180)))
ChromaKeyHSV::ChromaKeyHSV(PluginServer *server)
: PluginVClient(server)
{
-
+
engine = 0;
}
ChromaKeyHSV::~ChromaKeyHSV()
{
-
+
if(engine) delete engine;
}
this->output = frame;
- read_frame(frame,
- 0,
- start_position,
+ read_frame(frame,
+ 0,
+ start_position,
frame_rate,
get_use_opengl());
if(get_use_opengl()) return run_opengl();
load_configuration();
ChromaKeyWindow *window = (ChromaKeyWindow*)thread->window;
window->lock_window();
- window->min_brightness->update(config.min_brightness);
- window->max_brightness->update(config.max_brightness);
- window->saturation->update(config.saturation);
- window->min_saturation->update(config.min_saturation);
- window->tolerance->update(config.tolerance);
- window->in_slope->update(config.in_slope);
- window->out_slope->update(config.out_slope);
- window->alpha_offset->update(config.alpha_offset);
- window->spill_threshold->update(config.spill_threshold);
- window->spill_amount->update(config.spill_amount);
- window->show_mask->update(config.show_mask);
- window->update_sample();
+ window->update_gui();
window->unlock_window();
}
}
+void ChromaKeyWindow::update_gui()
+{
+ ChromaKeyConfig &config = plugin->config;
+ min_brightness->update(config.min_brightness);
+ max_brightness->update(config.max_brightness);
+ saturation->update(config.saturation);
+ min_saturation->update(config.min_saturation);
+ tolerance->update(config.tolerance);
+ in_slope->update(config.in_slope);
+ out_slope->update(config.out_slope);
+ alpha_offset->update(config.alpha_offset);
+ spill_threshold->update(config.spill_threshold);
+ spill_amount->update(config.spill_amount);
+ show_mask->update(config.show_mask);
+ update_sample();
+}
ChromaKeyHSV *plugin = this;
OUTER_VARIABLES
- static const char *yuv_shader =
+ static const char *yuv_shader =
"const vec3 black = vec3(0.0, 0.5, 0.5);\n"
"\n"
"vec4 yuv_to_rgb(vec4 color)\n"
" return color;\n"
"}\n";
- static const char *rgb_shader =
+ static const char *rgb_shader =
"const vec3 black = vec3(0.0, 0.0, 0.0);\n"
"\n"
"vec4 yuv_to_rgb(vec4 color)\n"
" return color;\n"
"}\n";
- static const char *hsv_shader =
+ static const char *hsv_shader =
"vec4 rgb_to_hsv(vec4 color)\n"
"{\n"
RGB_TO_HSV_FRAG("color")
"}\n"
"\n";
- static const char *show_rgbmask_shader =
+ static const char *show_rgbmask_shader =
"vec4 show_mask(vec4 color, vec4 color2)\n"
"{\n"
" return vec4(1.0, 1.0, 1.0, min(color.a, color2.a));"
"}\n";
- static const char *show_yuvmask_shader =
+ static const char *show_yuvmask_shader =
"vec4 show_mask(vec4 color, vec4 color2)\n"
"{\n"
" return vec4(1.0, 0.5, 0.5, min(color.a, color2.a));"
"}\n";
- static const char *nomask_shader =
+ static const char *nomask_shader =
"vec4 show_mask(vec4 color, vec4 color2)\n"
"{\n"
" return vec4(color.rgb, min(color.a, color2.a));"
case BC_YUVA8888:
shader_stack[0] = yuv_shader;
shader_stack[1] = hsv_shader;
- if(config.show_mask)
+ if(config.show_mask)
shader_stack[2] = show_yuvmask_shader;
else
shader_stack[2] = nomask_shader;
default:
shader_stack[0] = rgb_shader;
shader_stack[1] = hsv_shader;
- if(config.show_mask)
+ if(config.show_mask)
shader_stack[2] = show_rgbmask_shader;
else
shader_stack[2] = nomask_shader;
}
- unsigned int frag = VFrame::make_shader(0,
- shader_stack[0],
- shader_stack[1],
- shader_stack[2],
- shader_stack[3],
+ unsigned int frag = VFrame::make_shader(0,
+ shader_stack[0],
+ shader_stack[1],
+ shader_stack[2],
+ shader_stack[3],
0);
if(frag)