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


Public Types | |
| typedef void( | afterPlayingFunc )(void *clientData) |
Public Member Functions | |
| Boolean | startPlaying (afterPlayingFunc *afterFunc, void *afterClientData) |
| unsigned | numActiveSubsessions () const |
| UsageEnvironment & | envir () const |
| char const * | name () const |
| virtual Boolean | isSource () 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 AVIFileSink * | createNew (UsageEnvironment &env, MediaSession &inputSession, char const *outputFileName, unsigned bufferSize=20000, unsigned short movieWidth=240, unsigned short movieHeight=180, unsigned movieFPS=15, Boolean packetLossCompensate=False) |
| static Boolean | lookupByName (UsageEnvironment &env, char const *mediumName, Medium *&resultMedium) |
| static void | close (UsageEnvironment &env, char const *mediumName) |
| static void | close (Medium *medium) |
Protected Member Functions | |
| TaskToken & | nextTask () |
Private Member Functions | |
| AVIFileSink (UsageEnvironment &env, MediaSession &inputSession, char const *outputFileName, unsigned bufferSize, unsigned short movieWidth, unsigned short movieHeight, unsigned movieFPS, Boolean packetLossCompensate) | |
| virtual | ~AVIFileSink () |
| Boolean | continuePlaying () |
| void | onSourceClosure1 () |
| void | addIndexRecord (class AVIIndexRecord *newIndexRecord) |
| void | completeOutputFile () |
| unsigned | addWord (unsigned word) |
| unsigned | addHalfWord (unsigned short halfWord) |
| unsigned | addByte (unsigned char byte) |
| unsigned | addZeroWords (unsigned numWords) |
| unsigned | add4ByteString (char const *str) |
| void | setWord (unsigned filePosn, unsigned size) |
| _header (AVI) | |
| _header (hdrl) | |
| _header (avih) | |
| _header (strl) | |
| _header (strh) | |
| _header (strf) | |
| _header (JUNK) | |
| _header (movi) | |
Static Private Member Functions | |
| static void | afterGettingFrame (void *clientData, unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds) |
| static void | onSourceClosure (void *clientData) |
| static void | onRTCPBye (void *clientData) |
Private Attributes | |
| MediaSession & | fInputSession |
| FILE * | fOutFid |
| AVIIndexRecord * | fIndexRecordsHead |
| AVIIndexRecord * | fIndexRecordsTail |
| unsigned | fNumIndexRecords |
| unsigned | fBufferSize |
| Boolean | fPacketLossCompensate |
| Boolean | fAreCurrentlyBeingPlayed |
| afterPlayingFunc * | fAfterFunc |
| void * | fAfterClientData |
| unsigned | fNumSubsessions |
| unsigned | fNumBytesWritten |
| timeval | fStartTime |
| Boolean | fHaveCompletedOutputFile |
| unsigned short | fMovieWidth |
| unsigned short | fMovieHeight |
| unsigned | fMovieFPS |
| unsigned | fRIFFSizePosition |
| unsigned | fRIFFSizeValue |
| unsigned | fAVIHMaxBytesPerSecondPosition |
| unsigned | fAVIHFrameCountPosition |
| unsigned | fMoviSizePosition |
| unsigned | fMoviSizeValue |
| AVISubsessionIOState * | fCurrentIOState |
| unsigned | fJunkNumber |
Friends | |
| class | AVISubsessionIOState |
| class | MediaLookupTable |
Definition at line 28 of file AVIFileSink.hh.
| typedef void( AVIFileSink::afterPlayingFunc)(void *clientData) |
Definition at line 39 of file AVIFileSink.hh.
| AVIFileSink::AVIFileSink | ( | UsageEnvironment & | env, | |
| MediaSession & | inputSession, | |||
| char const * | outputFileName, | |||
| unsigned | bufferSize, | |||
| unsigned short | movieWidth, | |||
| unsigned short | movieHeight, | |||
| unsigned | movieFPS, | |||
| Boolean | packetLossCompensate | |||
| ) | [private] |
Definition at line 123 of file AVIFileSink.cpp.
References AVISubsessionIOState, env, fInputSession, fMovieFPS, fMovieHeight, fMovieWidth, fNumSubsessions, fOutFid, iter, MediaSubsession::miscPtr, MediaSubsessionIterator::next(), NULL, onRTCPBye(), OpenOutputFile(), MediaSubsession::readSource(), MediaSubsession::rtcpInstance(), RTCPInstance::setByeHandler(), subsession, MediaSubsession::videoFPS(), MediaSubsession::videoHeight(), and MediaSubsession::videoWidth().
Referenced by createNew().
00129 : Medium(env), fInputSession(inputSession), 00130 fIndexRecordsHead(NULL), fIndexRecordsTail(NULL), fNumIndexRecords(0), 00131 fBufferSize(bufferSize), fPacketLossCompensate(packetLossCompensate), 00132 fAreCurrentlyBeingPlayed(False), fNumSubsessions(0), fNumBytesWritten(0), 00133 fHaveCompletedOutputFile(False), 00134 fMovieWidth(movieWidth), fMovieHeight(movieHeight), fMovieFPS(movieFPS) { 00135 fOutFid = OpenOutputFile(env, outputFileName); 00136 if (fOutFid == NULL) return; 00137 00138 // Set up I/O state for each input subsession: 00139 MediaSubsessionIterator iter(fInputSession); 00140 MediaSubsession* subsession; 00141 while ((subsession = iter.next()) != NULL) { 00142 // Ignore subsessions without a data source: 00143 FramedSource* subsessionSource = subsession->readSource(); 00144 if (subsessionSource == NULL) continue; 00145 00146 // If "subsession's" SDP description specified screen dimension 00147 // or frame rate parameters, then use these. 00148 if (subsession->videoWidth() != 0) { 00149 fMovieWidth = subsession->videoWidth(); 00150 } 00151 if (subsession->videoHeight() != 0) { 00152 fMovieHeight = subsession->videoHeight(); 00153 } 00154 if (subsession->videoFPS() != 0) { 00155 fMovieFPS = subsession->videoFPS(); 00156 } 00157 00158 AVISubsessionIOState* ioState 00159 = new AVISubsessionIOState(*this, *subsession); 00160 subsession->miscPtr = (void*)ioState; 00161 00162 // Also set a 'BYE' handler for this subsession's RTCP instance: 00163 if (subsession->rtcpInstance() != NULL) { 00164 subsession->rtcpInstance()->setByeHandler(onRTCPBye, ioState); 00165 } 00166 00167 ++fNumSubsessions; 00168 } 00169 00170 // Begin by writing an AVI header: 00171 addFileHeader_AVI(); 00172 }
| AVIFileSink::~AVIFileSink | ( | ) | [private, virtual] |
Definition at line 174 of file AVIFileSink.cpp.
References CloseOutputFile(), completeOutputFile(), fIndexRecordsHead, fInputSession, fOutFid, iter, MediaSubsession::miscPtr, AVIIndexRecord::next(), MediaSubsessionIterator::next(), NULL, and subsession.
00174 { 00175 completeOutputFile(); 00176 00177 // Then, delete each active "AVISubsessionIOState": 00178 MediaSubsessionIterator iter(fInputSession); 00179 MediaSubsession* subsession; 00180 while ((subsession = iter.next()) != NULL) { 00181 AVISubsessionIOState* ioState 00182 = (AVISubsessionIOState*)(subsession->miscPtr); 00183 if (ioState == NULL) continue; 00184 00185 delete ioState; 00186 } 00187 00188 // Then, delete the index records: 00189 AVIIndexRecord* cur = fIndexRecordsHead; 00190 while (cur != NULL) { 00191 AVIIndexRecord* next = cur->next(); 00192 delete cur; 00193 cur = next; 00194 } 00195 00196 // Finally, close our output file: 00197 CloseOutputFile(fOutFid); 00198 }
| AVIFileSink * AVIFileSink::createNew | ( | UsageEnvironment & | env, | |
| MediaSession & | inputSession, | |||
| char const * | outputFileName, | |||
| unsigned | bufferSize = 20000, |
|||
| unsigned short | movieWidth = 240, |
|||
| unsigned short | movieHeight = 180, |
|||
| unsigned | movieFPS = 15, |
|||
| Boolean | packetLossCompensate = False | |||
| ) | [static] |
Definition at line 201 of file AVIFileSink.cpp.
References AVIFileSink(), Medium::close(), env, fOutFid, and NULL.
Referenced by setupStreams().
00205 { 00206 AVIFileSink* newSink = 00207 new AVIFileSink(env, inputSession, outputFileName, bufferSize, 00208 movieWidth, movieHeight, movieFPS, packetLossCompensate); 00209 if (newSink == NULL || newSink->fOutFid == NULL) { 00210 Medium::close(newSink); 00211 return NULL; 00212 } 00213 00214 return newSink; 00215 }
| Boolean AVIFileSink::startPlaying | ( | afterPlayingFunc * | afterFunc, | |
| void * | afterClientData | |||
| ) |
Definition at line 217 of file AVIFileSink.cpp.
References continuePlaying(), Medium::envir(), fAfterClientData, fAfterFunc, False, fAreCurrentlyBeingPlayed, UsageEnvironment::setResultMsg(), and True.
Referenced by setupStreams().
00218 { 00219 // Make sure we're not already being played: 00220 if (fAreCurrentlyBeingPlayed) { 00221 envir().setResultMsg("This sink has already been played"); 00222 return False; 00223 } 00224 00225 fAreCurrentlyBeingPlayed = True; 00226 fAfterFunc = afterFunc; 00227 fAfterClientData = afterClientData; 00228 00229 return continuePlaying(); 00230 }
| unsigned AVIFileSink::numActiveSubsessions | ( | ) | const [inline] |
Definition at line 43 of file AVIFileSink.hh.
References fNumSubsessions.
Referenced by checkForPacketArrival().
00043 { return fNumSubsessions; }
| Boolean AVIFileSink::continuePlaying | ( | ) | [private] |
Definition at line 232 of file AVIFileSink.cpp.
References afterGettingFrame(), SubsessionBuffer::bytesAvailable(), SubsessionBuffer::dataEnd(), Medium::envir(), False, AVISubsessionIOState::fBuffer, fInputSession, FramedSource::getNextFrame(), FramedSource::isCurrentlyAwaitingData(), iter, MediaSubsession::miscPtr, MediaSubsessionIterator::next(), NULL, onSourceClosure(), MediaSubsession::readSource(), UsageEnvironment::setResultMsg(), subsession, and True.
Referenced by AVISubsessionIOState::afterGettingFrame(), and startPlaying().
00232 { 00233 // Run through each of our input session's 'subsessions', 00234 // asking for a frame from each one: 00235 Boolean haveActiveSubsessions = False; 00236 MediaSubsessionIterator iter(fInputSession); 00237 MediaSubsession* subsession; 00238 while ((subsession = iter.next()) != NULL) { 00239 FramedSource* subsessionSource = subsession->readSource(); 00240 if (subsessionSource == NULL) continue; 00241 00242 if (subsessionSource->isCurrentlyAwaitingData()) continue; 00243 00244 AVISubsessionIOState* ioState 00245 = (AVISubsessionIOState*)(subsession->miscPtr); 00246 if (ioState == NULL) continue; 00247 00248 haveActiveSubsessions = True; 00249 unsigned char* toPtr = ioState->fBuffer->dataEnd(); 00250 unsigned toSize = ioState->fBuffer->bytesAvailable(); 00251 subsessionSource->getNextFrame(toPtr, toSize, 00252 afterGettingFrame, ioState, 00253 onSourceClosure, ioState); 00254 } 00255 if (!haveActiveSubsessions) { 00256 envir().setResultMsg("No subsessions are currently active"); 00257 return False; 00258 } 00259 00260 return True; 00261 }
| void AVIFileSink::afterGettingFrame | ( | void * | clientData, | |
| unsigned | frameSize, | |||
| unsigned | numTruncatedBytes, | |||
| struct timeval | presentationTime, | |||
| unsigned | durationInMicroseconds | |||
| ) | [static, private] |
Definition at line 264 of file AVIFileSink.cpp.
References AVISubsessionIOState::afterGettingFrame(), and AVISubsessionIOState::envir().
Referenced by continuePlaying().
00267 { 00268 AVISubsessionIOState* ioState = (AVISubsessionIOState*)clientData; 00269 if (numTruncatedBytes > 0) { 00270 ioState->envir() << "AVIFileSink::afterGettingFrame(): The input frame data was too large for our buffer. " 00271 << numTruncatedBytes 00272 << " bytes of trailing data was dropped! Correct this by increasing the \"bufferSize\" parameter in the \"createNew()\" call.\n"; 00273 } 00274 ioState->afterGettingFrame(packetDataSize, presentationTime); 00275 }
| void AVIFileSink::onSourceClosure | ( | void * | clientData | ) | [static, private] |
Definition at line 277 of file AVIFileSink.cpp.
References AVISubsessionIOState::onSourceClosure().
Referenced by continuePlaying().
00277 { 00278 AVISubsessionIOState* ioState = (AVISubsessionIOState*)clientData; 00279 ioState->onSourceClosure(); 00280 }
| void AVIFileSink::onSourceClosure1 | ( | ) | [private] |
Definition at line 282 of file AVIFileSink.cpp.
References completeOutputFile(), fAfterClientData, fAfterFunc, fInputSession, AVISubsessionIOState::fOurSourceIsActive, iter, MediaSubsession::miscPtr, MediaSubsessionIterator::next(), NULL, and subsession.
Referenced by AVISubsessionIOState::onSourceClosure().
00282 { 00283 // Check whether *all* of the subsession sources have closed. 00284 // If not, do nothing for now: 00285 MediaSubsessionIterator iter(fInputSession); 00286 MediaSubsession* subsession; 00287 while ((subsession = iter.next()) != NULL) { 00288 AVISubsessionIOState* ioState 00289 = (AVISubsessionIOState*)(subsession->miscPtr); 00290 if (ioState == NULL) continue; 00291 00292 if (ioState->fOurSourceIsActive) return; // this source hasn't closed 00293 } 00294 00295 completeOutputFile(); 00296 00297 // Call our specified 'after' function: 00298 if (fAfterFunc != NULL) { 00299 (*fAfterFunc)(fAfterClientData); 00300 } 00301 }
| void AVIFileSink::onRTCPBye | ( | void * | clientData | ) | [static, private] |
Definition at line 303 of file AVIFileSink.cpp.
References MediaSubsession::codecName(), AVISubsessionIOState::envir(), AVISubsessionIOState::fOurSink, AVISubsessionIOState::fOurSubsession, fStartTime, MediaSubsession::mediumName(), NULL, AVISubsessionIOState::onSourceClosure(), and subsession.
Referenced by AVIFileSink().
00303 { 00304 AVISubsessionIOState* ioState = (AVISubsessionIOState*)clientData; 00305 00306 struct timeval timeNow; 00307 gettimeofday(&timeNow, NULL); 00308 unsigned secsDiff 00309 = timeNow.tv_sec - ioState->fOurSink.fStartTime.tv_sec; 00310 00311 MediaSubsession& subsession = ioState->fOurSubsession; 00312 ioState->envir() << "Received RTCP \"BYE\" on \"" 00313 << subsession.mediumName() 00314 << "/" << subsession.codecName() 00315 << "\" subsession (after " 00316 << secsDiff << " seconds)\n"; 00317 00318 // Handle the reception of a RTCP "BYE" as if the source had closed: 00319 ioState->onSourceClosure(); 00320 }
| void AVIFileSink::addIndexRecord | ( | class AVIIndexRecord * | newIndexRecord | ) | [private] |
Definition at line 322 of file AVIFileSink.cpp.
References fIndexRecordsHead, fIndexRecordsTail, fNumIndexRecords, AVIIndexRecord::next(), and NULL.
Referenced by AVISubsessionIOState::useFrame().
00322 { 00323 if (fIndexRecordsHead == NULL) { 00324 fIndexRecordsHead = newIndexRecord; 00325 } else { 00326 fIndexRecordsTail->next() = newIndexRecord; 00327 } 00328 fIndexRecordsTail = newIndexRecord; 00329 ++fNumIndexRecords; 00330 }
| void AVIFileSink::completeOutputFile | ( | ) | [private] |
Definition at line 332 of file AVIFileSink.cpp.
References add4ByteString(), addWord(), fAVIHFrameCountPosition, fAVIHMaxBytesPerSecondPosition, fHaveCompletedOutputFile, fIndexRecordsHead, fInputSession, AVISubsessionIOState::fIsAudio, AVISubsessionIOState::fIsVideo, AVISubsessionIOState::fMaxBytesPerSecond, fMoviSizePosition, fMoviSizeValue, fNumBytesWritten, AVISubsessionIOState::fNumFrames, fNumIndexRecords, fOutFid, fRIFFSizePosition, fRIFFSizeValue, AVISubsessionIOState::fSTRHFrameCountPosition, iter, MediaSubsession::miscPtr, MediaSubsessionIterator::next(), NULL, setWord(), subsession, and True.
Referenced by onSourceClosure1(), and ~AVIFileSink().
00332 { 00333 if (fHaveCompletedOutputFile || fOutFid == NULL) return; 00334 00335 // Update various AVI 'size' fields to take account of the codec data that 00336 // we've now written to the file: 00337 unsigned maxBytesPerSecond = 0; 00338 unsigned numVideoFrames = 0; 00339 unsigned numAudioFrames = 0; 00340 00342 MediaSubsessionIterator iter(fInputSession); 00343 MediaSubsession* subsession; 00344 while ((subsession = iter.next()) != NULL) { 00345 AVISubsessionIOState* ioState 00346 = (AVISubsessionIOState*)(subsession->miscPtr); 00347 if (ioState == NULL) continue; 00348 00349 maxBytesPerSecond += ioState->fMaxBytesPerSecond; 00350 00351 setWord(ioState->fSTRHFrameCountPosition, ioState->fNumFrames); 00352 if (ioState->fIsVideo) numVideoFrames = ioState->fNumFrames; 00353 else if (ioState->fIsAudio) numAudioFrames = ioState->fNumFrames; 00354 } 00355 00357 add4ByteString("idx1"); 00358 addWord(fNumIndexRecords*4*4); // the size of all of the index records, which come next: 00359 for (AVIIndexRecord* indexRecord = fIndexRecordsHead; indexRecord != NULL; indexRecord = indexRecord->next()) { 00360 addWord(indexRecord->chunkId()); 00361 addWord(indexRecord->flags()); 00362 addWord(indexRecord->offset()); 00363 addWord(indexRecord->size()); 00364 } 00365 00366 fRIFFSizeValue += fNumBytesWritten; 00367 setWord(fRIFFSizePosition, fRIFFSizeValue); 00368 00369 setWord(fAVIHMaxBytesPerSecondPosition, maxBytesPerSecond); 00370 setWord(fAVIHFrameCountPosition, 00371 numVideoFrames > 0 ? numVideoFrames : numAudioFrames); 00372 00373 fMoviSizeValue += fNumBytesWritten; 00374 setWord(fMoviSizePosition, fMoviSizeValue); 00375 00376 // We're done: 00377 fHaveCompletedOutputFile = True; 00378 }
| unsigned AVIFileSink::addWord | ( | unsigned | word | ) | [private] |
Definition at line 562 of file AVIFileSink.cpp.
References addByte().
Referenced by addZeroWords(), completeOutputFile(), if(), setWord(), and AVISubsessionIOState::useFrame().
00562 { 00563 // Add "word" to the file in little-endian order: 00564 addByte(word); addByte(word>>8); 00565 addByte(word>>16); addByte(word>>24); 00566 00567 return 4; 00568 }
| unsigned AVIFileSink::addHalfWord | ( | unsigned short | halfWord | ) | [private] |
| unsigned AVIFileSink::addByte | ( | unsigned char | byte | ) | [inline, private] |
Definition at line 85 of file AVIFileSink.hh.
References fOutFid.
Referenced by add4ByteString(), addHalfWord(), addWord(), and AVISubsessionIOState::useFrame().
00085 { 00086 putc(byte, fOutFid); 00087 return 1; 00088 }
| unsigned AVIFileSink::addZeroWords | ( | unsigned | numWords | ) | [private] |
Definition at line 577 of file AVIFileSink.cpp.
References addWord().
Referenced by if().
00577 { 00578 for (unsigned i = 0; i < numWords; ++i) { 00579 addWord(0); 00580 } 00581 00582 return numWords*4; 00583 }
| unsigned AVIFileSink::add4ByteString | ( | char const * | str | ) | [private] |
Definition at line 585 of file AVIFileSink.cpp.
References addByte().
Referenced by completeOutputFile().
00585 { 00586 addByte(str[0]); addByte(str[1]); addByte(str[2]); 00587 addByte(str[3] == '\0' ? ' ' : str[3]); // e.g., for "AVI " 00588 00589 return 4; 00590 }
| void AVIFileSink::setWord | ( | unsigned | filePosn, | |
| unsigned | size | |||
| ) | [private] |
Definition at line 592 of file AVIFileSink.cpp.
References addWord(), Medium::envir(), fOutFid, UsageEnvironment::getErrno(), and SeekFile64().
Referenced by completeOutputFile().
00592 { 00593 do { 00594 if (SeekFile64(fOutFid, filePosn, SEEK_SET) < 0) break; 00595 addWord(size); 00596 if (SeekFile64(fOutFid, 0, SEEK_END) < 0) break; // go back to where we were 00597 00598 return; 00599 } while (0); 00600 00601 // One of the SeekFile64()s failed, probable because we're not a seekable file 00602 envir() << "AVIFileSink::setWord(): SeekFile64 failed (err " 00603 << envir().getErrno() << ")\n"; 00604 }
| AVIFileSink::_header | ( | AVI | ) | [private] |
| AVIFileSink::_header | ( | hdrl | ) | [private] |
| AVIFileSink::_header | ( | avih | ) | [private] |
| AVIFileSink::_header | ( | strl | ) | [private] |
| AVIFileSink::_header | ( | strh | ) | [private] |
| AVIFileSink::_header | ( | strf | ) | [private] |
| AVIFileSink::_header | ( | JUNK | ) | [private] |
| AVIFileSink::_header | ( | movi | ) | [private] |
| Boolean Medium::lookupByName | ( | UsageEnvironment & | env, | |
| char const * | mediumName, | |||
| Medium *& | resultMedium | |||
| ) | [static, inherited] |
Definition at line 41 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().
00042 { 00043 resultMedium = MediaLookupTable::ourMedia(env)->lookup(mediumName); 00044 if (resultMedium == NULL) { 00045 env.setResultMsg("Medium ", mediumName, " does not exist"); 00046 return False; 00047 } 00048 00049 return True; 00050 }
| void Medium::close | ( | UsageEnvironment & | env, | |
| char const * | mediumName | |||
| ) | [static, inherited] |
Definition at line 52 of file Media.cpp.
References env, MediaLookupTable::ourMedia(), and MediaLookupTable::remove().
Referenced by afterPlaying(), Medium::close(), closeMediaSinks(), OnDemandServerMediaSubsession::closeStreamSource(), continueAfterTEARDOWN(), WAVAudioFileSource::createNew(), QuickTimeFileSink::createNew(), QCELPAudioRTPSource::createNew(), MP3FileSource::createNew(), createNew(), AMRAudioRTPSource::createNew(), WAVAudioFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MediaSubsession::deInitiate(), ServerMediaSession::deleteAllSubsessions(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET(), MediaSubsession::initiate(), MPEG1or2ProgramStreamFileDuration(), MPEG1or2Demux::noteElementaryStreamDeletion(), ByteStreamMultiFileSource::onSourceClosure1(), StreamState::reclaim(), RTSPServer::removeServerMediaSession(), ProxyServerMediaSession::resetDESCRIBEState(), OnDemandServerMediaSubsession::sdpLines(), shutdownStream(), subsessionAfterPlaying(), ClientTrickPlayState::updateStateOnScaleChange(), AMRDeinterleaver::~AMRDeinterleaver(), ByteStreamMultiFileSource::~ByteStreamMultiFileSource(), DarwinInjector::~DarwinInjector(), FramedFilter::~FramedFilter(), H264VideoRTPSink::~H264VideoRTPSink(), InputESSourceRecord::~InputESSourceRecord(), MatroskaFileParser::~MatroskaFileParser(), MatroskaFileServerDemux::~MatroskaFileServerDemux(), MPEG1or2Demux::~MPEG1or2Demux(), MPEG1or2FileServerDemux::~MPEG1or2FileServerDemux(), MPEG2TransportFileServerMediaSubsession::~MPEG2TransportFileServerMediaSubsession(), MPEG2TransportStreamFromPESSource::~MPEG2TransportStreamFromPESSource(), ProxyServerMediaSession::~ProxyServerMediaSession(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::~RTSPClientConnectionSupportingHTTPStreaming(), ServerMediaSubsession::~ServerMediaSubsession(), StreamClientState::~StreamClientState(), StreamReplicator::~StreamReplicator(), and T140TextRTPSink::~T140TextRTPSink().
00052 { 00053 MediaLookupTable::ourMedia(env)->remove(name); 00054 }
| void Medium::close | ( | Medium * | medium | ) | [static, inherited] |
Definition at line 56 of file Media.cpp.
References Medium::close(), Medium::envir(), Medium::name(), and NULL.
00056 { 00057 if (medium == NULL) return; 00058 00059 close(medium->envir(), medium->name()); 00060 }
| UsageEnvironment& Medium::envir | ( | ) | const [inline, inherited] |
Definition at line 59 of file Media.hh.
References Medium::fEnviron.
Referenced by QuickTimeFileSink::addArbitraryString(), FileSink::addData(), RTCPInstance::addStreamSocket(), MPEG2IFrameIndexFromTransportStream::addToTail(), StreamParser::afterGettingBytes1(), DummySink::afterGettingFrame(), TCPStreamSink::afterGettingFrame(), T140IdleFilter::afterGettingFrame(), FileSink::afterGettingFrame(), MultiFramedRTPSink::afterGettingFrame1(), InputESSourceRecord::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG2IFrameIndexFromTransportStream::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), H264VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoStreamParser::analyzeVOLHeader(), announceStream(), RTSPServer::RTSPClientConnection::changeClientInputSocket(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), H264VideoFileServerMediaSubsession::checkForAuxSDPLine1(), Medium::close(), ProxyServerMediaSubsession::closeStreamSource(), MPEG2IFrameIndexFromTransportStream::compactParseBuffer(), RTSPClient::connectionHandler1(), RTSPClient::connectToServer(), ProxyServerMediaSession::continueAfterDESCRIBE(), ProxyRTSPClient::continueAfterLivenessCommand(), ProxyRTSPClient::continueAfterSETUP(), T140TextRTPSink::continuePlaying(), QuickTimeFileSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), continuePlaying(), VP8VideoMatroskaFileServerMediaSubsession::createNewRTPSink(), VorbisAudioMatroskaFileServerMediaSubsession::createNewRTPSink(), T140TextMatroskaFileServerMediaSubsession::createNewRTPSink(), ProxyServerMediaSubsession::createNewRTPSink(), MPEG4VideoFileServerMediaSubsession::createNewRTPSink(), MPEG2TransportUDPServerMediaSubsession::createNewRTPSink(), MPEG2TransportFileServerMediaSubsession::createNewRTPSink(), MPEG1or2VideoFileServerMediaSubsession::createNewRTPSink(), MPEG1or2DemuxedServerMediaSubsession::createNewRTPSink(), MP3AudioFileServerMediaSubsession::createNewRTPSink(), H264VideoFileServerMediaSubsession::createNewRTPSink(), H263plusVideoFileServerMediaSubsession::createNewRTPSink(), DVVideoFileServerMediaSubsession::createNewRTPSink(), AMRAudioFileServerMediaSubsession::createNewRTPSink(), ADTSAudioFileServerMediaSubsession::createNewRTPSink(), AC3AudioMatroskaFileServerMediaSubsession::createNewRTPSink(), AC3AudioFileServerMediaSubsession::createNewRTPSink(), AACAudioMatroskaFileServerMediaSubsession::createNewRTPSink(), ProxyServerMediaSubsession::createNewStreamSource(), MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), MPEG2TransportUDPServerMediaSubsession::createNewStreamSource(), MPEG2TransportFileServerMediaSubsession::createNewStreamSource(), MPEG1or2VideoFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MP3AudioFileServerMediaSubsession::createNewStreamSource(), H264VideoMatroskaFileServerMediaSubsession::createNewStreamSource(), H264VideoFileServerMediaSubsession::createNewStreamSource(), H263plusVideoFileServerMediaSubsession::createNewStreamSource(), DVVideoFileServerMediaSubsession::createNewStreamSource(), AMRAudioFileServerMediaSubsession::createNewStreamSource(), ADTSAudioFileServerMediaSubsession::createNewStreamSource(), AC3AudioFileServerMediaSubsession::createNewStreamSource(), AMRDeinterleavingBuffer::deliverIncomingFrame(), MPEG2IFrameIndexFromTransportStream::deliverIndexRecord(), SegmentQueue::dequeue(), DeviceSource::DeviceSource(), WAVAudioFileSource::doGetNextFrame(), T140IdleFilter::doGetNextFrame(), MPEG2TransportStreamMultiplexor::doGetNextFrame(), MPEG2IFrameIndexFromTransportStream::doGetNextFrame(), MP3FileSource::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), ByteStreamFileSource::doGetNextFrame(), BasicUDPSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), MP3FileSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), SIPClient::doInviteStateMachine(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), WAVAudioFileSource::doStopGettingFrames(), T140IdleFilter::doStopGettingFrames(), MultiFramedRTPSource::doStopGettingFrames(), FramedSource::doStopGettingFrames(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), MediaSubsession::env(), SubsessionIOState::envir(), RTSPServer::RTSPClientSession::envir(), RTSPServer::RTSPClientConnection::envir(), RTPInterface::envir(), AVISubsessionIOState::envir(), ServerMediaSession::generateSDPDescription(), RTPSource::getAttributes(), MP3FileSource::getAttributes(), MP3ADUTranscoder::getAttributes(), MediaSource::getAttributes(), MPEG4VideoFileServerMediaSubsession::getAuxSDPLine(), H264VideoFileServerMediaSubsession::getAuxSDPLine(), getMPEG1or2TimeCode(), FramedSource::getNextFrame(), getOptions(), DVVideoStreamFramer::getProfile(), SIPClient::getResponse(), SIPClient::getResponseCode(), getSDPDescription(), OnDemandServerMediaSubsession::getStreamParameters(), RTSPClient::handleAlternativeRequestByte1(), RTSPClient::handleGET_PARAMETERResponse(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET(), RTSPClient::handleIncomingRequest(), RTSPClient::handlePLAYResponse(), RTSPClient::handleRequestError(), RTSPClient::handleResponseBytes(), RTSPClient::handleSETUPResponse(), RTSPServer::incomingConnectionHandler(), RTSPClient::incomingDataHandler1(), RTCPInstance::incomingReportHandler1(), MP3FileSource::initializeStream(), MediaSession::initializeWithSDP(), MediaSession::initiateByMediaType(), SIPClient::invite1(), DynamicRTSPServer::lookupServerMediaSession(), MatroskaDemux::MatroskaDemux(), MatroskaFile::MatroskaFile(), MPEG4GenericRTPSource::MPEG4GenericRTPSource(), MultiFramedRTPSource::networkReadHandler1(), MatroskaDemux::newDemuxedTrack(), MPEG1or2FileServerDemux::newElementaryStream(), MPEG1or2Demux::newElementaryStream(), MPEG4GenericBufferedPacket::nextEnclosedFrameSize(), AMRBufferedPacket::nextEnclosedFrameSize(), T140IdleFilter::onSourceClosure(), RTSPClient::openConnection(), MPEG2TransportStreamIndexFile::openFid(), MPEG2IFrameIndexFromTransportStream::parseFrame(), AC3AudioStreamParser::parseFrame(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), SIPClient::parseResponseCode(), MediaSession::parseSDPLine(), MPEG1or2VideoStreamParser::parseSlice(), MatroskaFileParser::parseStartOfFile(), MPEGProgramStreamParser::parseSystemHeader(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG4VideoStreamParser::parseVisualObject(), TCPStreamSink::processBuffer(), SIPClient::processURL(), AC3AudioStreamParser::readAndSaveAFrame(), MPEG1or2Demux::registerReadInterest(), RTCPInstance::reschedule(), RTSPClient::resendCommand(), ProxyRTSPClient::reset(), RTSPClient::resetTCPSockets(), RTSPClient::responseHandlerForHTTP_GET1(), RTSPServer::rtspURLPrefix(), RTCPInstance::schedule(), ProxyRTSPClient::scheduleDESCRIBECommand(), ProxyRTSPClient::scheduleLivenessCommand(), OnDemandServerMediaSubsession::sdpLines(), SIPClient::sendACK(), SIPClient::sendBYE(), SIPClient::sendINVITE(), MultiFramedRTPSink::sendPacketIfNecessary(), SIPClient::sendRequest(), RTSPClient::sendRequest(), DarwinInjector::setDestination(), RTSPClient::setupHTTPTunneling1(), setupNextSubsession(), RTSPServer::setUpTunnelingOverHTTP(), QuickTimeFileSink::setWord(), setWord(), QuickTimeFileSink::setWord64(), shutdownStream(), SIPClient::SIPClient(), TCPStreamSink::socketWritableHandler1(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), QuickTimeFileSink::startPlaying(), StreamState::startPlaying(), MediaSink::startPlaying(), startPlaying(), startPlayingSession(), PassiveServerMediaSubsession::startStream(), MediaSink::stopPlaying(), ProxyServerMediaSubsession::subsessionByeHandler(), tearDownSession(), SIPClient::timerAHandler(), SIPClient::timerBHandler(), SIPClient::timerDHandler(), ClientTrickPlayState::updateStateOnScaleChange(), MPEG2TransportStreamFramer::updateTSPacketDurationEstimate(), BasicUDPSource::~BasicUDPSource(), ByteStreamFileSource::~ByteStreamFileSource(), DeviceSource::~DeviceSource(), ProxyServerMediaSession::~ProxyServerMediaSession(), ProxyServerMediaSubsession::~ProxyServerMediaSubsession(), RTSPServer::~RTSPServer(), StreamClientState::~StreamClientState(), T140IdleFilter::~T140IdleFilter(), and WAVAudioFileSource::~WAVAudioFileSource().
00059 {return fEnviron;}
| char const* Medium::name | ( | ) | const [inline, inherited] |
Definition at line 61 of file Media.hh.
References Medium::fMediumName.
Referenced by QuickTimeFileSink::addAtom_hdlr2(), Medium::close(), MP3ADUTranscoder::createNew(), MP3FromADUSource::createNew(), ADUFromMP3Source::createNew(), and MP3FileSource::initializeStream().
00061 {return fMediumName;}
| Boolean Medium::isSource | ( | ) | const [virtual, inherited] |
Reimplemented in MediaSource.
Definition at line 62 of file Media.cpp.
References False.
Referenced by MediaSource::lookupByName().
00062 { 00063 return False; // default implementation 00064 }
| Boolean Medium::isSink | ( | ) | const [virtual, inherited] |
| Boolean Medium::isRTCPInstance | ( | ) | const [virtual, inherited] |
Reimplemented in RTCPInstance.
Definition at line 70 of file Media.cpp.
References False.
Referenced by RTCPInstance::lookupByName().
00070 { 00071 return False; // default implementation 00072 }
| Boolean Medium::isRTSPClient | ( | ) | const [virtual, inherited] |
Reimplemented in RTSPClient.
Definition at line 74 of file Media.cpp.
References False.
Referenced by RTSPClient::lookupByName().
00074 { 00075 return False; // default implementation 00076 }
| Boolean Medium::isRTSPServer | ( | ) | const [virtual, inherited] |
Reimplemented in RTSPServer.
Definition at line 78 of file Media.cpp.
References False.
Referenced by RTSPServer::lookupByName().
00078 { 00079 return False; // default implementation 00080 }
| Boolean Medium::isMediaSession | ( | ) | const [virtual, inherited] |
Reimplemented in MediaSession.
Definition at line 82 of file Media.cpp.
References False.
Referenced by MediaSession::lookupByName().
00082 { 00083 return False; // default implementation 00084 }
| Boolean Medium::isServerMediaSession | ( | ) | const [virtual, inherited] |
Reimplemented in ServerMediaSession.
Definition at line 86 of file Media.cpp.
References False.
Referenced by ServerMediaSession::lookupByName().
00086 { 00087 return False; // default implementation 00088 }
| Boolean Medium::isDarwinInjector | ( | ) | const [virtual, inherited] |
Reimplemented in DarwinInjector.
Definition at line 90 of file Media.cpp.
References False.
Referenced by DarwinInjector::lookupByName().
00090 { 00091 return False; // default implementation 00092 }
| TaskToken& Medium::nextTask | ( | ) | [inline, protected, inherited] |
Definition at line 78 of file Media.hh.
References Medium::fNextTask.
Referenced by BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), H264VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), H264VideoFileServerMediaSubsession::checkForAuxSDPLine1(), MP3FileSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), MultiFramedRTPSource::doStopGettingFrames(), FramedSource::doStopGettingFrames(), ByteStreamFileSource::doStopGettingFrames(), RTCPInstance::reschedule(), RTCPInstance::schedule(), MultiFramedRTPSink::sendPacketIfNecessary(), and MediaSink::stopPlaying().
00078 { 00079 return fNextTask; 00080 }
friend class AVISubsessionIOState [friend] |
friend class MediaLookupTable [friend, inherited] |
MediaSession& AVIFileSink::fInputSession [private] |
Definition at line 66 of file AVIFileSink.hh.
Referenced by AVIFileSink(), completeOutputFile(), continuePlaying(), onSourceClosure1(), and ~AVIFileSink().
FILE* AVIFileSink::fOutFid [private] |
Definition at line 67 of file AVIFileSink.hh.
Referenced by addByte(), AVIFileSink(), completeOutputFile(), createNew(), setWord(), AVISubsessionIOState::useFrame(), and ~AVIFileSink().
class AVIIndexRecord* AVIFileSink::fIndexRecordsHead [private] |
Definition at line 68 of file AVIFileSink.hh.
Referenced by addIndexRecord(), completeOutputFile(), and ~AVIFileSink().
class AVIIndexRecord * AVIFileSink::fIndexRecordsTail [private] |
unsigned AVIFileSink::fNumIndexRecords [private] |
Definition at line 69 of file AVIFileSink.hh.
Referenced by addIndexRecord(), and completeOutputFile().
unsigned AVIFileSink::fBufferSize [private] |
Definition at line 70 of file AVIFileSink.hh.
Referenced by AVISubsessionIOState::AVISubsessionIOState().
Boolean AVIFileSink::fPacketLossCompensate [private] |
Definition at line 71 of file AVIFileSink.hh.
Referenced by AVISubsessionIOState::afterGettingFrame(), and AVISubsessionIOState::AVISubsessionIOState().
Boolean AVIFileSink::fAreCurrentlyBeingPlayed [private] |
afterPlayingFunc* AVIFileSink::fAfterFunc [private] |
void* AVIFileSink::fAfterClientData [private] |
unsigned AVIFileSink::fNumSubsessions [private] |
Definition at line 75 of file AVIFileSink.hh.
Referenced by AVIFileSink(), and numActiveSubsessions().
unsigned AVIFileSink::fNumBytesWritten [private] |
Definition at line 76 of file AVIFileSink.hh.
Referenced by completeOutputFile(), and AVISubsessionIOState::useFrame().
struct timeval AVIFileSink::fStartTime [read, private] |
Boolean AVIFileSink::fHaveCompletedOutputFile [private] |
unsigned short AVIFileSink::fMovieWidth [private] |
Definition at line 105 of file AVIFileSink.hh.
Referenced by AVIFileSink(), if(), and AVISubsessionIOState::setAVIstate().
unsigned short AVIFileSink::fMovieHeight [private] |
Definition at line 105 of file AVIFileSink.hh.
Referenced by AVIFileSink(), if(), and AVISubsessionIOState::setAVIstate().
unsigned AVIFileSink::fMovieFPS [private] |
Definition at line 106 of file AVIFileSink.hh.
Referenced by AVIFileSink(), and AVISubsessionIOState::setAVIstate().
unsigned AVIFileSink::fRIFFSizePosition [private] |
unsigned AVIFileSink::fRIFFSizeValue [private] |
unsigned AVIFileSink::fAVIHMaxBytesPerSecondPosition [private] |
unsigned AVIFileSink::fAVIHFrameCountPosition [private] |
unsigned AVIFileSink::fMoviSizePosition [private] |
Definition at line 110 of file AVIFileSink.hh.
Referenced by completeOutputFile(), and AVISubsessionIOState::useFrame().
unsigned AVIFileSink::fMoviSizeValue [private] |
class AVISubsessionIOState* AVIFileSink::fCurrentIOState [private] |
unsigned AVIFileSink::fJunkNumber [private] |
Definition at line 112 of file AVIFileSink.hh.
1.5.2