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
00040 private:
00041 MPEG1or2VideoStreamDiscreteFramer(UsageEnvironment& env,
00042 FramedSource* inputSource,
00043 Boolean iFramesOnly, double vshPeriod);
00044
00045 virtual ~MPEG1or2VideoStreamDiscreteFramer();
00046
00047 private:
00048
00049 virtual void doGetNextFrame();
00050
00051 private:
00052 static void afterGettingFrame(void* clientData, unsigned frameSize,
00053 unsigned numTruncatedBytes,
00054 struct timeval presentationTime,
00055 unsigned durationInMicroseconds);
00056 void afterGettingFrame1(unsigned frameSize,
00057 unsigned numTruncatedBytes,
00058 struct timeval presentationTime,
00059 unsigned durationInMicroseconds);
00060
00061 private:
00062 struct timeval fLastNonBFramePresentationTime;
00063 unsigned fLastNonBFrameTemporal_reference;
00064
00065
00066
00067 unsigned char fSavedVSHBuffer[VSH_MAX_SIZE];
00068 unsigned fSavedVSHSize;
00069 double fSavedVSHTimestamp;
00070 Boolean fIFramesOnly;
00071 double fVSHPeriod;
00072 };
00073
00074 #endif