00001 #ifndef VFRAME_H
00002 #define VFRAME_H
00003
00004 #include "arraylist.h"
00005 #include "bchash.inc"
00006 #include "bcpbuffer.inc"
00007 #include "bctexture.inc"
00008 #include "bcwindowbase.inc"
00009 #include "colormodels.h"
00010 #include "vframe.inc"
00011
00012 class PngReadFunction;
00013
00014
00015
00016 #define MAX_STACK_ELEMENTS 255
00017
00018
00019
00020 class VFrame
00021 {
00022 public:
00023
00024
00025 VFrame(unsigned char *data,
00026 int w,
00027 int h,
00028 int color_model = BC_RGBA8888,
00029 long bytes_per_line = -1);
00030 VFrame(unsigned char *data,
00031 long y_offset,
00032 long u_offset,
00033 long v_offset,
00034 int w,
00035 int h,
00036 int color_model = BC_RGBA8888,
00037 long bytes_per_line = -1);
00038
00039 VFrame(unsigned char *png_data);
00040 VFrame(VFrame &vframe);
00041
00042 VFrame();
00043 ~VFrame();
00044
00045 friend class PngReadFunction;
00046
00047
00048
00049 int equivalent(VFrame *src, int test_stacks = 0);
00050
00051
00052 int reallocate(unsigned char *data,
00053 long y_offset,
00054 long u_offset,
00055 long v_offset,
00056 int w,
00057 int h,
00058 int color_model,
00059 long bytes_per_line);
00060
00061 void set_memory(unsigned char *data,
00062 long y_offset,
00063 long u_offset,
00064 long v_offset);
00065
00066 void set_compressed_memory(unsigned char *data,
00067 int data_size,
00068 int data_allocated);
00069
00070
00071 int read_png(unsigned char *data);
00072
00073
00074 int equals(VFrame *frame);
00075
00076 int params_match(int w, int h, int color_model);
00077
00078 long set_shm_offset(long offset);
00079 long get_shm_offset();
00080
00081
00082 int copy_from(VFrame *frame);
00083
00084 int clear_frame();
00085 int allocate_compressed_data(long bytes);
00086
00087
00088
00089
00090 long get_number();
00091 void set_number(long number);
00092
00093 long get_compressed_allocated();
00094 long get_compressed_size();
00095 long set_compressed_size(long size);
00096 int get_color_model();
00097
00098 unsigned char* get_data();
00099
00100 unsigned char** get_rows();
00101
00102 unsigned char* get_y();
00103 unsigned char* get_u();
00104 unsigned char* get_v();
00105 int get_w();
00106 int get_h();
00107 int get_w_fixed();
00108 int get_h_fixed();
00109 static int get_scale_tables(int *column_table, int *row_table,
00110 int in_x1, int in_y1, int in_x2, int in_y2,
00111 int out_x1, int out_y1, int out_x2, int out_y2);
00112 int get_bytes_per_pixel();
00113 long get_bytes_per_line();
00114
00115 int get_shared();
00116
00117
00118
00119 static int calculate_bytes_per_pixel(int colormodel);
00120 static long calculate_data_size(int w,
00121 int h,
00122 int bytes_per_line = -1,
00123 int color_model = BC_RGB888);
00124
00125 long get_data_size();
00126 void rotate270();
00127 void rotate90();
00128 void flip_vert();
00129
00130
00131
00132 int get_field2_offset();
00133 int set_field2_offset(int value);
00134
00135 void set_keyframe(int value);
00136 int get_keyframe();
00137
00138
00139 void overlay(VFrame *src,
00140 int out_x1,
00141 int out_y1);
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153 void to_texture();
00154
00155
00156 void to_ram();
00157
00158
00159
00160
00161 void screen_to_texture(int x = -1,
00162 int y = -1,
00163 int w = -1,
00164 int h = -1);
00165
00166
00167
00168
00169
00170
00171
00172
00173 void draw_texture(float in_x1,
00174 float in_y1,
00175 float in_x2,
00176 float in_y2,
00177 float out_x1,
00178 float out_y1,
00179 float out_x2,
00180 float out_y2,
00181 int flip_y = 0);
00182
00183 void draw_texture(int flip_y = 0);
00184
00185
00186
00187
00188
00189 int get_opengl_state();
00190 void set_opengl_state(int value);
00191
00192 enum
00193 {
00194
00195 UNKNOWN,
00196
00197 RAM,
00198
00199 TEXTURE,
00200
00201 SCREEN
00202 };
00203
00204
00205 int get_texture_id();
00206 void set_texture_id(int id);
00207
00208 int get_window_id();
00209 int get_texture_w();
00210 int get_texture_h();
00211 int get_texture_components();
00212
00213
00214
00215 void enable_opengl();
00216
00217
00218 void clear_pbuffer();
00219
00220
00221 BC_PBuffer* get_pbuffer();
00222
00223
00224
00225
00226
00227 void bind_texture(int texture_unit = -1);
00228
00229
00230
00231
00232
00233 static void init_screen(int w, int h);
00234
00235 void init_screen();
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245 static unsigned int make_shader(int x, ...);
00246 static void dump_shader(int shader_id);
00247
00248
00249
00250
00251
00252
00253
00254
00255 void push_prev_effect(char *name);
00256 void pop_prev_effect();
00257 void push_next_effect(char *name);
00258 void pop_next_effect();
00259
00260
00261
00262
00263 char* get_next_effect(int number = 0);
00264 char* get_prev_effect(int number = 0);
00265
00266
00267
00268 BC_Hash* get_params();
00269
00270
00271 int equal_stacks(VFrame *src);
00272
00273
00274
00275 void copy_stacks(VFrame *src);
00276
00277 void copy_params(VFrame *src);
00278
00279
00280 void clear_stacks();
00281
00282 void dump_stacks();
00283 void dump_params();
00284
00285 private:
00286
00287
00288
00289
00290
00291
00292
00293
00294 void create_pbuffer();
00295
00296
00297
00298 int clear_objects(int do_opengl);
00299 int reset_parameters(int do_opengl);
00300 void create_row_pointers();
00301 int allocate_data(unsigned char *data,
00302 long y_offset,
00303 long u_offset,
00304 long v_offset,
00305 int w,
00306 int h,
00307 int color_model,
00308 long bytes_per_line);
00309
00310
00311 int field2_offset;
00312
00313 int shared;
00314 long shm_offset;
00315
00316 long bytes_per_line;
00317 int bytes_per_pixel;
00318
00319 unsigned char *data;
00320
00321 unsigned char **rows;
00322
00323 int color_model;
00324
00325 long compressed_allocated;
00326
00327 long compressed_size;
00328
00329 unsigned char *y, *u, *v;
00330 long y_offset;
00331 long u_offset;
00332 long v_offset;
00333
00334 int w, h;
00335
00336 unsigned char *image;
00337 long image_offset;
00338 long image_size;
00339
00340 long sequence_number;
00341
00342
00343 int is_keyframe;
00344
00345 BC_Texture *texture;
00346
00347 BC_PBuffer *pbuffer;
00348
00349
00350 int opengl_state;
00351
00352 ArrayList<char*> prev_effects;
00353 ArrayList<char*> next_effects;
00354 BC_Hash *params;
00355 };
00356
00357
00358 #endif