00001 #ifndef Impala_Core_Stream_RgbDataSrcMpeg2_h 00002 #define Impala_Core_Stream_RgbDataSrcMpeg2_h 00003 00004 #include "Core/Stream/RgbDataSrc.h" 00005 #include "Link/Mpeg2/CxRgbDataSrcMpeg2Link.h" 00006 00007 namespace Impala 00008 { 00009 namespace Core 00010 { 00011 namespace Stream 00012 { 00013 00014 00015 class RgbDataSrcMpeg2 : public RgbDataSrc 00016 { 00017 public: 00018 00019 RgbDataSrcMpeg2(int src, String srcName, bool isEs = false) 00020 : RgbDataSrc(src, srcName) 00021 { 00022 mSrcHandle = 0; 00023 Init(isEs); 00024 } 00025 00026 virtual 00027 ~RgbDataSrcMpeg2() 00028 { 00029 if (mSrcHandle) 00030 CxMpeg2CloseVideo(mSrcHandle); 00031 } 00032 00033 virtual bool 00034 Valid() const 00035 { 00036 return (mSrcHandle != 0); 00037 } 00038 00039 bool 00040 TheEnd() 00041 { 00042 return (CxMpeg2TheEnd(mSrcHandle) != 0); 00043 } 00044 00045 protected: 00046 00047 bool 00048 ReadFrameData() 00049 { 00050 mData = CxMpeg2GetFrame(mSrcHandle, FrameNr()); 00051 //if (CxMpeg2TheEnd(mSrcHandle)) 00052 // mLastFrame = FrameNr()-1; 00053 return true; 00054 } 00055 00056 private: 00057 00058 void 00059 Init(bool isEs) 00060 { 00061 if (!(mSrcHandle = CxMpeg2LoadVideo(mSrcName.c_str(), isEs))) 00062 { 00063 ILOG_ERROR("Unable to CxMpeg2LoadVideo " << mSrcName); 00064 return; 00065 } 00066 mFrameWidth = CxMpeg2GetFrameWidth(mSrcHandle); 00067 mFrameHeight = CxMpeg2GetFrameHeight(mSrcHandle); 00068 mLastFrame = CxMpeg2GetLength(mSrcHandle) - 1; 00069 } 00070 00071 void* mSrcHandle; 00072 00073 ILOG_VAR_DEC; 00074 }; 00075 00076 ILOG_VAR_INIT(RgbDataSrcMpeg2, Impala.Core.Stream); 00077 00078 } // namespace Stream 00079 } // namespace Core 00080 } // namespace Impala 00081 00082 #endif