#include <WAVAudioFileSource.hh>
Inheritance diagram for WAVAudioFileSource:


Public Types | |
| typedef void( | afterGettingFunc )(void *clientData, unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds) |
| typedef void( | onCloseFunc )(void *clientData) |
Public Member Functions | |
| unsigned | numPCMBytes () const |
| void | setScaleFactor (int scale) |
| void | seekToPCMByte (unsigned byteNumber) |
| unsigned char | getAudioFormat () |
| unsigned char | bitsPerSample () const |
| unsigned char | numChannels () const |
| unsigned | samplingFrequency () const |
| void | getNextFrame (unsigned char *to, unsigned maxSize, afterGettingFunc *afterGettingFunc, void *afterGettingClientData, onCloseFunc *onCloseFunc, void *onCloseClientData) |
| void | stopGettingFrames () |
| virtual unsigned | maxFrameSize () const |
| Boolean | isCurrentlyAwaitingData () const |
| virtual void | getAttributes () const |
| virtual char const * | MIMEtype () const |
| virtual Boolean | isRTPSource () const |
| virtual Boolean | isMPEG1or2VideoStreamFramer () const |
| virtual Boolean | isMPEG4VideoStreamFramer () const |
| virtual Boolean | isH264VideoStreamFramer () const |
| virtual Boolean | isJPEGVideoSource () const |
| virtual Boolean | isAMRAudioSource () const |
| UsageEnvironment & | envir () const |
| char const * | name () const |
| virtual Boolean | isSink () const |
| virtual Boolean | isRTCPInstance () const |
| virtual Boolean | isRTSPClient () const |
| virtual Boolean | isRTSPServer () const |
| virtual Boolean | isMediaSession () const |
| virtual Boolean | isServerMediaSession () const |
| virtual Boolean | isDarwinInjector () const |
Static Public Member Functions | |
| static WAVAudioFileSource * | createNew (UsageEnvironment &env, char const *fileName) |
| static AudioInputDevice * | createNew (UsageEnvironment &env, int inputPortNumber, unsigned char bitsPerSample, unsigned char numChannels, unsigned samplingFrequency, unsigned granularityInMS=20) |
| static AudioPortNames * | getPortNames () |
| static Boolean | lookupByName (UsageEnvironment &env, char const *sourceName, FramedSource *&resultSource) |
| static Boolean | lookupByName (UsageEnvironment &env, char const *sourceName, MediaSource *&resultSource) |
| static Boolean | lookupByName (UsageEnvironment &env, char const *mediumName, Medium *&resultMedium) |
| static void | handleClosure (void *clientData) |
| static void | close (UsageEnvironment &env, char const *mediumName) |
| static void | close (Medium *medium) |
Static Public Attributes | |
| static char ** | allowedDeviceNames = NULL |
Protected Member Functions | |
| WAVAudioFileSource (UsageEnvironment &env, FILE *fid) | |
| virtual | ~WAVAudioFileSource () |
| virtual void | doStopGettingFrames () |
| TaskToken & | nextTask () |
Static Protected Member Functions | |
| static void | afterGetting (FramedSource *source) |
Protected Attributes | |
| unsigned char | fBitsPerSample |
| unsigned char | fNumChannels |
| unsigned | fSamplingFrequency |
| unsigned | fGranularityInMS |
| unsigned char * | fTo |
| unsigned | fMaxSize |
| unsigned | fFrameSize |
| unsigned | fNumTruncatedBytes |
| timeval | fPresentationTime |
| unsigned | fDurationInMicroseconds |
Private Member Functions | |
| virtual void | doGetNextFrame () |
| virtual Boolean | setInputPort (int portIndex) |
| virtual double | getAverageLevel () const |
Private Attributes | |
| FILE * | fFid |
| double | fPlayTimePerSample |
| unsigned | fPreferredFrameSize |
| unsigned | fLastPlayTime |
| unsigned | fWAVHeaderSize |
| unsigned | fFileSize |
| int | fScaleFactor |
| unsigned char | fAudioFormat |
Definition at line 38 of file WAVAudioFileSource.hh.
typedef void( FramedSource::afterGettingFunc)(void *clientData, unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds) [inherited] |
Definition at line 36 of file FramedSource.hh.
typedef void( FramedSource::onCloseFunc)(void *clientData) [inherited] |
Definition at line 40 of file FramedSource.hh.
| WAVAudioFileSource::WAVAudioFileSource | ( | UsageEnvironment & | env, | |
| FILE * | fid | |||
| ) | [protected] |
Definition at line 101 of file WAVAudioFileSource.cpp.
References AudioInputDevice::bitsPerSample(), env, False, fAudioFormat, AudioInputDevice::fBitsPerSample, AudioInputDevice::fNumChannels, fPlayTimePerSample, fPreferredFrameSize, AudioInputDevice::fSamplingFrequency, fWAVHeaderSize, get2Bytes(), get4Bytes(), nextc, AudioInputDevice::numChannels(), UsageEnvironment::setResultMsg(), skipBytes(), True, WA_PCM, WA_PCMA, and WA_PCMU.
Referenced by createNew().
00102 : AudioInputDevice(env, 0, 0, 0, 0)/* set the real parameters later */, 00103 fFid(fid), fLastPlayTime(0), fWAVHeaderSize(0), fFileSize(0), fScaleFactor(1), 00104 fAudioFormat(WA_UNKNOWN) { 00105 // Check the WAV file header for validity. 00106 // Note: The following web pages contain info about the WAV format: 00107 // http://www.technology.niagarac.on.ca/courses/comp630/WavFileFormat.html 00108 // http://ccrma-www.stanford.edu/CCRMA/Courses/422/projects/WaveFormat/ 00109 // http://www.ringthis.com/dev/wave_format.htm 00110 // http://www.lightlink.com/tjweber/StripWav/Canon.html 00111 // http://www.borg.com/~jglatt/tech/wave.htm 00112 // http://www.wotsit.org/download.asp?f=wavecomp 00113 00114 Boolean success = False; // until we learn otherwise 00115 do { 00116 // RIFF Chunk: 00117 if (nextc != 'R' || nextc != 'I' || nextc != 'F' || nextc != 'F') break; 00118 if (!skipBytes(fid, 4)) break; 00119 if (nextc != 'W' || nextc != 'A' || nextc != 'V' || nextc != 'E') break; 00120 00121 // FORMAT Chunk: 00122 if (nextc != 'f' || nextc != 'm' || nextc != 't' || nextc != ' ') break; 00123 unsigned formatLength; 00124 if (!get4Bytes(fid, formatLength)) break; 00125 unsigned short audioFormat; 00126 if (!get2Bytes(fid, audioFormat)) break; 00127 00128 fAudioFormat = (unsigned char)audioFormat; 00129 if (fAudioFormat != WA_PCM && fAudioFormat != WA_PCMA && fAudioFormat != WA_PCMU) { 00130 // not PCM/PCMU/PCMA - we can't handle this 00131 env.setResultMsg("Audio format is not PCM/PCMU/PCMA"); 00132 break; 00133 } 00134 unsigned short numChannels; 00135 if (!get2Bytes(fid, numChannels)) break; 00136 fNumChannels = (unsigned char)numChannels; 00137 if (fNumChannels < 1 || fNumChannels > 2) { // invalid # channels 00138 char errMsg[100]; 00139 sprintf(errMsg, "Bad # channels: %d", fNumChannels); 00140 env.setResultMsg(errMsg); 00141 break; 00142 } 00143 if (!get4Bytes(fid, fSamplingFrequency)) break; 00144 if (fSamplingFrequency == 0) { 00145 env.setResultMsg("Bad sampling frequency: 0"); 00146 break; 00147 } 00148 if (!skipBytes(fid, 6)) break; 00149 unsigned short bitsPerSample; 00150 if (!get2Bytes(fid, bitsPerSample)) break; 00151 fBitsPerSample = (unsigned char)bitsPerSample; 00152 if (fBitsPerSample == 0) { 00153 env.setResultMsg("Bad bits-per-sample: 0"); 00154 break; 00155 } 00156 if (!skipBytes(fid, formatLength - 16)) break; 00157 00158 // FACT chunk (optional): 00159 int c = nextc; 00160 if (c == 'f') { 00161 if (nextc != 'a' || nextc != 'c' || nextc != 't') break; 00162 unsigned factLength; 00163 if (!get4Bytes(fid, factLength)) break; 00164 if (!skipBytes(fid, factLength)) break; 00165 c = nextc; 00166 } 00167 00168 // DATA Chunk: 00169 if (c != 'd' || nextc != 'a' || nextc != 't' || nextc != 'a') break; 00170 if (!skipBytes(fid, 4)) break; 00171 00172 // The header is good; the remaining data are the sample bytes. 00173 fWAVHeaderSize = ftell(fid); 00174 success = True; 00175 } while (0); 00176 00177 if (!success) { 00178 env.setResultMsg("Bad WAV file format"); 00179 // Set "fBitsPerSample" to zero, to indicate failure: 00180 fBitsPerSample = 0; 00181 return; 00182 } 00183 00184 fPlayTimePerSample = 1e6/(double)fSamplingFrequency; 00185 00186 // Although PCM is a sample-based format, we group samples into 00187 // 'frames' for efficient delivery to clients. Set up our preferred 00188 // frame size to be close to 20 ms, if possible, but always no greater 00189 // than 1400 bytes (to ensure that it will fit in a single RTP packet) 00190 unsigned maxSamplesPerFrame = (1400*8)/(fNumChannels*fBitsPerSample); 00191 unsigned desiredSamplesPerFrame = (unsigned)(0.02*fSamplingFrequency); 00192 unsigned samplesPerFrame = desiredSamplesPerFrame < maxSamplesPerFrame 00193 ? desiredSamplesPerFrame : maxSamplesPerFrame; 00194 fPreferredFrameSize = (samplesPerFrame*fNumChannels*fBitsPerSample)/8; 00195 }
| WAVAudioFileSource::~WAVAudioFileSource | ( | ) | [protected, virtual] |
Definition at line 197 of file WAVAudioFileSource.cpp.
References CloseInputFile(), and fFid.
00197 { 00198 CloseInputFile(fFid); 00199 }
| WAVAudioFileSource * WAVAudioFileSource::createNew | ( | UsageEnvironment & | env, | |
| char const * | fileName | |||
| ) | [static] |
Definition at line 28 of file WAVAudioFileSource.cpp.
References AudioInputDevice::bitsPerSample(), Medium::close(), env, fFileSize, GetFileSize(), NULL, OpenInputFile(), and WAVAudioFileSource().
Referenced by WAVAudioFileServerMediaSubsession::createNewStreamSource().
00028 { 00029 do { 00030 FILE* fid = OpenInputFile(env, fileName); 00031 if (fid == NULL) break; 00032 00033 WAVAudioFileSource* newSource = new WAVAudioFileSource(env, fid); 00034 if (newSource != NULL && newSource->bitsPerSample() == 0) { 00035 // The WAV file header was apparently invalid. 00036 Medium::close(newSource); 00037 break; 00038 } 00039 00040 newSource->fFileSize = (unsigned)GetFileSize(fileName, fid); 00041 00042 return newSource; 00043 } while (0); 00044 00045 return NULL; 00046 }
| unsigned WAVAudioFileSource::numPCMBytes | ( | ) | const |
Definition at line 48 of file WAVAudioFileSource.cpp.
References fFileSize, and fWAVHeaderSize.
Referenced by WAVAudioFileServerMediaSubsession::createNewStreamSource().
00048 { 00049 if (fFileSize < fWAVHeaderSize) return 0; 00050 return fFileSize - fWAVHeaderSize; 00051 }
| void WAVAudioFileSource::setScaleFactor | ( | int | scale | ) |
Definition at line 53 of file WAVAudioFileSource.cpp.
References AudioInputDevice::fBitsPerSample, fFid, AudioInputDevice::fNumChannels, and fScaleFactor.
Referenced by WAVAudioFileServerMediaSubsession::setStreamSourceScale().
00053 { 00054 fScaleFactor = scale; 00055 00056 if (fScaleFactor < 0 && ftell(fFid) > 0) { 00057 // Because we're reading backwards, seek back one sample, to ensure that 00058 // (i) we start reading the last sample before the start point, and 00059 // (ii) we don't hit end-of-file on the first read. 00060 int const bytesPerSample = (fNumChannels*fBitsPerSample)/8; 00061 fseek(fFid, -bytesPerSample, SEEK_CUR); 00062 } 00063 }
| void WAVAudioFileSource::seekToPCMByte | ( | unsigned | byteNumber | ) |
Definition at line 65 of file WAVAudioFileSource.cpp.
References fFid, fFileSize, and fWAVHeaderSize.
Referenced by WAVAudioFileServerMediaSubsession::seekStreamSource().
00065 { 00066 byteNumber += fWAVHeaderSize; 00067 if (byteNumber > fFileSize) byteNumber = fFileSize; 00068 00069 fseek(fFid, byteNumber, SEEK_SET); 00070 }
| unsigned char WAVAudioFileSource::getAudioFormat | ( | ) |
Definition at line 72 of file WAVAudioFileSource.cpp.
References fAudioFormat.
Referenced by WAVAudioFileServerMediaSubsession::createNewStreamSource().
00072 { 00073 return fAudioFormat; 00074 }
| void WAVAudioFileSource::doGetNextFrame | ( | ) | [private, virtual] |
Implements FramedSource.
Definition at line 203 of file WAVAudioFileSource.cpp.
References FramedSource::afterGetting(), Medium::envir(), AudioInputDevice::fBitsPerSample, FramedSource::fDurationInMicroseconds, fFid, FramedSource::fFrameSize, fLastPlayTime, FramedSource::fMaxSize, AudioInputDevice::fNumChannels, fPlayTimePerSample, fPreferredFrameSize, FramedSource::fPresentationTime, fScaleFactor, FramedSource::fTo, FramedSource::handleClosure(), Medium::nextTask(), NULL, TaskScheduler::scheduleDelayedTask(), and UsageEnvironment::taskScheduler().
00203 { 00204 if (feof(fFid) || ferror(fFid)) { 00205 handleClosure(this); 00206 return; 00207 } 00208 00209 // Try to read as many bytes as will fit in the buffer provided 00210 // (or "fPreferredFrameSize" if less) 00211 if (fPreferredFrameSize < fMaxSize) { 00212 fMaxSize = fPreferredFrameSize; 00213 } 00214 unsigned const bytesPerSample = (fNumChannels*fBitsPerSample)/8; 00215 unsigned bytesToRead = fMaxSize - fMaxSize%bytesPerSample; 00216 if (fScaleFactor == 1) { 00217 // Common case - read samples in bulk: 00218 fFrameSize = fread(fTo, 1, bytesToRead, fFid); 00219 } else { 00220 // We read every 'fScaleFactor'th sample: 00221 fFrameSize = 0; 00222 while (bytesToRead > 0) { 00223 size_t bytesRead = fread(fTo, 1, bytesPerSample, fFid); 00224 if (bytesRead <= 0) break; 00225 fTo += bytesRead; 00226 fFrameSize += bytesRead; 00227 bytesToRead -= bytesRead; 00228 00229 // Seek to the appropriate place for the next sample: 00230 fseek(fFid, (fScaleFactor-1)*bytesPerSample, SEEK_CUR); 00231 } 00232 } 00233 00234 // Set the 'presentation time' and 'duration' of this frame: 00235 if (fPresentationTime.tv_sec == 0 && fPresentationTime.tv_usec == 0) { 00236 // This is the first frame, so use the current time: 00237 gettimeofday(&fPresentationTime, NULL); 00238 } else { 00239 // Increment by the play time of the previous data: 00240 unsigned uSeconds = fPresentationTime.tv_usec + fLastPlayTime; 00241 fPresentationTime.tv_sec += uSeconds/1000000; 00242 fPresentationTime.tv_usec = uSeconds%1000000; 00243 } 00244 00245 // Remember the play time of this data: 00246 fDurationInMicroseconds = fLastPlayTime 00247 = (unsigned)((fPlayTimePerSample*fFrameSize)/bytesPerSample); 00248 00249 // Switch to another task, and inform the reader that he has data: 00250 #if defined(__WIN32__) || defined(_WIN32) 00251 // HACK: One of our applications that uses this source uses an 00252 // implementation of scheduleDelayedTask() that performs very badly 00253 // (chewing up lots of CPU time, apparently polling) on Windows. 00254 // Until this is fixed, we just call our "afterGetting()" function 00255 // directly. This avoids infinite recursion, as long as our sink 00256 // is discontinuous, which is the case for the RTP sink that 00257 // this application uses. ##### 00258 afterGetting(this); 00259 #else 00260 nextTask() = envir().taskScheduler().scheduleDelayedTask(0, 00261 (TaskFunc*)FramedSource::afterGetting, this); 00262 #endif 00263 }
| Boolean WAVAudioFileSource::setInputPort | ( | int | portIndex | ) | [private, virtual] |
Implements AudioInputDevice.
Definition at line 265 of file WAVAudioFileSource.cpp.
References True.
00265 { 00266 return True; 00267 }
| double WAVAudioFileSource::getAverageLevel | ( | ) | const [private, virtual] |
| unsigned char AudioInputDevice::bitsPerSample | ( | ) | const [inline, inherited] |
Definition at line 38 of file AudioInputDevice.hh.
References AudioInputDevice::fBitsPerSample.
Referenced by createNew(), WAVAudioFileServerMediaSubsession::createNewStreamSource(), and WAVAudioFileSource().
00038 { return fBitsPerSample; }
| unsigned char AudioInputDevice::numChannels | ( | ) | const [inline, inherited] |
Definition at line 39 of file AudioInputDevice.hh.
References AudioInputDevice::fNumChannels.
Referenced by WAVAudioFileServerMediaSubsession::createNewStreamSource(), and WAVAudioFileSource().
00039 { return fNumChannels; }
| unsigned AudioInputDevice::samplingFrequency | ( | ) | const [inline, inherited] |
Definition at line 40 of file AudioInputDevice.hh.
References AudioInputDevice::fSamplingFrequency.
Referenced by WAVAudioFileServerMediaSubsession::createNewStreamSource().
00040 { return fSamplingFrequency; }
| static AudioInputDevice* AudioInputDevice::createNew | ( | UsageEnvironment & | env, | |
| int | inputPortNumber, | |||
| unsigned char | bitsPerSample, | |||
| unsigned char | numChannels, | |||
| unsigned | samplingFrequency, | |||
| unsigned | granularityInMS = 20 | |||
| ) | [static, inherited] |
| static AudioPortNames* AudioInputDevice::getPortNames | ( | ) | [static, inherited] |
| Boolean FramedSource::lookupByName | ( | UsageEnvironment & | env, | |
| char const * | sourceName, | |||
| FramedSource *& | resultSource | |||
| ) | [static, inherited] |
Definition at line 41 of file FramedSource.cpp.
References env, False, MediaSource::isFramedSource(), MediaSource::lookupByName(), NULL, and True.
Referenced by MP3ADUinterleaverBase::getInputSource().
00042 { 00043 resultSource = NULL; // unless we succeed 00044 00045 MediaSource* source; 00046 if (!MediaSource::lookupByName(env, sourceName, source)) return False; 00047 00048 if (!source->isFramedSource()) { 00049 env.setResultMsg(sourceName, " is not a framed source"); 00050 return False; 00051 } 00052 00053 resultSource = (FramedSource*)source; 00054 return True; 00055 }
| Boolean MediaSource::lookupByName | ( | UsageEnvironment & | env, | |
| char const * | sourceName, | |||
| MediaSource *& | resultSource | |||
| ) | [static, inherited] |
Definition at line 62 of file MediaSource.cpp.
References env, False, Medium::isSource(), Medium::lookupByName(), NULL, and True.
Referenced by RTPSource::lookupByName(), and FramedSource::lookupByName().
00064 { 00065 resultSource = NULL; // unless we succeed 00066 00067 Medium* medium; 00068 if (!Medium::lookupByName(env, sourceName, medium)) return False; 00069 00070 if (!medium->isSource()) { 00071 env.setResultMsg(sourceName, " is not a media source"); 00072 return False; 00073 } 00074 00075 resultSource = (MediaSource*)medium; 00076 return True; 00077 }
| Boolean Medium::lookupByName | ( | UsageEnvironment & | env, | |
| char const * | mediumName, | |||
| Medium *& | resultMedium | |||
| ) | [static, inherited] |
Definition at line 65 of file Media.cpp.
References env, False, MediaLookupTable::lookup(), NULL, MediaLookupTable::ourMedia(), UsageEnvironment::setResultMsg(), and True.
Referenced by ServerMediaSession::lookupByName(), RTSPServer::lookupByName(), RTSPClient::lookupByName(), RTCPInstance::lookupByName(), MediaSource::lookupByName(), MediaSink::lookupByName(), MediaSession::lookupByName(), and DarwinInjector::lookupByName().
00066 { 00067 resultMedium = MediaLookupTable::ourMedia(env)->lookup(mediumName); 00068 if (resultMedium == NULL) { 00069 env.setResultMsg("Medium ", mediumName, " does not exist"); 00070 return False; 00071 } 00072 00073 return True; 00074 }
| void FramedSource::getNextFrame | ( | unsigned char * | to, | |
| unsigned | maxSize, | |||
| afterGettingFunc * | afterGettingFunc, | |||
| void * | afterGettingClientData, | |||
| onCloseFunc * | onCloseFunc, | |||
| void * | onCloseClientData | |||
| ) | [inherited] |
Definition at line 57 of file FramedSource.cpp.
References FramedSource::doGetNextFrame(), Medium::envir(), FramedSource::fAfterGettingClientData, FramedSource::fAfterGettingFunc, FramedSource::fDurationInMicroseconds, FramedSource::fIsCurrentlyAwaitingData, FramedSource::fMaxSize, FramedSource::fNumTruncatedBytes, FramedSource::fOnCloseClientData, FramedSource::fOnCloseFunc, FramedSource::fTo, and True.
Referenced by MPEG2TransportStreamFramer::afterGettingFrame1(), InputESSourceRecord::askForNewData(), MPEG2TransportStreamFromPESSource::awaitNewBuffer(), QuickTimeFileSink::continuePlaying(), DummySink::continuePlaying(), HTTPSink::continuePlaying(), FileSink::continuePlaying(), AVIFileSink::continuePlaying(), BasicUDPSink::continuePlaying1(), EndianSwap16::doGetNextFrame(), HostFromNetworkOrder16::doGetNextFrame(), NetworkFromHostOrder16::doGetNextFrame(), PCMFromuLawAudioSource::doGetNextFrame(), uLawFromPCMAudioSource::doGetNextFrame(), QCELPDeinterleaver::doGetNextFrame(), MPEG4VideoStreamDiscreteFramer::doGetNextFrame(), MPEG2TransportStreamFramer::doGetNextFrame(), MPEG2IFrameIndexFromTransportStream::doGetNextFrame(), MPEG1or2VideoStreamDiscreteFramer::doGetNextFrame(), MP3ADUTranscoder::doGetNextFrame(), MP3ADUdeinterleaver::doGetNextFrame(), MP3ADUinterleaver::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), MultiFramedRTPSink::packFrame(), AC3AudioStreamParser::readAndSaveAFrame(), and MPEG2TransportStreamTrickModeFilter::readTransportPacket().
00061 { 00062 // Make sure we're not already being read: 00063 if (fIsCurrentlyAwaitingData) { 00064 envir() << "FramedSource[" << this << "]::getNextFrame(): attempting to read more than once at the same time!\n"; 00065 exit(1); 00066 } 00067 00068 fTo = to; 00069 fMaxSize = maxSize; 00070 fNumTruncatedBytes = 0; // by default; could be changed by doGetNextFrame() 00071 fDurationInMicroseconds = 0; // by default; could be changed by doGetNextFrame() 00072 fAfterGettingFunc = afterGettingFunc; 00073 fAfterGettingClientData = afterGettingClientData; 00074 fOnCloseFunc = onCloseFunc; 00075 fOnCloseClientData = onCloseClientData; 00076 fIsCurrentlyAwaitingData = True; 00077 00078 doGetNextFrame(); 00079 }
| void FramedSource::handleClosure | ( | void * | clientData | ) | [static, inherited] |
Definition at line 95 of file FramedSource.cpp.
References False, FramedSource::fIsCurrentlyAwaitingData, FramedSource::fOnCloseClientData, FramedSource::fOnCloseFunc, and NULL.
Referenced by MPEG2TransportStreamFramer::afterGettingFrame1(), MP3ADUTranscoder::afterGettingFrame1(), InputESSourceRecord::askForNewData(), MPEG2TransportStreamFromPESSource::awaitNewBuffer(), doGetNextFrame(), EndianSwap16::doGetNextFrame(), HostFromNetworkOrder16::doGetNextFrame(), NetworkFromHostOrder16::doGetNextFrame(), PCMFromuLawAudioSource::doGetNextFrame(), uLawFromPCMAudioSource::doGetNextFrame(), QCELPDeinterleaver::doGetNextFrame(), MPEG4VideoStreamDiscreteFramer::doGetNextFrame(), MPEG2TransportStreamFramer::doGetNextFrame(), MPEG1or2VideoStreamDiscreteFramer::doGetNextFrame(), MPEG1or2DemuxedElementaryStream::doGetNextFrame(), MP3FileSource::doGetNextFrame(), MP3ADUTranscoder::doGetNextFrame(), MP3ADUdeinterleaver::doGetNextFrame(), MP3ADUinterleaver::doGetNextFrame(), ADUFromMP3Source::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), DeviceSource::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), ByteStreamFileSource::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), ByteStreamFileSource::doReadFromFile(), SegmentQueue::enqueueNewSegment(), MPEG2IFrameIndexFromTransportStream::handleInputClosure1(), and MPEG2TransportStreamTrickModeFilter::onSourceClosure1().
00095 { 00096 FramedSource* source = (FramedSource*)clientData; 00097 source->fIsCurrentlyAwaitingData = False; // because we got a close instead 00098 if (source->fOnCloseFunc != NULL) { 00099 (*(source->fOnCloseFunc))(source->fOnCloseClientData); 00100 } 00101 }
| void FramedSource::stopGettingFrames | ( | ) | [inherited] |
Definition at line 103 of file FramedSource.cpp.
References FramedSource::doStopGettingFrames(), False, and FramedSource::fIsCurrentlyAwaitingData.
Referenced by MPEG2TransportStreamFromPESSource::doStopGettingFrames(), FramedFilter::doStopGettingFrames(), AMRDeinterleaver::doStopGettingFrames(), and MediaSink::stopPlaying().
00103 { 00104 fIsCurrentlyAwaitingData = False; // indicates that we can be read again 00105 00106 // Perform any specialized action now: 00107 doStopGettingFrames(); 00108 }
| unsigned FramedSource::maxFrameSize | ( | ) | const [virtual, inherited] |
Reimplemented in MPEG1or2DemuxedElementaryStream.
Definition at line 116 of file FramedSource.cpp.
Referenced by StreamParser::ensureValidBytes1().
| Boolean FramedSource::isCurrentlyAwaitingData | ( | ) | const [inline, inherited] |
Definition at line 60 of file FramedSource.hh.
References FramedSource::fIsCurrentlyAwaitingData.
Referenced by afterPlaying(), InputESSourceRecord::askForNewData(), MPEG2TransportStreamFromESSource::awaitNewBuffer(), QuickTimeFileSink::continuePlaying(), AVIFileSink::continuePlaying(), DeviceSource::deliverFrame(), QCELPDeinterleaver::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), ByteStreamFileSource::fileReadableHandler(), and BasicUDPSource::incomingPacketHandler1().
00060 {return fIsCurrentlyAwaitingData;}
| void FramedSource::afterGetting | ( | FramedSource * | source | ) | [static, protected, inherited] |
Definition at line 81 of file FramedSource.cpp.
References FramedSource::fAfterGettingClientData, FramedSource::fAfterGettingFunc, False, FramedSource::fDurationInMicroseconds, FramedSource::fFrameSize, FramedSource::fIsCurrentlyAwaitingData, FramedSource::fNumTruncatedBytes, FramedSource::fPresentationTime, and NULL.
Referenced by ByteStreamMultiFileSource::afterGettingFrame(), EndianSwap16::afterGettingFrame1(), HostFromNetworkOrder16::afterGettingFrame1(), NetworkFromHostOrder16::afterGettingFrame1(), PCMFromuLawAudioSource::afterGettingFrame1(), uLawFromPCMAudioSource::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG1or2DemuxedElementaryStream::afterGettingFrame1(), MP3ADUTranscoder::afterGettingFrame1(), MPEG2TransportStreamTrickModeFilter::attemptDeliveryToClient(), MPEGVideoStreamFramer::continueReadProcessing(), MPEG1or2AudioStreamFramer::continueReadProcessing(), H263plusVideoStreamFramer::continueReadProcessing(), DeviceSource::deliverFrame(), MPEG2IFrameIndexFromTransportStream::deliverIndexRecord(), doGetNextFrame(), QCELPDeinterleaver::doGetNextFrame(), MPEG2TransportStreamTrickModeFilter::doGetNextFrame(), MPEG2TransportStreamMultiplexor::doGetNextFrame(), MP3FileSource::doGetNextFrame(), MP3ADUdeinterleaver::doGetNextFrame(), MP3ADUinterleaver::doGetNextFrame(), MP3FromADUSource::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), ByteStreamFileSource::doReadFromFile(), BasicUDPSource::incomingPacketHandler1(), and AC3AudioStreamFramer::parseNextFrame().
00081 { 00082 source->fIsCurrentlyAwaitingData = False; 00083 // indicates that we can be read again 00084 // Note that this needs to be done here, in case the "fAfterFunc" 00085 // called below tries to read another frame (which it usually will) 00086 00087 if (source->fAfterGettingFunc != NULL) { 00088 (*(source->fAfterGettingFunc))(source->fAfterGettingClientData, 00089 source->fFrameSize, source->fNumTruncatedBytes, 00090 source->fPresentationTime, 00091 source->fDurationInMicroseconds); 00092 } 00093 }
| void FramedSource::doStopGettingFrames | ( | ) | [protected, virtual, inherited] |
Reimplemented in AMRDeinterleaver, BasicUDPSource, ByteStreamFileSource, FramedFilter, MPEG1or2DemuxedElementaryStream, MPEG2TransportStreamFramer, MPEG2TransportStreamFromESSource, MPEG2TransportStreamFromPESSource, MPEG2TransportStreamTrickModeFilter, and MultiFramedRTPSource.
Definition at line 110 of file FramedSource.cpp.
Referenced by FramedSource::stopGettingFrames().
00110 { 00111 // Default implementation: Do nothing 00112 // Subclasses may wish to specialize this so as to ensure that a 00113 // subsequent reader can pick up where this one left off. 00114 }
| void MediaSource::getAttributes | ( | ) | const [virtual, inherited] |
Reimplemented in FramedFilter, MP3ADUTranscoder, MP3FileSource, and RTPSource.
Definition at line 79 of file MediaSource.cpp.
References Medium::envir(), and UsageEnvironment::setResultMsg().
Referenced by MP3ADUTranscoder::getAttributes(), and FramedFilter::getAttributes().
00079 { 00080 // Default implementation 00081 envir().setResultMsg(""); 00082 }
| char const * MediaSource::MIMEtype | ( | ) | const [virtual, inherited] |
Reimplemented in RawAMRRTPSource, AC3AudioRTPSource, FramedFilter, H261VideoRTPSource, H263plusVideoRTPSource, H264VideoRTPSource, JPEGVideoRTPSource, ADUFromMP3Source, MP3FromADUSource, MP3ADURTPSource, MP3FileSource, MPEG1or2AudioRTPSource, MPEG1or2DemuxedElementaryStream, MPEG1or2VideoRTPSource, MPEG4ESVideoRTPSource, MPEG4GenericRTPSource, MPEG4LATMAudioRTPSource, QuickTimeGenericRTPSource, SimpleRTPSource, and RawQCELPRTPSource.
Definition at line 36 of file MediaSource.cpp.
Referenced by HTTPSink::continuePlaying(), MP3ADUTranscoder::createNew(), MP3FromADUSource::createNew(), ADUFromMP3Source::createNew(), MP3ADUinterleaverBase::getInputSource(), MediaSession::initiateByMediaType(), SimpleRTPSource::MIMEtype(), QuickTimeGenericRTPSource::MIMEtype(), FramedFilter::MIMEtype(), and MPEG1or2DemuxedElementaryStream::MPEG1or2DemuxedElementaryStream().
| Boolean MediaSource::isRTPSource | ( | ) | const [virtual, inherited] |