00001 #ifndef FILEDV_H
00002 #define FILEDV_H
00003
00004 #include "../config.h"
00005 #include "filebase.h"
00006 #include "file.inc"
00007
00008 #ifdef DV_USE_FFMPEG
00009 #include <avcodec.h>
00010 #endif
00011
00012 #include <libdv/dv.h>
00013
00014
00015 class FileDV : public FileBase
00016 {
00017 public:
00018 FileDV(Asset *asset, File *file);
00019 ~FileDV();
00020
00021 static void get_parameters(BC_WindowBase *parent_window,
00022 Asset *asset,
00023 BC_WindowBase* &format_window,
00024 int audio_options,
00025 int video_options);
00026
00027 int reset_parameters_derived();
00028 int open_file(int rd, int wr);
00029
00030 static int check_sig(Asset *asset);
00031 int close_file_derived();
00032
00033 int64_t get_video_position();
00034 int64_t get_audio_position();
00035
00036 int set_video_position(int64_t x);
00037 int set_audio_position(int64_t x);
00038
00039 int audio_samples_copy(double **buffer, int64_t len);
00040
00041 int write_samples(double **buffer, int64_t len);
00042 int write_frames(VFrame ***frames, int len);
00043
00044 int read_compressed_frame(VFrame *buffer);
00045 int write_compressed_frame(VFrame *buffers);
00046
00047 int64_t compressed_frame_size();
00048
00049 int read_samples(double *buffer, int64_t len);
00050 int read_frame(VFrame *frame);
00051
00052 int colormodel_supported(int colormodel);
00053
00054 int can_copy_from(Edit *edit, int64_t position);
00055
00056 static int get_best_colormodel(Asset *asset, int driver);
00057
00058 int get_audio_frame(int64_t pos);
00059 int get_audio_offset(int64_t pos);
00060
00061 private:
00062 FILE *stream;
00063
00064 Mutex *stream_lock;
00065 Mutex *decoder_lock;
00066 Mutex *video_position_lock;
00067
00068 dv_decoder_t *decoder;
00069 dv_encoder_t *encoder;
00070 dv_encoder_t *audio_encoder;
00071
00072 int64_t audio_position;
00073 int64_t video_position;
00074
00075 unsigned char *video_buffer;
00076 unsigned char *audio_buffer;
00077
00078 int16_t **audio_sample_buffer;
00079 int audio_sample_buffer_start;
00080 int audio_sample_buffer_end;
00081 int audio_sample_buffer_len;
00082 int audio_sample_buffer_maxsize;
00083
00084 int audio_frames_written;
00085
00086 int output_size;
00087 int isPAL;
00088 };
00089
00090
00091 class DVConfigAudio: public BC_Window
00092 {
00093 public:
00094 DVConfigAudio(BC_WindowBase *parent_window, Asset *asset);
00095 ~DVConfigAudio();
00096
00097 int create_objects();
00098 int close_event();
00099
00100 private:
00101 Asset *asset;
00102 BC_WindowBase *parent_window;
00103 };
00104
00105
00106
00107 class DVConfigVideo: public BC_Window
00108 {
00109 public:
00110 DVConfigVideo(BC_WindowBase *parent_window, Asset *asset);
00111 ~DVConfigVideo();
00112
00113 int create_objects();
00114 int close_event();
00115
00116 private:
00117 Asset *asset;
00118 BC_WindowBase *parent_window;
00119 };
00120
00121
00122 #endif