00001
00002
00003
00004
00005 #ifndef _VIDEO_FILE_H_
00006 #define _VIDEO_FILE_H_
00007
00008 #include <sys/types.h>
00009 #include <list.h>
00010 #include "String.h"
00011
00012 #include "Convert.h"
00013 #include "PluginList.h"
00014 #include "Errors.h"
00015
00016 class V_Codec;
00017 class V_Track;
00018 class A_Codec;
00019 class A_Track;
00020 class Track;
00021 class Codec;
00022 class CodecPlugins;
00023 class IOModulPlugins;
00024 class Codec_Info;
00025 class IOModul_Info;
00026
00031 class VideoFile {
00032 friend class V_Codec;
00033 friend class V_Track;
00034 friend class A_Codec;
00035 friend class A_Track;
00036 friend class Track;
00037 friend class Codec;
00038 public:
00039 typedef enum IOMODE { read, write } IO_Mode;
00040
00043 static void Init( void );
00044
00047 static VideoFile *Create_VideoFile( const String file, const String typ, IO_Mode mode = write );
00048
00051 static PluginList<IOModul_Info> *IOModulList( void );
00052
00055 static PluginList<Codec_Info> *AVCodecList( void );
00056
00057
00058
00059
00060 VideoFile( const String file, const String typ, IO_Mode mode = write );
00061 virtual ~VideoFile();
00062
00068 virtual V_Codec *initVideoCodec( double Rate,
00069 int x, int y,
00070 const char *Codec = NULL );
00071
00072
00075 virtual A_Codec *initAudioCodec( int Sample_rate,
00076 int Channels,
00077 const char *Codec = NULL );
00078
00083 virtual V_Codec *VideoCodec( int track );
00084
00089 virtual A_Codec *AudioCodec( int track );
00090
00091
00094 virtual long long BytesWritten( void );
00095
00098 virtual const String ModulName( void ) { return iomodul; }
00099
00100
00101
00102
00105 virtual Errors &ErrorStatus( void ) { return err_stat; }
00106
00107 protected:
00108
00109 virtual V_Track *openVideoTrack( int track );
00110 virtual V_Track *openVideoTrack( double Rate, int x, int y, const char *Codec );
00111
00112
00113 virtual A_Track *openAudioTrack( int track );
00114 virtual A_Track *openAudioTrack( int Sample_rate, int Channels, const char *Codec );
00115
00116 list<A_Track*> ATrackListe;
00117 list<V_Track*> VTrackListe;
00118
00119 V_Track *getVideoTrack( int track );
00120 A_Track *getAudioTrack( int track );
00121 void addTrack( V_Track *track );
00122 void addTrack( A_Track *track );
00123 void removeTrack( V_Track *track );
00124 void removeTrack( A_Track *track );
00125
00126 void deleteTracks( void );
00127
00128 IO_Mode iomode;
00129 String iofile;
00130 String iomodul;
00131
00132 static CodecPlugins *AV_Codecs;
00133 static IOModulPlugins *IO_Moduls;
00134
00135
00136 Errors err_stat;
00137
00138
00139 static bool init;
00140 };
00141
00142 #include "V_Track.h"
00143 #include "V_Codec.h"
00144 #include "A_Track.h"
00145 #include "A_Codec.h"
00146 #include "Codec_Info.h"
00147 #include "IOModul_Info.h"
00148
00149 #endif