Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

HxImageSeq Class Reference

Class definition for a sequence of HxImageRep's. More...

#include <HxImageSeq.h>

List of all members.

Public Methods

 HxImageSeq ()
 Constructor. More...

 HxImageSeq (HxString filename, int bufSize=0)
 Construct sequence from given file. More...

 HxImageSeq (const HxImageSeq &rhs)
 Copy constructor. More...

virtual ~HxImageSeq ()
 Destructor. More...

HxImageSeq & operator= (const HxImageSeq &rhs)
 Assignment operator. More...

int ident () const
 The identity of the sequence. More...

int isNull () const
 Indicates wether this is a valid sequence. More...

int frameWidth () const
 The frame width. More...

int frameHeight () const
 The frame height. More...

int frameDepth () const
 The frame depth. More...

int nrFrames () const
 The number of frames. More...

HxImageRep getFrame (int nr) const
 Get the specified frame as HxImageRep. More...

void getRgb2d (int nr, int *pixels, HxString displayMode) const
 Display the specified frame in the given buffer in ARGB format using the given displayMode. More...

void getRgbPixels2d (int nr, int *pixels, HxString displayMode, int resWidth=-1, int resHeight=-1, HxGeoIntType gi=NEAREST) const
 Display the specified frame in the given buffer in ARGB format using the given displayMode at the given resolution. More...

HxImageSeqIter begin ()
 An iterator pointing to the first frame. More...

HxImageSeqIter end ()
 An iterator pointing beyond the last frame. More...

int writeFile (std::vector< int > frameList, HxString filename, int format)
 Write the frame from the list to the given file in the given format. More...

STD_OSTREAM & put (STD_OSTREAM &os) const
 Put some information on the given stream. More...


Static Public Methods

void setUseMDC (int flag)
 Indicate whether the MDC library should be used to decode mpeg files (when it is available :-). More...


Static Public Attributes

const int MPEG_F = 1
const int MIR_F = 2
const int AVI_F = 3

Friends

class HxImageSeqIter


Detailed Description

Class definition for a sequence of HxImageRep's.

Supported types:

We use the file extension to recognize the video format:


Constructor & Destructor Documentation

HxImageSeq::HxImageSeq  
 

Constructor.

00032                        : _pointee(0)
00033 {
00034 }

HxImageSeq::HxImageSeq HxString    filename,
int    bufSize = 0
 

Construct sequence from given file.

bufSize: the size of the internal buffer. The buffer stores frames converted to HxImageRep's for later references. In the current implementation only contiguous frames are kept. The default is no buffering.

00036                                                      : _pointee(0)
00037 {
00038 #ifndef __GNUC__
00039     int pos = filename.rfind(".");
00040     if (pos >=0 ) {        
00041         HxString ext = filename.substr(pos);
00042         for (HxString::iterator i = ext.begin(); i!= ext.end(); i++)
00043             *i = toupper(*i);
00044         if (ext.compare(".MIR")==0) {
00045             _pointee = new HxImageSeqMir(filename, bufSize);
00046         }
00047         else if (ext.compare(".AVI")==0 || ext.compare(".AVS")==0 || ext.compare(".VDR")==0) {
00048             _pointee = new HxImageSeqAVIMedia(filename, bufSize);
00049         }
00050         else {
00051             HxImageSeqData* seq;
00052             if (_useMDC)
00053                 seq = new HxImageSeqMDC(filename, bufSize);
00054             else
00055                 seq = new HxImageSeqDXMedia(filename, bufSize);
00056             if(seq->valid())
00057                 _pointee = seq;
00058             else
00059                 delete seq;
00060         }
00061     } else {
00062         HxEnvironment::instance()->errorStream()
00063             << "No extension found in " << filename << STD_ENDL;
00064         HxEnvironment::instance()->flush();
00065     }
00066 #else
00067     HxImageSeqMDC* seq = new HxImageSeqMDC(filename, bufSize);
00068     if(seq->valid())
00069         _pointee = seq;
00070     else
00071         delete seq;
00072 #endif
00073 }

HxImageSeq::HxImageSeq const HxImageSeq &    rhs
 

Copy constructor.

00081                                             : _pointee(rhs.pointee())
00082 {
00083 }

HxImageSeq::~HxImageSeq   [virtual]
 

Destructor.

00086 {
00087 }


Member Function Documentation

void HxImageSeq::setUseMDC int    flag [static]
 

Indicate whether the MDC library should be used to decode mpeg files (when it is available :-).

Default is false.

00077 {
00078     _useMDC = flag;
00079 }

HxImageSeq & HxImageSeq::operator= const HxImageSeq &    rhs
 

Assignment operator.

00091 {
00092     _pointee = rhs._pointee;
00093     return *this;
00094 }

int HxImageSeq::ident   const
 

The identity of the sequence.

00104 {
00105     return pointee() ? pointee()->ident() : 0;
00106 }

