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


Public Member Functions | |
| MPEG1or2DemuxedElementaryStream * | newElementaryStream (u_int8_t streamIdTag) |
| MPEG1or2DemuxedElementaryStream * | newAudioStream () |
| MPEG1or2DemuxedElementaryStream * | newVideoStream () |
| MPEG1or2DemuxedElementaryStream * | newRawPESStream () |
| void | getNextFrame (u_int8_t streamIdTag, unsigned char *to, unsigned maxSize, FramedSource::afterGettingFunc *afterGettingFunc, void *afterGettingClientData, FramedSource::onCloseFunc *onCloseFunc, void *onCloseClientData) |
| void | stopGettingFrames (u_int8_t streamIdTag) |
| FramedSource * | inputSource () const |
| SCR & | lastSeenSCR () |
| unsigned char | mpegVersion () const |
| void | flushInput () |
| 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 MPEG1or2Demux * | createNew (UsageEnvironment &env, FramedSource *inputSource, Boolean reclaimWhenLastESDies=False) |
| static void | handleClosure (void *clientData) |
| 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 Types | |
| typedef MPEG1or2Demux::OutputDescriptor | OutputDescriptor_t |
Private Member Functions | |
| MPEG1or2Demux (UsageEnvironment &env, FramedSource *inputSource, Boolean reclaimWhenLastESDies) | |
| virtual | ~MPEG1or2Demux () |
| void | registerReadInterest (u_int8_t streamIdTag, unsigned char *to, unsigned maxSize, FramedSource::afterGettingFunc *afterGettingFunc, void *afterGettingClientData, FramedSource::onCloseFunc *onCloseFunc, void *onCloseClientData) |
| Boolean | useSavedData (u_int8_t streamIdTag, unsigned char *to, unsigned maxSize, FramedSource::afterGettingFunc *afterGettingFunc, void *afterGettingClientData) |
| void | continueReadProcessing () |
| void | noteElementaryStreamDeletion (MPEG1or2DemuxedElementaryStream *es) |
Static Private Member Functions | |
| static void | continueReadProcessing (void *clientData, unsigned char *ptr, unsigned size, struct timeval presentationTime) |
Private Attributes | |
| FramedSource * | fInputSource |
| SCR | fLastSeenSCR |
| unsigned char | fMPEGversion |
| unsigned char | fNextAudioStreamNumber |
| unsigned char | fNextVideoStreamNumber |
| Boolean | fReclaimWhenLastESDies |
| unsigned | fNumOutstandingESs |
| OutputDescriptor_t | fOutput [256] |
| unsigned | fNumPendingReads |
| Boolean | fHaveUndeliveredData |
| MPEGProgramStreamParser * | fParser |
Friends | |
| class | MPEG1or2DemuxedElementaryStream |
| class | MPEGProgramStreamParser |
| class | MediaLookupTable |
Data Structures | |
| struct | OutputDescriptor |
| class | SCR |
Definition at line 30 of file MPEG1or2Demux.hh.
typedef struct MPEG1or2Demux::OutputDescriptor MPEG1or2Demux::OutputDescriptor_t [private] |
| MPEG1or2Demux::MPEG1or2Demux | ( | UsageEnvironment & | env, | |
| FramedSource * | inputSource, | |||
| Boolean | reclaimWhenLastESDies | |||
| ) | [private] |
Definition at line 82 of file MPEG1or2Demux.cpp.
Referenced by createNew().
00084 : Medium(env), 00085 fInputSource(inputSource), fMPEGversion(0), 00086 fNextAudioStreamNumber(0), fNextVideoStreamNumber(0), 00087 fReclaimWhenLastESDies(reclaimWhenLastESDies), fNumOutstandingESs(0), 00088 fNumPendingReads(0), fHaveUndeliveredData(False) { 00089 fParser = new MPEGProgramStreamParser(this, inputSource); 00090 for (unsigned i = 0; i < 256; ++i) { 00091 fOutput[i].savedDataHead = fOutput[i].savedDataTail = NULL; 00092 fOutput[i].isPotentiallyReadable = False; 00093 fOutput[i].isCurrentlyActive = False; 00094 fOutput[i].isCurrentlyAwaitingData = False; 00095 } 00096 }
| MPEG1or2Demux::~MPEG1or2Demux | ( | ) | [private, virtual] |
Definition at line 98 of file MPEG1or2Demux.cpp.
References Medium::close(), fInputSource, fOutput, and fParser.
00098 { 00099 delete fParser; 00100 for (unsigned i = 0; i < 256; ++i) delete fOutput[i].savedDataHead; 00101 Medium::close(fInputSource); 00102 }
| MPEG1or2Demux * MPEG1or2Demux::createNew | ( | UsageEnvironment & | env, | |
| FramedSource * | inputSource, | |||
| Boolean | reclaimWhenLastESDies = False | |||
| ) | [static] |
Definition at line 105 of file MPEG1or2Demux.cpp.
References env, inputSource(), and MPEG1or2Demux().
Referenced by main(), MPEG1or2ProgramStreamFileDuration(), and MPEG1or2FileServerDemux::newElementaryStream().
00106 { 00107 // Need to add source type checking here??? ##### 00108 00109 return new MPEG1or2Demux(env, inputSource, reclaimWhenLastESDies); 00110 }
| MPEG1or2DemuxedElementaryStream * MPEG1or2Demux::newElementaryStream | ( | u_int8_t | streamIdTag | ) |
Definition at line 128 of file MPEG1or2Demux.cpp.
References Medium::envir(), fNumOutstandingESs, fOutput, MPEG1or2Demux::OutputDescriptor::isPotentiallyReadable, MPEG1or2DemuxedElementaryStream, and True.
Referenced by newAudioStream(), MPEG1or2FileServerDemux::newElementaryStream(), newRawPESStream(), and newVideoStream().
00128 { 00129 ++fNumOutstandingESs; 00130 fOutput[streamIdTag].isPotentiallyReadable = True; 00131 return new MPEG1or2DemuxedElementaryStream(envir(), streamIdTag, *this); 00132 }
| MPEG1or2DemuxedElementaryStream * MPEG1or2Demux::newAudioStream | ( | ) |
Definition at line 134 of file MPEG1or2Demux.cpp.
References fNextAudioStreamNumber, and newElementaryStream().
Referenced by main().
00134 { 00135 unsigned char newAudioStreamTag = 0xC0 | (fNextAudioStreamNumber++&~0xE0); 00136 // MPEG audio stream tags are 110x xxxx (binary) 00137 return newElementaryStream(newAudioStreamTag); 00138 }
| MPEG1or2DemuxedElementaryStream * MPEG1or2Demux::newVideoStream | ( | ) |
Definition at line 140 of file MPEG1or2Demux.cpp.
References fNextVideoStreamNumber, and newElementaryStream().
Referenced by main().
00140 { 00141 unsigned char newVideoStreamTag = 0xE0 | (fNextVideoStreamNumber++&~0xF0); 00142 // MPEG video stream tags are 1110 xxxx (binary) 00143 return newElementaryStream(newVideoStreamTag); 00144 }
| MPEG1or2DemuxedElementaryStream * MPEG1or2Demux::newRawPESStream | ( | ) |
Definition at line 149 of file MPEG1or2Demux.cpp.
References newElementaryStream(), and RAW_PES.
Referenced by main(), and MPEG1or2ProgramStreamFileDuration().
00149 { 00150 return newElementaryStream(RAW_PES); 00151 }
| void MPEG1or2Demux::getNextFrame | ( | u_int8_t | streamIdTag, | |
| unsigned char * | to, | |||
| unsigned | maxSize, | |||
| FramedSource::afterGettingFunc * | afterGettingFunc, | |||
| void * | afterGettingClientData, | |||
| FramedSource::onCloseFunc * | onCloseFunc, | |||
| void * | onCloseClientData | |||
| ) |
Definition at line 258 of file MPEG1or2Demux.cpp.
References continueReadProcessing(), fHaveUndeliveredData, fNumPendingReads, registerReadInterest(), and useSavedData().
Referenced by MPEG1or2DemuxedElementaryStream::doGetNextFrame().
00263 { 00264 // First, check whether we have saved data for this stream id: 00265 if (useSavedData(streamIdTag, to, maxSize, 00266 afterGettingFunc, afterGettingClientData)) { 00267 return; 00268 } 00269 00270 // Then save the parameters of the specified stream id: 00271 registerReadInterest(streamIdTag, to, maxSize, 00272 afterGettingFunc, afterGettingClientData, 00273 onCloseFunc, onCloseClientData); 00274 00275 // Next, if we're the only currently pending read, continue looking for data: 00276 if (fNumPendingReads == 1 || fHaveUndeliveredData) { 00277 fHaveUndeliveredData = 0; 00278 continueReadProcessing(); 00279 } // otherwise the continued read processing has already been taken care of 00280 }
| void MPEG1or2Demux::stopGettingFrames | ( | u_int8_t | streamIdTag | ) |
Definition at line 282 of file MPEG1or2Demux.cpp.
References False, fNumPendingReads, fOutput, MPEG1or2Demux::OutputDescriptor::isCurrentlyActive, and MPEG1or2Demux::OutputDescriptor::isCurrentlyAwaitingData.
Referenced by MPEG1or2DemuxedElementaryStream::doStopGettingFrames().
00282 { 00283 struct OutputDescriptor& out = fOutput[streamIdTag]; 00284 00285 if (out.isCurrentlyAwaitingData && fNumPendingReads > 0) --fNumPendingReads; 00286 00287 out.isCurrentlyActive = out.isCurrentlyAwaitingData = False; 00288 }
| void MPEG1or2Demux::handleClosure | ( | void * | clientData | ) | [static] |
Definition at line 290 of file MPEG1or2Demux.cpp.
References demux, MPEG1or2Demux::OutputDescriptor::fOnCloseFunc, if(), NULL, and MPEG1or2Demux::OutputDescriptor::onCloseClientData.
00290 { 00291 MPEG1or2Demux* demux = (MPEG1or2Demux*)clientData; 00292 00293 demux->fNumPendingReads = 0; 00294 00295 // Tell all pending readers that our source has closed. 00296 // Note that we need to make a copy of our readers' close functions 00297 // (etc.) before we start calling any of them, in case one of them 00298 // ends up deleting this. 00299 struct { 00300 FramedSource::onCloseFunc* fOnCloseFunc; 00301 void* onCloseClientData; 00302 } savedPending[256]; 00303 unsigned i, numPending = 0; 00304 for (i = 0; i < 256; ++i) { 00305 struct OutputDescriptor& out = demux->fOutput[i]; 00306 if (out.isCurrentlyAwaitingData) { 00307 if (out.fOnCloseFunc != NULL) { 00308 savedPending[numPending].fOnCloseFunc = out.fOnCloseFunc; 00309 savedPending[numPending].onCloseClientData = out.onCloseClientData; 00310 ++numPending; 00311 } 00312 } 00313 delete out.savedDataHead; out.savedDataHead = out.savedDataTail = NULL; 00314 out.savedDataTotalSize = 0; 00315 out.isPotentiallyReadable = out.isCurrentlyActive = out.isCurrentlyAwaitingData 00316 = False; 00317 } 00318 for (i = 0; i < numPending; ++i) { 00319 (*savedPending[i].fOnCloseFunc)(savedPending[i].onCloseClientData); 00320 } 00321 }
| FramedSource* MPEG1or2Demux::inputSource | ( | ) | const [inline] |
Definition at line 64 of file MPEG1or2Demux.hh.
References fInputSource.
Referenced by createNew(), and MPEG1or2DemuxedServerMediaSubsession::seekStreamSource().
00064 { return fInputSource; }
| SCR& MPEG1or2Demux::lastSeenSCR | ( | ) | [inline] |
Definition at line 76 of file MPEG1or2Demux.hh.
References fLastSeenSCR.
Referenced by MFSD_DummySink::afterGettingFrame1(), MPEG1or2DemuxedElementaryStream::afterGettingFrame1(), and getMPEG1or2TimeCode().
00076 { return fLastSeenSCR; }
| unsigned char MPEG1or2Demux::mpegVersion | ( | ) | const [inline] |
Definition at line 78 of file MPEG1or2Demux.hh.
References fMPEGversion.
Referenced by MPEG1or2DemuxedElementaryStream::afterGettingFrame1().
00078 { return fMPEGversion; }
| void MPEG1or2Demux::flushInput | ( | ) |
Definition at line 123 of file MPEG1or2Demux.cpp.
References StreamParser::flushInput(), and fParser.
Referenced by MPEG1or2ProgramStreamFileDuration(), and MPEG1or2DemuxedServerMediaSubsession::seekStreamSource().
00123 { 00124 fParser->flushInput(); 00125 }
| void MPEG1or2Demux::registerReadInterest | ( | u_int8_t | streamIdTag, | |
| unsigned char * | to, | |||
| unsigned | maxSize, | |||
| FramedSource::afterGettingFunc * | afterGettingFunc, | |||
| void * | afterGettingClientData, | |||
| FramedSource::onCloseFunc * | onCloseFunc, | |||
| void * | onCloseClientData | |||
| ) | [private] |
Definition at line 153 of file MPEG1or2Demux.cpp.
References MPEG1or2Demux::OutputDescriptor::afterGettingClientData, Medium::envir(), MPEG1or2Demux::OutputDescriptor::fAfterGettingFunc, fNumPendingReads, MPEG1or2Demux::OutputDescriptor::fOnCloseFunc, fOutput, UsageEnvironment::internalError(), MPEG1or2Demux::OutputDescriptor::isCurrentlyActive, MPEG1or2Demux::OutputDescriptor::isCurrentlyAwaitingData, MPEG1or2Demux::OutputDescriptor::maxSize, MPEG1or2Demux::OutputDescriptor::onCloseClientData, MPEG1or2Demux::OutputDescriptor::to, and True.
Referenced by getNextFrame().
00158 { 00159 struct OutputDescriptor& out = fOutput[streamIdTag]; 00160 00161 // Make sure this stream is not already being read: 00162 if (out.isCurrentlyAwaitingData) { 00163 envir() << "MPEG1or2Demux::registerReadInterest(): attempt to read stream id " 00164 << (void*)streamIdTag << " more than once!\n"; 00165 envir().internalError(); 00166 } 00167 00168 out.to = to; out.maxSize = maxSize; 00169 out.fAfterGettingFunc = afterGettingFunc; 00170 out.afterGettingClientData = afterGettingClientData; 00171 out.fOnCloseFunc = onCloseFunc; 00172 out.onCloseClientData = onCloseClientData; 00173 out.isCurrentlyActive = True; 00174 out.isCurrentlyAwaitingData = True; 00175 // out.frameSize and out.presentationTime will be set when a frame's read 00176 00177 ++fNumPendingReads; 00178 }
| Boolean MPEG1or2Demux::useSavedData | ( | u_int8_t | streamIdTag, | |
| unsigned char * | to, | |||
| unsigned | maxSize, | |||
| FramedSource::afterGettingFunc * | afterGettingFunc, | |||
| void * | afterGettingClientData | |||
| ) | [private] |
Definition at line 180 of file MPEG1or2Demux.cpp.
References MPEG1or2Demux::OutputDescriptor::SavedData::data, MPEG1or2Demux::OutputDescriptor::SavedData::dataSize, False, fOutput, MPEG1or2Demux::OutputDescriptor::isCurrentlyActive, MPEG1or2Demux::OutputDescriptor::SavedData::next, NULL, MPEG1or2Demux::OutputDescriptor::SavedData::numBytesUsed, MPEG1or2Demux::OutputDescriptor::savedDataHead, MPEG1or2Demux::OutputDescriptor::savedDataTail, MPEG1or2Demux::OutputDescriptor::savedDataTotalSize, and True.
Referenced by getNextFrame().
00183 { 00184 struct OutputDescriptor& out = fOutput[streamIdTag]; 00185 if (out.savedDataHead == NULL) return False; // common case 00186 00187 unsigned totNumBytesCopied = 0; 00188 while (maxSize > 0 && out.savedDataHead != NULL) { 00189 OutputDescriptor::SavedData& savedData = *(out.savedDataHead); 00190 unsigned char* from = &savedData.data[savedData.numBytesUsed]; 00191 unsigned numBytesToCopy = savedData.dataSize - savedData.numBytesUsed; 00192 if (numBytesToCopy > maxSize) numBytesToCopy = maxSize; 00193 memmove(to, from, numBytesToCopy); 00194 to += numBytesToCopy; 00195 maxSize -= numBytesToCopy; 00196 out.savedDataTotalSize -= numBytesToCopy; 00197 totNumBytesCopied += numBytesToCopy; 00198 savedData.numBytesUsed += numBytesToCopy; 00199 if (savedData.numBytesUsed == savedData.dataSize) { 00200 out.savedDataHead = savedData.next; 00201 if (out.savedDataHead == NULL) out.savedDataTail = NULL; 00202 savedData.next = NULL; 00203 delete &savedData; 00204 } 00205 } 00206 00207 out.isCurrentlyActive = True; 00208 if (afterGettingFunc != NULL) { 00209 struct timeval presentationTime; 00210 presentationTime.tv_sec = 0; presentationTime.tv_usec = 0; // should fix ##### 00211 (*afterGettingFunc)(afterGettingClientData, totNumBytesCopied, 00212 0 /* numTruncatedBytes */, presentationTime, 00213 0 /* durationInMicroseconds ?????#####*/); 00214 } 00215 return True; 00216 }
| void MPEG1or2Demux::continueReadProcessing | ( | void * | clientData, | |
| unsigned char * | ptr, | |||
| unsigned | size, | |||
| struct timeval | presentationTime | |||
| ) | [static, private] |
Definition at line 219 of file MPEG1or2Demux.cpp.
References demux.
00221 { 00222 MPEG1or2Demux* demux = (MPEG1or2Demux*)clientData; 00223 demux->continueReadProcessing(); 00224 }
| void MPEG1or2Demux::continueReadProcessing | ( | ) | [private] |
Definition at line 226 of file MPEG1or2Demux.cpp.
References MPEG1or2Demux::OutputDescriptor::afterGettingClientData, MPEG1or2Demux::OutputDescriptor::fAfterGettingFunc, False, fNumPendingReads, fOutput, fParser, MPEG1or2Demux::OutputDescriptor::frameSize, MPEG1or2Demux::OutputDescriptor::isCurrentlyAwaitingData, NULL, MPEGProgramStreamParser::parse(), and MPEG1or2Demux::OutputDescriptor::presentationTime.
Referenced by getNextFrame().
00226 { 00227 while (fNumPendingReads > 0) { 00228 unsigned char acquiredStreamIdTag = fParser->parse(); 00229 00230 if (acquiredStreamIdTag != 0) { 00231 // We were able to acquire a frame from the input. 00232 struct OutputDescriptor& newOut = fOutput[acquiredStreamIdTag]; 00233 newOut.isCurrentlyAwaitingData = False; 00234 // indicates that we can be read again 00235 // (This needs to be set before the 'after getting' call below, 00236 // in case it tries to read another frame) 00237 00238 // Call our own 'after getting' function. Because we're not a 'leaf' 00239 // source, we can call this directly, without risking infinite recursion. 00240 if (newOut.fAfterGettingFunc != NULL) { 00241 (*newOut.fAfterGettingFunc)(newOut.afterGettingClientData, 00242 newOut.frameSize, 0 /* numTruncatedBytes */, 00243 newOut.presentationTime, 00244 0 /* durationInMicroseconds ?????#####*/); 00245 --fNumPendingReads; 00246 } 00247 } else { 00248 // We were unable to parse a complete frame from the input, because: 00249 // - we had to read more data from the source stream, or 00250 // - we found a frame for a stream that was being read, but whose 00251 // reader is not ready to get the frame right now, or 00252 // - the source stream has ended. 00253 break; 00254 } 00255 } 00256 }
| void MPEG1or2Demux::noteElementaryStreamDeletion | ( | MPEG1or2DemuxedElementaryStream * | es | ) | [private] |
Definition at line 117 of file MPEG1or2Demux.cpp.
References Medium::close(), fNumOutstandingESs, and fReclaimWhenLastESDies.
Referenced by MPEG1or2DemuxedElementaryStream::~MPEG1or2DemuxedElementaryStream().
00117 { 00118 if (--fNumOutstandingESs == 0 && fReclaimWhenLastESDies) { 00119 Medium::close(this); 00120 } 00121 }
| 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(), AVIFileSink::createNew(), AMRAudioRTPSource::createNew(), WAVAudioFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MediaSubsession::deInitiate(), ServerMediaSession::deleteAllSubsessions(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET(), MediaSubsession::initiate(), MPEG1or2ProgramStreamFileDuration(), 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(), 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(), AVIFileSink::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(), 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(), 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(), AVIFileSink::setWord(), QuickTimeFileSink::setWord64(), shutdownStream(), SIPClient::SIPClient(), TCPStreamSink::socketWritableHandler1(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), QuickTimeFileSink::startPlaying(), StreamState::startPlaying(), MediaSink::startPlaying(), AVIFileSink::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 MPEG1or2DemuxedElementaryStream [friend] |
friend class MPEGProgramStreamParser [friend] |
Definition at line 147 of file MPEG1or2Demux.hh.
friend class MediaLookupTable [friend, inherited] |
FramedSource* MPEG1or2Demux::fInputSource [private] |
SCR MPEG1or2Demux::fLastSeenSCR [private] |
Definition at line 111 of file MPEG1or2Demux.hh.
Referenced by lastSeenSCR(), and MPEGProgramStreamParser::parsePackHeader().
unsigned char MPEG1or2Demux::fMPEGversion [private] |
Definition at line 112 of file MPEG1or2Demux.hh.
Referenced by MPEGProgramStreamParser::isSpecialStreamId(), mpegVersion(), MPEGProgramStreamParser::parsePackHeader(), and MPEGProgramStreamParser::parsePESPacket().
unsigned char MPEG1or2Demux::fNextAudioStreamNumber [private] |
unsigned char MPEG1or2Demux::fNextVideoStreamNumber [private] |
Boolean MPEG1or2Demux::fReclaimWhenLastESDies [private] |
unsigned MPEG1or2Demux::fNumOutstandingESs [private] |
Definition at line 117 of file MPEG1or2Demux.hh.
Referenced by newElementaryStream(), and noteElementaryStreamDeletion().
OutputDescriptor_t MPEG1or2Demux::fOutput[256] [private] |
Definition at line 140 of file MPEG1or2Demux.hh.
Referenced by continueReadProcessing(), newElementaryStream(), MPEGProgramStreamParser::parsePESPacket(), registerReadInterest(), stopGettingFrames(), useSavedData(), and ~MPEG1or2Demux().
unsigned MPEG1or2Demux::fNumPendingReads [private] |
Definition at line 142 of file MPEG1or2Demux.hh.
Referenced by continueReadProcessing(), getNextFrame(), registerReadInterest(), and stopGettingFrames().
Boolean MPEG1or2Demux::fHaveUndeliveredData [private] |
Definition at line 143 of file MPEG1or2Demux.hh.
Referenced by getNextFrame(), and MPEGProgramStreamParser::parsePESPacket().
class MPEGProgramStreamParser* MPEG1or2Demux::fParser [private] |
Definition at line 146 of file MPEG1or2Demux.hh.
Referenced by continueReadProcessing(), flushInput(), and ~MPEG1or2Demux().
1.5.2