00001 // This is core/vidl/vidl_ostream.h 00002 #ifndef vidl_ostream_h_ 00003 #define vidl_ostream_h_ 00004 #ifdef VCL_NEEDS_PRAGMA_INTERFACE 00005 #pragma interface 00006 #endif 00007 //: 00008 // \file 00009 // \brief A base class for output video streams 00010 // 00011 // \author Matt Leotta 00012 // \date 19 Dec 2005 00013 00014 #include "vidl_frame_sptr.h" 00015 00016 00017 //: A base class for output video streams 00018 class vidl_ostream 00019 { 00020 public: 00021 //: Constructor 00022 vidl_ostream() : ref_count_(0) {} 00023 //: Destructor 00024 virtual ~vidl_ostream() {} 00025 00026 //: Close the stream 00027 virtual void close() = 0; 00028 00029 //: Return true if the stream is open for writing 00030 virtual bool is_open() const = 0; 00031 00032 //: Write and image to the stream 00033 // \retval false if the image could not be written 00034 virtual bool write_frame(const vidl_frame_sptr& frame) = 0; 00035 00036 private: 00037 //: prevent deep copying a stream 00038 vidl_ostream(const vidl_ostream& /*other*/) : ref_count_(0) {} 00039 00040 //------------------------------------------------------- 00041 // reference counting 00042 public: 00043 00044 //: Increment reference count 00045 void ref() { ref_count_++; } 00046 00047 //: Decrement reference count 00048 void unref() { if (--ref_count_ <= 0) delete this; } 00049 00050 //: Number of objects referring to this data 00051 int ref_count() const { return ref_count_; } 00052 00053 private: 00054 int ref_count_; 00055 }; 00056 00057 #endif // vidl_ostream_h_