00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _MPEG1or2_VIDEO_STREAM_DISCRETE_FRAMER_HH
00025 #define _MPEG1or2_VIDEO_STREAM_DISCRETE_FRAMER_HH
00026
00027 #ifndef _MPEG1or2_VIDEO_STREAM_FRAMER_HH
00028 #include "MPEG1or2VideoStreamFramer.hh"
00029 #endif
00030
00031 #define VSH_MAX_SIZE 1000
00032
00033 class MPEG1or2VideoStreamDiscreteFramer: public MPEG1or2VideoStreamFramer {
00034 public:
00035 static MPEG1or2VideoStreamDiscreteFramer*
00036 createNew(UsageEnvironment& env, FramedSource* inputSource,
00037 Boolean iFramesOnly = False,
00038 double vshPeriod = 5.0,
00039 Boolean leavePresentationTimesUnmodified = False);
00040
00041 protected:
00042 MPEG1or2VideoStreamDiscreteFramer(UsageEnvironment& env,
00043 FramedSource* inputSource,
00044 Boolean iFramesOnly, double vshPeriod, Boolean leavePresentationTimesUnmodified);
00045
00046 virtual ~MPEG1or2VideoStreamDiscreteFramer();
00047
00048 protected:
00049
00050 virtual void doGetNextFrame();
00051
00052 protected:
00053 static void afterGettingFrame(void* clientData, unsigned frameSize,
00054 unsigned numTruncatedBytes,
00055 struct timeval presentationTime,
00056 unsigned durationInMicroseconds);
00057 void afterGettingFrame1(unsigned frameSize,
00058 unsigned numTruncatedBytes,
00059 struct timeval presentationTime,
00060 unsigned durationInMicroseconds);
00061
00062 protected:
00063 Boolean fLeavePresentationTimesUnmodified;
00064 struct timeval fLastNonBFramePresentationTime;
00065 unsigned fLastNonBFrameTemporal_reference;
00066
00067
00068
00069 unsigned char fSavedVSHBuffer[VSH_MAX_SIZE];
00070 unsigned fSavedVSHSize;
00071 double fSavedVSHTimestamp;
00072 Boolean fIFramesOnly;
00073 double fVSHPeriod;
00074 };
00075
00076 #endif