Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages | Examples

vetCodec_XVID.h

00001 
00032 #ifndef __VETLIB_VETCODEC_XVID_H__
00033  #define __VETLIB_VETCODEC_XVID_H__
00034 
00035  #include "../vetDefs.h"
00036  #include "../vetCodec.h"
00037 
00038  #include "../vetFrameYUV420.h"
00039  #include "../vetFrameRGB24.h"
00040  #include "../vetFrameT.h"
00041 
00042 
00043 
00044  #include "../../support/xvidcore/src/xvid.h"
00045 
00046 
00047 
00048  #define BUFFER_SIZE (2*1024*1024)
00049 
00050 
00051 
00052 
00053 
00054 class vetCodec_XVIDParameters : public vetCodecParameters
00055 {
00056         protected:
00057 
00058                 char fileName[64];
00059                 long frameIndex;
00060                 int stream;
00061 
00062                 friend class vetCodec_XVID;
00063 
00064 
00065         public:
00066 
00067                 vetCodec_XVIDParameters();
00068                 vetCodec_XVIDParameters(const char* filename, int stream = 0, long frameIndex = 0);
00069                 ~vetCodec_XVIDParameters() {  }
00070 
00071                 void reset();
00072 
00073                 void setStream(int stream);
00074                 void setFileName(const char *filename);
00075                 void setFrameIndex(long index = 0);
00076 
00077                 VETRESULT saveToStreamXML(FILE *fp);
00078                 VETRESULT loadFromStreamXML(FILE *fp);
00079 
00080 };
00081 
00082 
00083 class vetCodec_XVID :  public vetCodec
00084  {
00085 
00086         protected:
00087 
00088                 void *stream_handle;
00089 
00090                 unsigned char *mp4_buffer;
00091                 unsigned char *mp4_ptr;
00092 
00093                 unsigned char *buffer;
00094 
00095                 FILE* file;
00096 
00097                 int use_assembler;
00098                 int debug_level;
00099 
00100                 int useful_bytes;
00101                 int chunk;
00102                 xvid_dec_stats_t xvid_dec_stats;
00103 
00104                 double totaldectime;
00105 
00106                 long totalsize;
00107                 int status;
00108 
00109                 int filenr;
00110 
00111 
00112                 vetCodec_XVIDParameters* myParams;
00113 
00114 
00115                 unsigned int width;             
00116                 unsigned int height;            
00117 
00118                 VETRESULT doDecodeFrame();
00119 
00120                 VETRESULT init();
00121                 VETRESULT close();
00122                 VETRESULT flush();
00123                 VETRESULT release();
00124 
00125                 VETRESULT updateBuffer(unsigned int width, unsigned int height);
00126 
00127                 VETRESULT dec_init(int use_assembler, int debug_level);
00128                 VETRESULT dec_main(unsigned char *istream, unsigned char *ostream, int istream_size, xvid_dec_stats_t *xvid_dec_stats);
00129 
00130                 VETRESULT write_image(char *prefix, unsigned char *image);
00131                 VETRESULT write_pnm(char *filename, unsigned char *image);
00132 
00133 
00134         public:
00135 
00136 
00140                 vetCodec_XVID(vetCodec_XVIDParameters* initParams = NULL);
00141 
00149                 vetCodec_XVID(char* filename, int stream = 0);
00150 
00151 
00152                 ~vetCodec_XVID();
00153 
00154 
00155 
00165                 VETRESULT setParameters(vetCodec_XVIDParameters* initParams);
00166 
00172                 vetCodec_XVIDParameters& getParameters() { return *myParams; };
00173 
00174 
00175                 VETRESULT setFilterParameters (vetFilterParameters* initParams) { return setParameters(static_cast<vetCodec_XVIDParameters*>(initParams)); };
00176                 vetFilterParameters* getFilterParameters () { return static_cast<vetFilterParameters*>(myParams); };
00177 
00178 
00186                 VETRESULT save();
00187 
00188 
00196                 VETRESULT load();
00197 
00207                 VETRESULT load(char *filename, int stream = 0);
00208 
00209 
00210                 VETRESULT save(char *filename, int stream = 0);
00211 
00212 
00219                 VETRESULT reset();
00220 
00227                 bool EoF();
00228 
00229 
00243                 VETRESULT extractTo(vetFrameYUV420& img);
00244 
00258                 VETRESULT extractTo(vetFrameRGB24& img);
00259 
00273                 VETRESULT extractTo(vetFrameT<unsigned char>& img);
00274 
00275 
00276 
00289                 VETRESULT importFrom(vetFrameYUV420& img);
00290 
00303                 VETRESULT importFrom(vetFrameRGB24& img);
00304 
00317                 VETRESULT importFrom(vetFrameT<unsigned char>& img);
00318 
00319 
00320 
00321 
00322 // FRAME BROWSING FUNCTIONS
00323 
00324 /*
00326                 VETRESULT setFrameIndex(long index, int stream = 0);
00327 
00329                 bool eof(int stream = 0) const;
00330 
00331                 VETRESULT goToPreviousFrame(int stream = 0);
00332 
00333                 VETRESULT goToVideoEnd(int stream = 0);
00334                 VETRESULT goToAudioEnd(int stream = 0);
00335 */
00336 /* Give the seconds time in the last packet read */
00337                 double getLastPacketTime();
00338 
00339 
00340 // VIDEO INFO FUNCTIONS
00341 
00342                 unsigned int getHeight() const { return height; };
00343 
00344                 unsigned int getWidth() const { return width; };
00345 
00346                 long getVideoStreamLength(int stream = 0) { return totalsize; };
00347                 long getAudioStreamLength(int stream = -1) { return -1; };
00348 
00349                 int getVideoStreamPosition(int stream = 0) { return filenr; };
00350 
00351                 double getVideoStreamDecodedTotalTime(int stream = 0) { return totaldectime; };
00352 
00353                 bool hasAudio(int stream = -1) { return false; };
00354                 bool hasVideo(int stream = -1) { return false; };
00355 
00356 
00357                 int getAudioStreamCount(int stream = -1) { return -1; };
00358                 int getVideoStreamCount(int stream = -1) { return -1; };
00359 
00360 
00361 
00362 
00371 //              float getVideoFrameRate(int stream = -1) ;
00372 
00373 
00374 
00375 
00376 
00377 
00378 
00379 
00380 /*
00381                 int getColorModel(int stream = 0);
00382 
00383 
00384                 bool hasVideo();
00385 
00386 
00387 
00389                 float getVideoFrameRate(int stream = 0);
00390 
00391 
00392 
00393 
00394 // AUDIO INFO FUNCTIONS
00395 
00396                 bool hasAudio();
00397 
00398 
00399                 int getAudioChannels(int stream = 0);
00400 
00402                 float getAudioSampleRate(int stream = 0);
00403 
00404                 long getAudioStreamLength(int stream = 0);
00405 
00406 
00407 
00408 
00409 
00410 
00411                 int getXVID3_Version_major() { return mpeg3_major(); };
00412                 int getXVID3_Version_minor() { return mpeg3_minor(); };
00413                 int getXVID3_Version_release() { return mpeg3_release(); };
00414 
00415 */
00416 
00417                 // decode all stream !
00418                 VETRESULT doDecode(long frameCount = 0);
00419 
00425                 VETRESULT setHeight(unsigned int value)
00426                  {
00427                         height = value;
00428                         return VETRET_OK;
00429                  };
00430 
00436                 VETRESULT setWidth(unsigned int value)
00437                  {
00438                         width = value;
00439                         return VETRET_OK;
00440                  };
00441 
00442 
00443 // call importFrom, so filename index is managed
00444 
00453 //              void operator << (vetFrameYUV420& img) { vetOutput::operator << (img); }
00454 //              void operator << (vetFrameRGB24& img) { vetOutput::operator << (img); }
00455 //              void operator << (vetFrameT<unsigned char>& img) { vetOutput::operator << (img); }
00456 
00457 // call extractTo, so filename index and frame rate are managed
00458 
00474 //              vetInput& operator >> (vetFrameYUV420& img) { vetInput::operator >> (img); return *this; }
00475 //              vetInput& operator >> (vetFrameRGB24& img) { vetInput::operator >> (img); return *this; }
00476 //              vetInput& operator >> (vetFrameT<unsigned char>& img) { vetInput::operator >>( img); return *this; }
00477 
00478 
00479                 bool isEncodingAvailable() { return false; }; //{ return true; };
00480                 bool isDecodingAvailable() { return true; };
00481 
00482 
00483 };
00484 
00485 
00486 
00487 
00488 
00489 
00490 
00491 #endif //__VETLIB_VETCODEC_XVID_H__

Generated on Tue Jan 24 11:58:59 2006 for VETLib by  doxygen 1.4.4