int HxImageSeq::isNull   const
 

Indicates wether this is a valid sequence.

00098 {
00099     return !int(_pointee); 
00100 }

int HxImageSeq::frameWidth   const
 

The frame width.

00110 {
00111     return pointee() ? pointee()->frameWidth() : 0;
00112 }

int HxImageSeq::frameHeight   const
 

The frame height.

00116 {
00117     return pointee() ? pointee()->frameHeight() : 0;
00118 }

int HxImageSeq::frameDepth   const
 

The frame depth.

00122 {
00123     return pointee() ? pointee()->frameDepth() : 0;
00124 }

int HxImageSeq::nrFrames   const
 

The number of frames.

00128 {
00129     return pointee() ? pointee()->nrFrames() : 0;
00130 }

HxImageRep HxImageSeq::getFrame int    nr const
 

Get the specified frame as HxImageRep.

00134 {
00135     return pointee() ? pointee()->getFrame(nr) : HxImageRep();
00136 }

void HxImageSeq::getRgb2d int    nr,
int *    pixels,
HxString    displayMode
const
 

Display the specified frame in the given buffer in ARGB format using the given displayMode.

The pixels buffer has to be allocated by the class user and should have sufficient size.

00140 {
00141     if (!pointee()) return;
00142 
00143     pointee()->getRgb2d(nr, pixels, displayMode);
00144 }

void HxImageSeq::getRgbPixels2d int    nr,
int *    pixels,
HxString    displayMode,
int    resWidth = -1,
int    resHeight = -1,
HxGeoIntType    gi = NEAREST
const
 

Display the specified frame in the given buffer in ARGB format using the given displayMode at the given resolution.

The pixels buffer has to be allocated by the class user and should have sufficient size.

00149 {
00150     if (!pointee()) return;
00151 
00152     pointee()->getRgbPixels2d(nr, pixels, displayMode, resWidth, resHeight, gi);
00153 }

HxImageSeqIter HxImageSeq::begin  
 

An iterator pointing to the first frame.

00157 {
00158     return HxImageSeqIter(this, 0);
00159 }

HxImageSeqIter HxImageSeq::end  
 

An iterator pointing beyond the last frame.

00163 {
00164     return HxImageSeqIter(this, pointee()->nrFrames());
00165 }

int HxImageSeq::writeFile std::vector< int >    frameList,
HxString    filename,
int    format
 

Write the frame from the list to the given file in the given format.

Currently, only MIR format is implemented.

00169 {
00170 
00171 #ifndef __GNUC__
00172 
00173     if (format==MIR_F) {
00174         Header_Type* header = new Header_Type;
00175         strcpy(header->id,"MIR");
00176         header->width = frameWidth();
00177         header->height = frameHeight();
00178         header->depth = frameDepth();
00179         header->no_of_frames = frameList.size();
00180 
00181         FILE *fp = fopen(filename.c_str(),"w+b");
00182         if (!fp) {
00183             HxEnvironment::instance()->errorStream()
00184                 << "Cannot open file for writing:" << filename << STD_ENDL;
00185             HxEnvironment::instance()->flush();
00186             return -1;
00187         }
00188 
00189         int* buf = new int[header->width * header->height];
00190         int block_size =  header->width * header->height * sizeof(int);
00191 
00192         fwrite(header,sizeof(Header_Type),1,fp);
00193 
00194         for (int i=0; i<frameList.size(); i++) {
00195             HxImageRep im = pointee()->frame2HxImageRep(frameList[i]);
00196             im.getRgbPixels2d(buf,"Direct");
00197             fwrite(buf, block_size, 1, fp);
00198         }
00199         fclose(fp);
00200 
00201         delete buf;
00202 
00203         return 0;
00204     }
00205     else if (format==AVI_F) {
00206             HxEnvironment::instance()->errorStream()
00207                 << "Cannot (yet) write AVI files :" << filename << STD_ENDL;
00208             HxEnvironment::instance()->flush();
00209             return -1;
00210     }
00211 
00212     else {
00213         HxEnvironment::instance()->errorStream()
00214             << "Writefile for this format not implemented yet" << STD_ENDL;
00215         HxEnvironment::instance()->flush();
00216         return -1;
00217     }
00218 
00219 #else
00220 
00221     HxEnvironment::instance()->errorStream()
00222     << "No non DX codec" << STD_ENDL;
00223     HxEnvironment::instance()->flush();
00224     return -1;
00225 
00226 // __GNUC__
00227 #endif
00228 }

STD_OSTREAM & HxImageSeq::put STD_OSTREAM &    os const
 

Put some information on the given stream.

00232 {
00233     os << "Number of Frames: " << nrFrames()
00234        << ", frame sizes : " << frameWidth() << " x " << frameHeight()
00235        << STD_ENDL;
00236     return os;
00237 }


The documentation for this class was generated from the following files:
Generated on Tue Feb 3 14:18:56 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001