X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Fbluebanana%2Fbluebanana.h;fp=cinelerra-5.1%2Fplugins%2Fbluebanana%2Fbluebanana.h;h=f96cba93047b0281a0ed3ae384b7f5bdf4fd3d16;hb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;hp=0000000000000000000000000000000000000000;hpb=52fcc46226f9df46f9ce9d0566dc568455a7db0b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/bluebanana/bluebanana.h b/cinelerra-5.1/plugins/bluebanana/bluebanana.h new file mode 100644 index 00000000..f96cba93 --- /dev/null +++ b/cinelerra-5.1/plugins/bluebanana/bluebanana.h @@ -0,0 +1,236 @@ + +/* + * Cinelerra :: Blue Banana - color modification plugin for Cinelerra-CV + * Copyright (C) 2012-2013 Monty + * + * 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 + * + */ + +#ifndef BLUEBANANA_H +#define BLUEBANANA_H + +class BluebananaEngine; +class BluebananaMain; +class BluebananaThread; + +#include "bluebananaconfig.h" +#include "bluebananawindow.h" +#include "loadbalance.h" +#include "cicolors.h" +#include "pluginvclient.h" + +#define SELECT_LOOKUP_SIZE 1024 +#define ADJUST_LOOKUP_SIZE 4096 +#define SELECT_LOOKUP_SCALE 1024.f +#define ADJUST_LOOKUP_SCALE 1024.f +// adjust lookups clamp lookup range / intermediate results above this value +#define MAX_ADJ_HEADROOM 4. + +#define MIN_GAMMA .2f +#define MAX_GAMMA 5.f + +#define MIN_HISTBRACKET -100 +#define MAX_HISTBRACKET 200 +#define HISTSIZE 1536 +#define HISTSCALE 512 +#define HUESCALE 256 + +// valid HRGBSHIFT is 0 through 3 +#define HRGBSHIFT 1 +#define HISTOFF 1.f +#define FRAC0 .2f +#define FRAC100 .8f + +#define FSrange 15 +#define FSovermax 50 + +#define SELECT_THRESH .00001f + +#define HSpV_SATURATION_BIAS (32.f/255.f) +#define HSpV_SATURATION_SCALE (1.f+HSpV_SATURATION_BIAS) +#define HSpV_SATURATION_ISCALE (1.f/HSpV_SATURATION_SCALE) + +#undef CLAMP +#define CLAMP(x, y, z) ((x) < (y) ? (y) : ((x) > (z) ? (z) : (x))) + +class BluebananaMain : public PluginVClient +{ +public: + BluebananaMain(PluginServer *server); + ~BluebananaMain(); + + int process_buffer(VFrame *frame, + int64_t start_position, + double frame_rate); + int is_realtime(); + void save_auto(KeyFrame *keyframe); + void save_data(KeyFrame *keyframe); + void read_data(KeyFrame *keyframe); + void load_nonauto(); + void save_nonauto(); + void push_nonauto(); + void enter_config_change(); + void commit_config_change(); + void leave_config_change(); + void update_gui(); + void render_gui(void *data); + + float hue_select_alpha(float hue); + float sat_select_alpha(float sat); + float val_select_alpha(float val); + + PLUGIN_CLASS_MEMBERS(BluebananaConfig); + + YUV yuv; + VFrame *frame; + BluebananaEngine *engine; + int ants_counter; + int colormodel; + + friend class BluebananaEngine; + + float hue_select_alpha_lookup[SELECT_LOOKUP_SIZE+2]; + float sat_select_alpha_lookup[SELECT_LOOKUP_SIZE+2]; + float val_select_alpha_lookup[SELECT_LOOKUP_SIZE+2]; + float sat_adj_lookup[ADJUST_LOOKUP_SIZE+2]; + float sat_adj_toe_slope; + float val_adj_lookup[ADJUST_LOOKUP_SIZE+2]; + float val_adj_toe_slope; + float red_adj_lookup[ADJUST_LOOKUP_SIZE+2]; + float red_adj_toe_slope; + float green_adj_lookup[ADJUST_LOOKUP_SIZE+2]; + float green_adj_toe_slope; + float blue_adj_lookup[ADJUST_LOOKUP_SIZE+2]; + float blue_adj_toe_slope; + + float red_histogram[HISTSIZE+(1<>HRGBSHIFT)+1]; + float hue_histogram_green[(HISTSIZE>>HRGBSHIFT)+1]; + float hue_histogram_blue[(HISTSIZE>>HRGBSHIFT)+1]; + + float sat_histogram_red[(HISTSIZE>>HRGBSHIFT)+1]; + float sat_histogram_green[(HISTSIZE>>HRGBSHIFT)+1]; + float sat_histogram_blue[(HISTSIZE>>HRGBSHIFT)+1]; + + float value_histogram_red[(HISTSIZE>>HRGBSHIFT)+1]; + float value_histogram_green[(HISTSIZE>>HRGBSHIFT)+1]; + float value_histogram_blue[(HISTSIZE>>HRGBSHIFT)+1]; + + float *fill_selection(float *in, float *work, + int width, int height, + BluebananaEngine *e); + + int select_one_n; + int select_two_n; + int select_three_n; + char select_one[FSrange*4]; + char select_two[FSrange*4]; + char select_three[FSrange*4]; + + BluebananaConfig lookup_cache; + BluebananaConfig update_cache; + + void update_lookups(int serverside); + + private: + void output_nonauto(FileXML *output); +}; + +class BluebananaPackage : public LoadPackage +{ + public: + BluebananaPackage(BluebananaEngine *engine); + BluebananaEngine *engine; + + float Rhist[HISTSIZE+(1<