/*
* CINELERRA
* Copyright (C) 2008 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 <math.h>
int equivalent(LinearBlurConfig &that);
void copy_from(LinearBlurConfig &that);
- void interpolate(LinearBlurConfig &prev,
- LinearBlurConfig &next,
- long prev_frame,
- long next_frame,
+ void interpolate(LinearBlurConfig &prev,
+ LinearBlurConfig &next,
+ long prev_frame,
+ long next_frame,
long current_frame);
int radius;
class LinearBlurSize : public BC_ISlider
{
public:
- LinearBlurSize(LinearBlurMain *plugin,
- int x,
- int y,
+ LinearBlurSize(LinearBlurMain *plugin,
+ int x,
+ int y,
int *output,
int min,
int max);
class LinearBlurToggle : public BC_CheckBox
{
public:
- LinearBlurToggle(LinearBlurMain *plugin,
- int x,
- int y,
+ LinearBlurToggle(LinearBlurMain *plugin,
+ int x,
+ int y,
int *output,
char *string);
int handle_event();
class LinearBlurEngine : public LoadServer
{
public:
- LinearBlurEngine(LinearBlurMain *plugin,
- int total_clients,
+ LinearBlurEngine(LinearBlurMain *plugin,
+ int total_clients,
int total_packages);
void init_packages();
LoadClient* new_client();
int LinearBlurConfig::equivalent(LinearBlurConfig &that)
{
- return
+ return
radius == that.radius &&
angle == that.angle &&
steps == that.steps &&
a = that.a;
}
-void LinearBlurConfig::interpolate(LinearBlurConfig &prev,
- LinearBlurConfig &next,
- long prev_frame,
- long next_frame,
+void LinearBlurConfig::interpolate(LinearBlurConfig &prev,
+ LinearBlurConfig &next,
+ long prev_frame,
+ long next_frame,
long current_frame)
{
double next_scale = (double)(current_frame - prev_frame) / (next_frame - prev_frame);
LinearBlurWindow::LinearBlurWindow(LinearBlurMain *plugin)
: PluginClientWindow(plugin,
- 230,
- 290,
- 230,
- 290,
+ 230,
+ 290,
+ 230,
+ 290,
0)
{
- this->plugin = plugin;
+ this->plugin = plugin;
}
LinearBlurWindow::~LinearBlurWindow()
-LinearBlurToggle::LinearBlurToggle(LinearBlurMain *plugin,
- int x,
- int y,
- int *output,
+LinearBlurToggle::LinearBlurToggle(LinearBlurMain *plugin,
+ int x,
+ int y,
+ int *output,
char *string)
: BC_CheckBox(x, y, *output, string)
{
-LinearBlurSize::LinearBlurSize(LinearBlurMain *plugin,
- int x,
- int y,
+LinearBlurSize::LinearBlurSize(LinearBlurMain *plugin,
+ int x,
+ int y,
int *output,
int min,
int max)
LinearBlurMain::LinearBlurMain(PluginServer *server)
: PluginVClient(server)
{
-
+
engine = 0;
scale_x_table = 0;
scale_y_table = 0;
LinearBlurMain::~LinearBlurMain()
{
-
+
if(engine) delete engine;
delete_tables();
if(accum) delete [] accum;
if(!engine) engine = new LinearBlurEngine(this,
get_project_smp() + 1,
get_project_smp() + 1);
- if(!accum) accum = new unsigned char[frame->get_w() *
+ if(!accum) accum = new unsigned char[frame->get_w() *
frame->get_h() *
BC_CModels::components(frame->get_color_model()) *
MAX(sizeof(int), sizeof(float))];
this->input = temp;
- bzero(accum,
- frame->get_w() *
- frame->get_h() *
- BC_CModels::components(frame->get_color_model()) *
+ bzero(accum,
+ frame->get_w() *
+ frame->get_h() *
+ BC_CModels::components(frame->get_color_model()) *
MAX(sizeof(int), sizeof(float)));
engine->process_packages();
return 0;
glDrawBuffer(GL_BACK);
if(!config.r || !config.g || !config.b || !config.a)
{
- glColor4f(config.r ? 0 : 1,
- config.g ? 0 : 1,
- config.b ? 0 : 1,
+ glColor4f(config.r ? 0 : 1,
+ config.g ? 0 : 1,
+ config.b ? 0 : 1,
config.a ? 0 : 1);
get_output()->draw_texture();
}
for(int i = 0; i < config.steps; i++)
{
glClear(GL_COLOR_BUFFER_BIT);
- glColor4f(config.r ? 1 : 0,
- config.g ? 1 : 0,
- config.b ? 1 : 0,
+ glColor4f(config.r ? 1 : 0,
+ config.g ? 1 : 0,
+ config.b ? 1 : 0,
config.a ? 1 : 0);
int w = get_output()->get_w();
glDisable(GL_TEXTURE_2D);
if(is_yuv)
{
- glColor4f(config.r ? 0.0 : 0,
- config.g ? 0.5 : 0,
- config.b ? 0.5 : 0,
+ glColor4f(config.r ? 0.0 : 0,
+ config.g ? 0.5 : 0,
+ config.b ? 0.5 : 0,
config.a ? 1.0 : 0);
float center_x1 = 0.0;
float center_x2 = get_output()->get_w();
}
if(project_y1 > 0)
{
- draw_box(center_x1,
- -get_output()->get_h(),
- center_x2,
+ draw_box(center_x1,
+ -get_output()->get_h(),
+ center_x2,
-get_output()->get_h() + project_y1);
}
if(project_y2 < get_output()->get_h())
{
- draw_box(center_x1,
- -get_output()->get_h() + project_y2,
- center_x2,
+ draw_box(center_x1,
+ -get_output()->get_h() + project_y2,
+ center_x2,
0);
}
}
glAccum(GL_ACCUM, fraction);
glEnable(GL_TEXTURE_2D);
- glColor4f(config.r ? 1 : 0,
- config.g ? 1 : 0,
- config.b ? 1 : 0,
+ glColor4f(config.r ? 1 : 0,
+ config.g ? 1 : 0,
+ config.b ? 1 : 0,
config.a ? 1 : 0);
}
-LinearBlurUnit::LinearBlurUnit(LinearBlurEngine *server,
+LinearBlurUnit::LinearBlurUnit(LinearBlurEngine *server,
LinearBlurMain *plugin)
: LoadClient(server)
{
-LinearBlurEngine::LinearBlurEngine(LinearBlurMain *plugin,
- int total_clients,
+LinearBlurEngine::LinearBlurEngine(LinearBlurMain *plugin,
+ int total_clients,
int total_packages)
: LoadServer(total_clients, total_packages)
{