00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _H264_VIDEO_STREAM_FRAMER_HH
00022 #define _H264_VIDEO_STREAM_FRAMER_HH
00023
00024 #ifndef _MPEG_VIDEO_STREAM_FRAMER_HH
00025 #include "MPEGVideoStreamFramer.hh"
00026 #endif
00027
00028 class H264VideoStreamFramer: public MPEGVideoStreamFramer {
00029 public:
00030 static H264VideoStreamFramer* createNew(UsageEnvironment& env, FramedSource* inputSource,
00031 Boolean includeStartCodeInOutput = False);
00032
00033 void getSPSandPPS(u_int8_t*& sps, unsigned& spsSize, u_int8_t*& pps, unsigned& ppsSize) const{
00034
00035
00036 sps = fLastSeenSPS; spsSize = fLastSeenSPSSize;
00037 pps = fLastSeenPPS; ppsSize = fLastSeenPPSSize;
00038 }
00039
00040 void setSPSandPPS(u_int8_t* sps, unsigned spsSize, u_int8_t* pps, unsigned ppsSize) {
00041
00042
00043 saveCopyOfSPS(sps, spsSize);
00044 saveCopyOfPPS(pps, ppsSize);
00045 }
00046 void setSPSandPPS(char const* sPropParameterSetsStr);
00047
00048
00049
00050
00051 protected:
00052 H264VideoStreamFramer(UsageEnvironment& env, FramedSource* inputSource, Boolean createParser, Boolean includeStartCodeInOutput);
00053 virtual ~H264VideoStreamFramer();
00054
00055 void saveCopyOfSPS(u_int8_t* from, unsigned size);
00056 void saveCopyOfPPS(u_int8_t* from, unsigned size);
00057
00058
00059 virtual Boolean isH264VideoStreamFramer() const;
00060
00061 private:
00062 void setPresentationTime() { fPresentationTime = fNextPresentationTime; }
00063
00064 private:
00065 Boolean fIncludeStartCodeInOutput;
00066 u_int8_t* fLastSeenSPS;
00067 unsigned fLastSeenSPSSize;
00068 u_int8_t* fLastSeenPPS;
00069 unsigned fLastSeenPPSSize;
00070 struct timeval fNextPresentationTime;
00071 friend class H264VideoStreamParser;
00072 };
00073
00074 #endif