00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _FRAMED_SOURCE_HH
00022 #define _FRAMED_SOURCE_HH
00023
00024 #ifndef _NET_COMMON_H
00025 #include "NetCommon.h"
00026 #endif
00027 #ifndef _MEDIA_SOURCE_HH
00028 #include "MediaSource.hh"
00029 #endif
00030
00031 class FramedSource: public MediaSource {
00032 public:
00033 static Boolean lookupByName(UsageEnvironment& env, char const* sourceName,
00034 FramedSource*& resultSource);
00035
00036 typedef void (afterGettingFunc)(void* clientData, unsigned frameSize,
00037 unsigned numTruncatedBytes,
00038 struct timeval presentationTime,
00039 unsigned durationInMicroseconds);
00040 typedef void (onCloseFunc)(void* clientData);
00041 void getNextFrame(unsigned char* to, unsigned maxSize,
00042 afterGettingFunc* afterGettingFunc,
00043 void* afterGettingClientData,
00044 onCloseFunc* onCloseFunc,
00045 void* onCloseClientData);
00046
00047 static void handleClosure(void* clientData);
00048
00049
00050
00051 void stopGettingFrames();
00052
00053 virtual unsigned maxFrameSize() const;
00054
00055
00056
00057 virtual void doGetNextFrame() = 0;
00058
00059
00060 Boolean isCurrentlyAwaitingData() const {return fIsCurrentlyAwaitingData;}
00061
00062 static void afterGetting(FramedSource* source);
00063
00064
00065
00066 protected:
00067 FramedSource(UsageEnvironment& env);
00068 virtual ~FramedSource();
00069
00070 virtual void doStopGettingFrames();
00071
00072 protected:
00073
00074 unsigned char* fTo;
00075 unsigned fMaxSize;
00076 unsigned fFrameSize;
00077 unsigned fNumTruncatedBytes;
00078 struct timeval fPresentationTime;
00079 unsigned fDurationInMicroseconds;
00080
00081 private:
00082
00083 virtual Boolean isFramedSource() const;
00084
00085 private:
00086 afterGettingFunc* fAfterGettingFunc;
00087 void* fAfterGettingClientData;
00088 onCloseFunc* fOnCloseFunc;
00089 void* fOnCloseClientData;
00090
00091 Boolean fIsCurrentlyAwaitingData;
00092 };
00093
00094 #endif