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
00323
00324
00326
00327
00329
00330
00331
00332
00333
00334
00335
00336
00337 double getLastPacketTime();
00338
00339
00340
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
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
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
00444
00453
00454
00455
00456
00457
00458
00474
00475
00476
00477
00478
00479 bool isEncodingAvailable() { return false; };
00480 bool isDecodingAvailable() { return true; };
00481
00482
00483 };
00484
00485
00486
00487
00488
00489
00490
00491 #endif //__VETLIB_VETCODEC_XVID_H__