00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _BYTE_STREAM_MULTI_FILE_SOURCE_HH
00022 #define _BYTE_STREAM_MULTI_FILE_SOURCE_HH
00023
00024 #ifndef _BYTE_STREAM_FILE_SOURCE_HH
00025 #include "ByteStreamFileSource.hh"
00026 #endif
00027
00028 class ByteStreamMultiFileSource: public FramedSource {
00029 public:
00030 static ByteStreamMultiFileSource*
00031 createNew(UsageEnvironment& env, char const** fileNameArray,
00032 unsigned preferredFrameSize = 0, unsigned playTimePerFrame = 0);
00033
00034
00035 Boolean haveStartedNewFile() const { return fHaveStartedNewFile; }
00036
00037
00038 protected:
00039 ByteStreamMultiFileSource(UsageEnvironment& env, char const** fileNameArray,
00040 unsigned preferredFrameSize, unsigned playTimePerFrame);
00041
00042
00043 virtual ~ByteStreamMultiFileSource();
00044
00045 private:
00046
00047 virtual void doGetNextFrame();
00048
00049 private:
00050 static void onSourceClosure(void* clientData);
00051 void onSourceClosure1();
00052 static void afterGettingFrame(void* clientData,
00053 unsigned frameSize, unsigned numTruncatedBytes,
00054 struct timeval presentationTime,
00055 unsigned durationInMicroseconds);
00056
00057 private:
00058 unsigned fPreferredFrameSize;
00059 unsigned fPlayTimePerFrame;
00060 unsigned fNumSources;
00061 unsigned fCurrentlyReadSourceNumber;
00062 Boolean fHaveStartedNewFile;
00063 char const** fFileNameArray;
00064 ByteStreamFileSource** fSourceArray;
00065 };
00066
00067 #endif