00001 #ifndef SHARPEN_H
00002 #define SHARPEN_H
00003
00004
00005
00006
00007 class SharpenMain;
00008 #define MAXSHARPNESS 100
00009
00010 #include "condition.inc"
00011 #include "bchash.h"
00012 #include "pluginvclient.h"
00013 #include "sharpenwindow.h"
00014
00015 #include <sys/types.h>
00016
00017 class SharpenEngine;
00018
00019 class SharpenConfig
00020 {
00021 public:
00022 SharpenConfig();
00023
00024 void copy_from(SharpenConfig &that);
00025 int equivalent(SharpenConfig &that);
00026 void interpolate(SharpenConfig &prev,
00027 SharpenConfig &next,
00028 long prev_frame,
00029 long next_frame,
00030 long current_frame);
00031
00032
00033
00034 int horizontal;
00035 int interlace;
00036 int luminance;
00037 float sharpness;
00038 };
00039
00040 class SharpenMain : public PluginVClient
00041 {
00042 public:
00043 SharpenMain(PluginServer *server);
00044 ~SharpenMain();
00045
00046
00047 int process_realtime(VFrame *input_ptr, VFrame *output_ptr);
00048 int is_realtime();
00049 char* plugin_title();
00050 int show_gui();
00051 void raise_window();
00052 int set_string();
00053 void update_gui();
00054 int load_configuration();
00055 void save_data(KeyFrame *keyframe);
00056 void read_data(KeyFrame *keyframe);
00057 int load_defaults();
00058 int save_defaults();
00059 VFrame* new_picon();
00060
00061
00062 int row_step;
00063
00064
00065 SharpenThread *thread;
00066 int pos_lut[0x10000], neg_lut[0x10000];
00067 SharpenConfig config;
00068 VFrame *output, *input;
00069
00070 private:
00071 int get_luts(int *pos_lut, int *neg_lut, int color_model);
00072 BC_Hash *defaults;
00073 SharpenEngine **engine;
00074 int total_engines;
00075 };
00076
00077
00078 class SharpenEngine : public Thread
00079 {
00080 public:
00081 SharpenEngine(SharpenMain *plugin);
00082 ~SharpenEngine();
00083
00084 int start_process_frame(VFrame *output, VFrame *input, int field);
00085 int wait_process_frame();
00086 void run();
00087
00088 void filter(int components,
00089 int vmax,
00090 int w,
00091 unsigned char *src,
00092 unsigned char *dst,
00093 int *neg0,
00094 int *neg1,
00095 int *neg2);
00096 void filter(int components,
00097 int vmax,
00098 int w,
00099 u_int16_t *src,
00100 u_int16_t *dst,
00101 int *neg0,
00102 int *neg1,
00103 int *neg2);
00104 void filter(int components,
00105 int vmax,
00106 int w,
00107 float *src,
00108 float *dst,
00109 float *neg0,
00110 float *neg1,
00111 float *neg2);
00112
00113
00114 void filter_888(int w,
00115 unsigned char *src,
00116 unsigned char *dst,
00117 int *neg0,
00118 int *neg1,
00119 int *neg2);
00120 void filter_8888(int w,
00121 unsigned char *src,
00122 unsigned char *dst,
00123 int *neg0,
00124 int *neg1,
00125 int *neg2);
00126 void filter_161616(int w,
00127 u_int16_t *src,
00128 u_int16_t *dst,
00129 int *neg0,
00130 int *neg1,
00131 int *neg2);
00132 void filter_16161616(int w,
00133 u_int16_t *src,
00134 u_int16_t *dst,
00135 int *neg0,
00136 int *neg1,
00137 int *neg2);
00138
00139 int filter(int w,
00140 unsigned char *src,
00141 unsigned char *dst,
00142 int *neg0,
00143 int *neg1,
00144 int *neg2);
00145
00146 float calculate_pos(float value);
00147 float calculate_neg(float value);
00148
00149
00150 SharpenMain *plugin;
00151 int field;
00152 VFrame *output, *input;
00153 int last_frame;
00154 Condition *input_lock, *output_lock;
00155 unsigned char *src_rows[4], *dst_row;
00156 unsigned char *neg_rows[4];
00157 float sharpness_coef;
00158 };
00159
00160 #endif