contrib/oxl/oxp/ImageSequenceMovieFile.cxx

Go to the documentation of this file.
00001 // This is oxl/oxp/ImageSequenceMovieFile.cxx
00002 #ifdef VCL_NEEDS_PRAGMA_INTERFACE
00003 #pragma implementation
00004 #endif
00005 //:
00006 //  \file
00007 
00008 #include "ImageSequenceMovieFile.h"
00009 
00010 #include <vcl_iostream.h>
00011 #include <vil1/vil1_file_image.h>
00012 #include <oxp/ImageSequenceName.h>
00013 
00014 struct ImageSequenceMovieFilePrivates {
00015   ImageSequenceMovieFilePrivates(const char* filepattern, int frame_index_to_search_for_extension):
00016     seqname(filepattern, frame_index_to_search_for_extension, 1, "r"),
00017     current_image_index(-1),
00018     base_index(frame_index_to_search_for_extension)
00019     {
00020       seqname.start_frame_ = 0;
00021     }
00022 
00023   vil1_image get_image(int index) {
00024     if (!current_image || (current_image_index != index)) {
00025       // Load new image
00026       vcl_string newname = seqname.name(index);
00027       if (MovieFileInterface::verbose)
00028         vcl_cerr << "ImageSequenceMovieFile: Loading [" << newname << "]: ";
00029       current_image.load(newname.c_str(), MovieFileInterface::verbose ? vil1_file_image::laconic : vil1_file_image::silent);
00030       current_image_index = index;
00031     }
00032     return current_image;
00033   }
00034 
00035  public:
00036   ImageSequenceName seqname;
00037   int current_image_index;
00038   vil1_file_image current_image;
00039   int base_index;
00040 };
00041 
00042 //: Ctor
00043 ImageSequenceMovieFile::ImageSequenceMovieFile(char const* filepattern, int frame_index_to_search_for_extension):
00044   p(new ImageSequenceMovieFilePrivates(filepattern, frame_index_to_search_for_extension))
00045 {
00046 }
00047 
00048 ImageSequenceMovieFile::~ImageSequenceMovieFile()
00049 {
00050   delete p;
00051 }
00052 
00053 //: Will need to search...
00054 int ImageSequenceMovieFile::GetLength()
00055 {
00056   return p->seqname.n();
00057 }
00058 
00059 vil1_image ImageSequenceMovieFile::GetImage(int frame_index)
00060 {
00061   return p->get_image(frame_index);
00062 }
00063 
00064 int ImageSequenceMovieFile::GetSizeX(int frame_index)
00065 {
00066   return p->get_image(frame_index).width();
00067 }
00068 
00069 int ImageSequenceMovieFile::GetSizeY(int frame_index)
00070 {
00071   return p->get_image(frame_index).height();
00072 }
00073 
00074 int ImageSequenceMovieFile::GetBitsPixel()
00075 {
00076   vil1_image animage = p->current_image? vil1_image(p->current_image) : p->get_image(p->base_index);
00077   return animage.components() * animage.bits_per_component();
00078 }
00079 
00080 //: Assumes disk-stored images are never interlaced
00081 bool ImageSequenceMovieFile::IsInterlaced()
00082 {
00083   return false;
00084 }
00085 
00086 bool ImageSequenceMovieFile::HasFrame(int frame_index)
00087 {
00088   return p->get_image(frame_index);
00089 }
00090 
00091 bool ImageSequenceMovieFile::GetFrame(int frame_index, void* buffer)
00092 {
00093   vil1_image image = p->get_image(frame_index);
00094   image.get_section(buffer, 0, 0, image.width(), image.height());
00095   return true;
00096 }
00097 
00098 bool ImageSequenceMovieFile::GetField(int field_index, void* buffer)
00099 {
00100   return GetFrame(field_index, buffer);
00101 }

Generated on Tue Dec 2 05:14:28 2008 for contrib/oxl/oxp by  doxygen 1.5.1