00001 #ifndef FILEBASE_H
00002 #define FILEBASE_H
00003
00004 #include "asset.inc"
00005 #include "assets.inc"
00006 #include "colormodels.h"
00007 #include "edit.inc"
00008 #include "guicast.h"
00009 #include "file.inc"
00010 #include "filelist.inc"
00011 #include "overlayframe.inc"
00012 #include "strategies.inc"
00013 #include "vframe.inc"
00014
00015 #include <sys/types.h>
00016
00017
00018 class FileBase
00019 {
00020 public:
00021 FileBase(Asset *asset, File *file);
00022 virtual ~FileBase();
00023
00024
00025 friend class File;
00026 friend class FileList;
00027 friend class FrameWriter;
00028
00029
00030
00031
00032 int get_mode(char *mode, int rd, int wr);
00033 int reset_parameters();
00034
00035
00036
00037 virtual void get_parameters(BC_WindowBase *parent_window,
00038 Asset *asset,
00039 BC_WindowBase **format_window,
00040 int audio_options,
00041 int video_options,
00042 int lock_compressor) {};
00043
00044
00045
00046 virtual int get_index(char *index_path) { return 1; };
00047 virtual int check_header() { return 0; };
00048 virtual int reset_parameters_derived() {};
00049 virtual int read_header() {};
00050 virtual int open_file(int rd, int wr) {};
00051 virtual int close_file();
00052 virtual int close_file_derived() {};
00053 int set_dither();
00054 virtual int seek_end() { return 0; };
00055 virtual int seek_start() { return 0; };
00056 virtual int64_t get_video_position() { return 0; };
00057 virtual int64_t get_audio_position() { return 0; };
00058 virtual int set_video_position(int64_t x) { return 0; };
00059 virtual int set_audio_position(int64_t x) { return 0; };
00060
00061
00062
00063 virtual int64_t get_memory_usage() { return 0; };
00064
00065 virtual int write_samples(double **buffer,
00066 int64_t len) { return 0; };
00067 virtual int write_frames(VFrame ***frames, int len) { return 0; };
00068 virtual int read_compressed_frame(VFrame *buffer) { return 0; };
00069 virtual int write_compressed_frame(VFrame *buffers) { return 0; };
00070 virtual int64_t compressed_frame_size() { return 0; };
00071
00072 virtual int read_samples(double *buffer, int64_t len) { return 0; };
00073
00074
00075 virtual int prefer_samples_float() {return 0;};
00076 virtual int read_samples_float(float *buffer, int64_t len) { return 0; };
00077
00078 virtual int read_frame(VFrame *frame) { return 1; };
00079
00080
00081
00082 virtual int colormodel_supported(int colormodel) { return BC_RGB888; };
00083
00084 virtual int can_copy_from(Edit *edit, int64_t position) { return 0; };
00085 virtual int get_render_strategy(ArrayList<int>* render_strategies) { return VRENDER_VPIXEL; };
00086
00087 protected:
00088
00089 static int search_render_strategies(ArrayList<int>* render_strategies, int render_strategy);
00090
00091
00092 int64_t samples_to_raw(char *out_buffer,
00093 float **in_buffer,
00094 int64_t input_len,
00095 int bits,
00096 int channels,
00097 int byte_order,
00098 int signed_);
00099
00100
00101 int raw_to_samples(float *out_buffer, char *in_buffer,
00102 int64_t samples, int bits, int channels, int channel, int feather,
00103 float lfeather_len, float lfeather_gain, float lfeather_slope);
00104
00105
00106 int overlay_float_buffer(float *out_buffer, float *in_buffer,
00107 int64_t samples,
00108 float lfeather_len, float lfeather_gain, float lfeather_slope);
00109
00110
00111
00112 int64_t frame_to_raw(unsigned char *out_buffer,
00113 VFrame *in_frame,
00114 int w,
00115 int h,
00116 int use_alpha,
00117 int use_float,
00118 int color_model);
00119
00120
00121 int get_audio_buffer(char **buffer, int64_t len, int64_t bits, int64_t channels);
00122
00123
00124 int get_float_buffer(float **buffer, int64_t len);
00125
00126
00127 int get_video_buffer(unsigned char **buffer, int depth);
00128 int get_row_pointers(unsigned char *buffer, unsigned char ***pointers, int depth);
00129 static int match4(char *in, char *out);
00130
00131 int64_t ima4_samples_to_bytes(int64_t samples, int channels);
00132 int64_t ima4_bytes_to_samples(int64_t bytes, int channels);
00133
00134 char *audio_buffer_in, *audio_buffer_out;
00135 float *float_buffer;
00136 unsigned char *video_buffer_in, *video_buffer_out;
00137 unsigned char **row_pointers_in, **row_pointers_out;
00138 int64_t prev_buffer_position;
00139 int64_t prev_frame_position;
00140 int64_t prev_bytes;
00141 int64_t prev_len;
00142 int prev_track;
00143 int prev_layer;
00144 Asset *asset;
00145 int wr, rd;
00146 int dither;
00147 int internal_byte_order;
00148 File *file;
00149
00150 private:
00151
00152
00153
00154
00155
00156 float ulawtofloat(char ulaw);
00157 char floattoulaw(float value);
00158 int generate_ulaw_tables();
00159 int delete_ulaw_tables();
00160 float *ulawtofloat_table, *ulawtofloat_ptr;
00161 unsigned char *floattoulaw_table, *floattoulaw_ptr;
00162
00163
00164 int init_ima4();
00165 int delete_ima4();
00166 int ima4_decode_block(int16_t *output, unsigned char *input);
00167 int ima4_decode_sample(int *predictor, int nibble, int *index, int *step);
00168 int ima4_encode_block(unsigned char *output, int16_t *input, int step, int channel);
00169 int ima4_encode_sample(int *last_sample, int *last_index, int *nibble, int next_sample);
00170
00171 static int ima4_step[89];
00172 static int ima4_index[16];
00173 int *last_ima4_samples;
00174 int *last_ima4_indexes;
00175 int ima4_block_size;
00176 int ima4_block_samples;
00177 OverlayFrame *overlayer;
00178 };
00179
00180 #endif