www.pudn.com > ReadingPeopleTracker-1.28.rar > ImageSource.h
/* * ImageSource.h * base class for image sources * * author: A.M.Baumberg (amb) * creation date: 8/1/93 */ #ifndef __IMAGE_SOURCE_H__ #define __IMAGE_SOURCE_H__ #include#include // for strncpy() #include #include "Image.h" #include "tracker_defines_types_and_helpers.h" namespace ReadingPeopleTracker { class ImageSource { protected: ImageSourceType source_type; Image *current; // current frame (Image) frame_id_t frame_count; // simple count for get_next() calls static int max_skip_non_existing; char imgsrc_window_title[64]; static bool skip_non_existing; bool have_valid_header; public: inline ImageSourceType get_source_type() const { return source_type; } // NB the following methods must be virtual inline virtual Image *get_current() { if (current == NULL) // happens in the very first frame current = get_next(); return current; } inline virtual frame_id_t get_source_frame_id() { return get_frame_id(); } inline virtual frame_time_t get_source_frame_time_in_ms() { return get_frame_time_in_ms(); } inline frame_time_t get_frame_count() const { return frame_count; } // NB set_current should be used with caution void set_current(Image *new_current) { current = new_current; } inline frame_id_t get_frame_id() { return get_current()->get_frame_id(); } inline frame_time_t get_frame_time_in_ms() { return get_current()->get_frame_time_in_ms(); } ImageSource(Image *the_current = NULL) { current = the_current; imgsrc_window_title[0] = 0; have_valid_header = false; frame_count = 0; source_type = IST_UNKNOWN; // overwrite in derived class's constructor! } virtual ~ImageSource() { if (current != NULL) delete current; } virtual long display(long wndow = NULLWIN); inline void set_title(char *title) { #ifndef NO_DISPLAY if (current != NULL) { frame_id_t saved_frame_id = current->get_frame_id(); // save current->set_title(title); current->set_frame_id(saved_frame_id); // restore } else strncpy(imgsrc_window_title,title,63); // remember for next display() #endif // ifndef NO_DISPLAY } inline void set_title(unsigned char *title) { set_title((char *) title); // cast to keep our compiler happy... } inline bool get_have_valid_header() { return have_valid_header; } // // virtual methods, please redefine for all derived ImageSource classes // // NB derived get_next() must define valid frame_time_in_ms and frame_id for each Image virtual Image *get_next() = 0; // These three must return valid values after the constructor is called without // allocating the current image! virtual unsigned int get_xdim() const = 0; virtual unsigned int get_ydim() const = 0; virtual ImageType get_image_type() const = 0; }; } // namespace ReadingPeopleTracker #endif