00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _BYTE_STREAM_FILE_SOURCE_HH
00022 #define _BYTE_STREAM_FILE_SOURCE_HH
00023
00024 #ifndef _FRAMED_FILE_SOURCE_HH
00025 #include "FramedFileSource.hh"
00026 #endif
00027
00028 class ByteStreamFileSource: public FramedFileSource {
00029 public:
00030 static ByteStreamFileSource* createNew(UsageEnvironment& env,
00031 char const* fileName,
00032 unsigned preferredFrameSize = 0,
00033 unsigned playTimePerFrame = 0);
00034
00035
00036
00037 static ByteStreamFileSource* createNew(UsageEnvironment& env,
00038 FILE* fid,
00039 unsigned preferredFrameSize = 0,
00040 unsigned playTimePerFrame = 0);
00041
00042
00043
00044 u_int64_t fileSize() const { return fFileSize; }
00045
00046
00047 void seekToByteAbsolute(u_int64_t byteNumber, u_int64_t numBytesToStream = 0);
00048
00049 void seekToByteRelative(int64_t offset);
00050 void seekToEnd();
00051
00052 protected:
00053 ByteStreamFileSource(UsageEnvironment& env,
00054 FILE* fid,
00055 unsigned preferredFrameSize,
00056 unsigned playTimePerFrame);
00057
00058
00059 virtual ~ByteStreamFileSource();
00060
00061 static void fileReadableHandler(ByteStreamFileSource* source, int mask);
00062 void doReadFromFile();
00063
00064 private:
00065
00066 virtual void doGetNextFrame();
00067 virtual void doStopGettingFrames();
00068
00069 protected:
00070 u_int64_t fFileSize;
00071
00072 private:
00073 unsigned fPreferredFrameSize;
00074 unsigned fPlayTimePerFrame;
00075 Boolean fFidIsSeekable;
00076 unsigned fLastPlayTime;
00077 Boolean fHaveStartedReading;
00078 Boolean fLimitNumBytesToStream;
00079 u_int64_t fNumBytesToStream;
00080 };
00081
00082 #endif