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


Public Types | |
| typedef void( | afterGettingFunc )(void *clientData, unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds) |
| typedef void( | onCloseFunc )(void *clientData) |
Public Member Functions | |
| Boolean | seekTo (unsigned long tsPacketNumber, unsigned long indexRecordNumber) |
| unsigned long | nextIndexRecordNum () const |
| void | forgetInputSource () |
| FramedSource * | inputSource () 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 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 MPEG2TransportStreamTrickModeFilter * | createNew (UsageEnvironment &env, FramedSource *inputSource, MPEG2TransportStreamIndexFile *indexFile, int scale) |
| 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) |
Protected Member Functions | |
| MPEG2TransportStreamTrickModeFilter (UsageEnvironment &env, FramedSource *inputSource, MPEG2TransportStreamIndexFile *indexFile, int scale) | |
| virtual | ~MPEG2TransportStreamTrickModeFilter () |
| virtual char const * | MIMEtype () const |
| virtual void | getAttributes () const |
| TaskToken & | nextTask () |
Static Protected Member Functions | |
| static void | afterGetting (FramedSource *source) |
Protected Attributes | |
| FramedSource * | fInputSource |
| unsigned char * | fTo |
| unsigned | fMaxSize |
| unsigned | fFrameSize |
| unsigned | fNumTruncatedBytes |
| timeval | fPresentationTime |
| unsigned | fDurationInMicroseconds |
Private Types | |
| enum | { SKIPPING_FRAME, DELIVERING_SAVED_FRAME, SAVING_AND_DELIVERING_FRAME } |
Private Member Functions | |
| virtual void | doGetNextFrame () |
| virtual void | doStopGettingFrames () |
| void | attemptDeliveryToClient () |
| void | seekToTransportPacket (unsigned long tsPacketNum) |
| void | readTransportPacket (unsigned long tsPacketNum) |
| void | afterGettingFrame1 (unsigned frameSize) |
| void | onSourceClosure1 () |
Static Private Member Functions | |
| static void | afterGettingFrame (void *clientData, unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds) |
| static void | onSourceClosure (void *clientData) |
Private Attributes | |
| Boolean | fHaveStarted |
| MPEG2TransportStreamIndexFile * | fIndexFile |
| int | fScale |
| int | fDirection |
| enum MPEG2TransportStreamTrickModeFilter:: { ... } | fState |
| unsigned | fFrameCount |
| unsigned long | fNextIndexRecordNum |
| unsigned long | fNextTSPacketNum |
| unsigned char | fInputBuffer [TRANSPORT_PACKET_SIZE] |
| unsigned long | fCurrentTSPacketNum |
| unsigned long | fDesiredTSPacketNum |
| u_int8_t | fDesiredDataOffset |
| u_int8_t | fDesiredDataSize |
| float | fDesiredDataPCR |
| float | fFirstPCR |
| unsigned long | fSavedFrameIndexRecordStart |
| unsigned long | fSavedSequentialIndexRecordNum |
Definition at line 38 of file MPEG2TransportStreamTrickModeFilter.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.
anonymous enum [private] |
Definition at line 81 of file MPEG2TransportStreamTrickModeFilter.hh.
00081 { 00082 SKIPPING_FRAME, 00083 DELIVERING_SAVED_FRAME, 00084 SAVING_AND_DELIVERING_FRAME 00085 } fState;
| MPEG2TransportStreamTrickModeFilter::MPEG2TransportStreamTrickModeFilter | ( | UsageEnvironment & | env, | |
| FramedSource * | inputSource, | |||
| MPEG2TransportStreamIndexFile * | indexFile, | |||
| int | scale | |||
| ) | [protected] |
Definition at line 34 of file MPEG2TransportStreamTrickModeFilter.cpp.
00036 : FramedFilter(env, inputSource), 00037 fHaveStarted(False), fIndexFile(indexFile), fScale(scale), fDirection(1), 00038 fState(SKIPPING_FRAME), fFrameCount(0), 00039 fNextIndexRecordNum(0), fNextTSPacketNum(0), 00040 fCurrentTSPacketNum((unsigned long)(-1)) { 00041 if (fScale < 0) { // reverse play 00042 fScale = -fScale; 00043 fDirection = -1; 00044 } 00045 }
| MPEG2TransportStreamTrickModeFilter::~MPEG2TransportStreamTrickModeFilter | ( | ) | [protected, virtual] |
| MPEG2TransportStreamTrickModeFilter * MPEG2TransportStreamTrickModeFilter::createNew | ( | UsageEnvironment & | env, | |
| FramedSource * | inputSource, | |||
| MPEG2TransportStreamIndexFile * | indexFile, | |||
| int | scale | |||
| ) | [static] |
Definition at line 28 of file MPEG2TransportStreamTrickModeFilter.cpp.
References env.
Referenced by main(), and ClientTrickPlayState::updateStateOnScaleChange().
00029 { 00030 return new MPEG2TransportStreamTrickModeFilter(env, inputSource, indexFile, scale); 00031 }
| Boolean MPEG2TransportStreamTrickModeFilter::seekTo | ( | unsigned long | tsPacketNumber, | |
| unsigned long | indexRecordNumber | |||
| ) |
Definition at line 50 of file MPEG2TransportStreamTrickModeFilter.cpp.
References fNextIndexRecordNum, seekToTransportPacket(), and True.
Referenced by main(), and ClientTrickPlayState::updateStateOnScaleChange().
00051 { 00052 seekToTransportPacket(tsPacketNumber); 00053 fNextIndexRecordNum = indexRecordNumber; 00054 return True; 00055 }
| unsigned long MPEG2TransportStreamTrickModeFilter::nextIndexRecordNum | ( | ) | const [inline] |
Definition at line 46 of file MPEG2TransportStreamTrickModeFilter.hh.
References fNextIndexRecordNum.
Referenced by ClientTrickPlayState::updateStateOnPlayChange().
00046 { return fNextIndexRecordNum; }
| void MPEG2TransportStreamTrickModeFilter::forgetInputSource | ( | ) | [inline] |
Definition at line 48 of file MPEG2TransportStreamTrickModeFilter.hh.
References FramedFilter::fInputSource, and NULL.
Referenced by ClientTrickPlayState::updateStateOnScaleChange().
00048 { fInputSource = NULL; }
| void MPEG2TransportStreamTrickModeFilter::doGetNextFrame | ( | ) | [private, virtual] |
Implements FramedSource.
Definition at line 61 of file MPEG2TransportStreamTrickModeFilter.cpp.
References FramedSource::afterGetting(), attemptDeliveryToClient(), DELIVERING_SAVED_FRAME, False, fDesiredDataOffset, fDesiredDataPCR, fDesiredDataSize, fDesiredTSPacketNum, fDirection, fFirstPCR, fFrameCount, FramedSource::fFrameSize, fHaveStarted, fIndexFile, FramedSource::fMaxSize, fNextIndexRecordNum, fSavedFrameIndexRecordStart, fSavedSequentialIndexRecordNum, fScale, fState, isIFrameStart, isNonIFrameStart, onSourceClosure1(), MPEG2TransportStreamIndexFile::readIndexRecordValues(), SAVING_AND_DELIVERING_FRAME, SKIPPING_FRAME, TRANSPORT_PACKET_SIZE, and True.
00061 { 00062 // fprintf(stderr, "#####DGNF1\n"); 00063 // If our client's buffer size is too small, then deliver 00064 // a 0-byte 'frame', to tell it to process all of the data that it has 00065 // already read, before asking for more data from us: 00066 if (fMaxSize < TRANSPORT_PACKET_SIZE) { 00067 fFrameSize = 0; 00068 afterGetting(this); 00069 return; 00070 } 00071 00072 while (1) { 00073 // Get the next record from our index file. 00074 // This tells us the type of frame this data is, which Transport Stream packet 00075 // (from the input source) the data comes from, and where in the Transport Stream 00076 // packet it comes from: 00077 u_int8_t recordType; 00078 float recordPCR; 00079 Boolean endOfIndexFile = False; 00080 if (!fIndexFile->readIndexRecordValues(fNextIndexRecordNum, 00081 fDesiredTSPacketNum, fDesiredDataOffset, 00082 fDesiredDataSize, recordPCR, 00083 recordType)) { 00084 // We ran off the end of the index file. If we're not delivering a 00085 // pre-saved frame, then handle this the same way as if the 00086 // input Transport Stream source ended. 00087 if (fState != DELIVERING_SAVED_FRAME) { 00088 onSourceClosure1(); 00089 return; 00090 } 00091 endOfIndexFile = True; 00092 } else if (!fHaveStarted) { 00093 fFirstPCR = recordPCR; 00094 fHaveStarted = True; 00095 } 00096 // fprintf(stderr, "#####read index record %ld: ts %ld: %c, PCR %f\n", fNextIndexRecordNum, fDesiredTSPacketNum, isIFrameStart(recordType) ? 'I' : isNonIFrameStart(recordType) ? 'j' : 'x', recordPCR); 00097 fNextIndexRecordNum 00098 += (fState == DELIVERING_SAVED_FRAME) ? 1 : fDirection; 00099 00100 // Handle this index record, depending on the record type and our current state: 00101 switch (fState) { 00102 case SKIPPING_FRAME: 00103 case SAVING_AND_DELIVERING_FRAME: { 00104 // if (fState == SKIPPING_FRAME) fprintf(stderr, "\tSKIPPING_FRAME\n"); else fprintf(stderr, "\tSAVING_AND_DELIVERING_FRAME\n");//##### 00105 if (isIFrameStart(recordType)) { 00106 // Save a record of this frame: 00107 fSavedFrameIndexRecordStart = fNextIndexRecordNum - fDirection; 00108 // fprintf(stderr, "\trecording\n");//##### 00109 if ((fFrameCount++)%fScale == 0) { 00110 // A frame is due now. 00111 fFrameCount = 1; // reset to avoid overflow 00112 if (fDirection > 0) { 00113 // Begin delivering this frame, as we're scanning it: 00114 fState = SAVING_AND_DELIVERING_FRAME; 00115 // fprintf(stderr, "\tdelivering\n");//##### 00116 fDesiredDataPCR = recordPCR; // use this frame's PCR 00117 attemptDeliveryToClient(); 00118 return; 00119 } else { 00120 // Deliver this frame, then resume normal scanning: 00121 // (This relies on the index records having begun with an I-frame.) 00122 fState = DELIVERING_SAVED_FRAME; 00123 fSavedSequentialIndexRecordNum = fNextIndexRecordNum; 00124 fDesiredDataPCR = recordPCR; 00125 // use this frame's (not the saved frame's) PCR 00126 fNextIndexRecordNum = fSavedFrameIndexRecordStart; 00127 // fprintf(stderr, "\tbeginning delivery of saved frame\n");//##### 00128 } 00129 } else { 00130 // No frame is needed now: 00131 fState = SKIPPING_FRAME; 00132 } 00133 } else if (isNonIFrameStart(recordType)) { 00134 if ((fFrameCount++)%fScale == 0) { 00135 // A frame is due now, so begin delivering the one that we had saved: 00136 // (This relies on the index records having begun with an I-frame.) 00137 fFrameCount = 1; // reset to avoid overflow 00138 fState = DELIVERING_SAVED_FRAME; 00139 fSavedSequentialIndexRecordNum = fNextIndexRecordNum; 00140 fDesiredDataPCR = recordPCR; 00141 // use this frame's (not the saved frame's) PCR 00142 fNextIndexRecordNum = fSavedFrameIndexRecordStart; 00143 // fprintf(stderr, "\tbeginning delivery of saved frame\n");//##### 00144 } else { 00145 // No frame is needed now: 00146 fState = SKIPPING_FRAME; 00147 } 00148 } else { 00149 // Not the start of a frame, but deliver it, if it's needed: 00150 if (fState == SAVING_AND_DELIVERING_FRAME) { 00151 // fprintf(stderr, "\tdelivering\n");//##### 00152 fDesiredDataPCR = recordPCR; // use this frame's PCR 00153 attemptDeliveryToClient(); 00154 return; 00155 } 00156 } 00157 break; 00158 } 00159 case DELIVERING_SAVED_FRAME: { 00160 // fprintf(stderr, "\tDELIVERING_SAVED_FRAME\n");//##### 00161 if (endOfIndexFile 00162 || (isIFrameStart(recordType) 00163 && fNextIndexRecordNum-1 != fSavedFrameIndexRecordStart) 00164 || isNonIFrameStart(recordType)) { 00165 // fprintf(stderr, "\tended delivery of saved frame\n");//##### 00166 // We've reached the end of the saved frame, so revert to the 00167 // original sequence of index records: 00168 fNextIndexRecordNum = fSavedSequentialIndexRecordNum; 00169 fState = SKIPPING_FRAME; 00170 } else { 00171 // Continue delivering: 00172 // fprintf(stderr, "\tdelivering\n");//##### 00173 attemptDeliveryToClient(); 00174 return; 00175 } 00176 break; 00177 } 00178 } 00179 } 00180 }
| void MPEG2TransportStreamTrickModeFilter::doStopGettingFrames | ( | ) | [private, virtual] |
Reimplemented from FramedFilter.
Definition at line 182 of file MPEG2TransportStreamTrickModeFilter.cpp.
References FramedFilter::doStopGettingFrames(), fIndexFile, and MPEG2TransportStreamIndexFile::stopReading().
00182 { 00183 FramedFilter::doStopGettingFrames(); 00184 fIndexFile->stopReading(); 00185 }
| void MPEG2TransportStreamTrickModeFilter::attemptDeliveryToClient | ( | ) | [private] |
Definition at line 187 of file MPEG2TransportStreamTrickModeFilter.cpp.
References FramedSource::afterGetting(), fCurrentTSPacketNum, fDesiredDataOffset, fDesiredDataPCR, fDesiredDataSize, fDesiredTSPacketNum, fDirection, fFirstPCR, FramedSource::fFrameSize, fInputBuffer, FramedSource::fPresentationTime, fScale, FramedSource::fTo, and readTransportPacket().
Referenced by afterGettingFrame1(), and doGetNextFrame().
00187 { 00188 if (fCurrentTSPacketNum == fDesiredTSPacketNum) { 00189 // fprintf(stderr, "\t\tdelivering ts %d:%d, %d bytes, PCR %f\n", fCurrentTSPacketNum, fDesiredDataOffset, fDesiredDataSize, fDesiredDataPCR);//##### 00190 // We already have the Transport Packet that we want. Deliver its data: 00191 memmove(fTo, &fInputBuffer[fDesiredDataOffset], fDesiredDataSize); 00192 fFrameSize = fDesiredDataSize; 00193 float deliveryPCR = fDirection*(fDesiredDataPCR - fFirstPCR)/fScale; 00194 if (deliveryPCR < 0.0) deliveryPCR = 0.0; 00195 fPresentationTime.tv_sec = (unsigned long)deliveryPCR; 00196 fPresentationTime.tv_usec 00197 = (unsigned long)((deliveryPCR - fPresentationTime.tv_sec)*1000000.0f); 00198 // fprintf(stderr, "#####DGNF9\n"); 00199 00200 afterGetting(this); 00201 } else { 00202 // Arrange to read the Transport Packet that we want: 00203 readTransportPacket(fDesiredTSPacketNum); 00204 } 00205 }
| void MPEG2TransportStreamTrickModeFilter::seekToTransportPacket | ( | unsigned long | tsPacketNum | ) | [private] |
Definition at line 207 of file MPEG2TransportStreamTrickModeFilter.cpp.
References FramedFilter::fInputSource, fNextTSPacketNum, ByteStreamFileSource::seekToByteAbsolute(), and TRANSPORT_PACKET_SIZE.
Referenced by readTransportPacket(), and seekTo().
00207 { 00208 if (tsPacketNum == fNextTSPacketNum) return; // we're already there 00209 00210 ByteStreamFileSource* tsFile = (ByteStreamFileSource*)fInputSource; 00211 u_int64_t tsPacketNum64 = (u_int64_t)tsPacketNum; 00212 tsFile->seekToByteAbsolute(tsPacketNum64*TRANSPORT_PACKET_SIZE); 00213 00214 fNextTSPacketNum = tsPacketNum; 00215 }
| void MPEG2TransportStreamTrickModeFilter::readTransportPacket | ( | unsigned long | tsPacketNum | ) | [private] |
Definition at line 217 of file MPEG2TransportStreamTrickModeFilter.cpp.
References afterGettingFrame(), fInputBuffer, FramedFilter::fInputSource, FramedSource::getNextFrame(), onSourceClosure(), seekToTransportPacket(), and TRANSPORT_PACKET_SIZE.
Referenced by attemptDeliveryToClient().
00217 { 00218 seekToTransportPacket(tsPacketNum); 00219 fInputSource->getNextFrame(fInputBuffer, TRANSPORT_PACKET_SIZE, 00220 afterGettingFrame, this, 00221 onSourceClosure, this); 00222 }
| void MPEG2TransportStreamTrickModeFilter::afterGettingFrame | ( | void * | clientData, | |
| unsigned | frameSize, | |||
| unsigned | numTruncatedBytes, | |||
| struct timeval | presentationTime, | |||
| unsigned | durationInMicroseconds | |||
| ) | [static, private] |
Definition at line 225 of file MPEG2TransportStreamTrickModeFilter.cpp.
References afterGettingFrame1().
Referenced by readTransportPacket().
00228 { 00229 MPEG2TransportStreamTrickModeFilter* filter = (MPEG2TransportStreamTrickModeFilter*)clientData; 00230 filter->afterGettingFrame1(frameSize); 00231 }
| void MPEG2TransportStreamTrickModeFilter::afterGettingFrame1 | ( | unsigned | frameSize | ) | [private] |
Definition at line 233 of file MPEG2TransportStreamTrickModeFilter.cpp.
References attemptDeliveryToClient(), fCurrentTSPacketNum, fNextTSPacketNum, onSourceClosure1(), and TRANSPORT_PACKET_SIZE.
Referenced by afterGettingFrame().
00233 { 00234 if (frameSize != TRANSPORT_PACKET_SIZE) { 00235 // Treat this as if the input source ended: 00236 onSourceClosure1(); 00237 return; 00238 } 00239 00240 fCurrentTSPacketNum = fNextTSPacketNum; // i.e., the one that we just read 00241 ++fNextTSPacketNum; 00242 00243 // Attempt deliver again: 00244 attemptDeliveryToClient(); 00245 }
| void MPEG2TransportStreamTrickModeFilter::onSourceClosure | ( | void * | clientData | ) | [static, private] |
Definition at line 247 of file MPEG2TransportStreamTrickModeFilter.cpp.
References onSourceClosure1().
Referenced by readTransportPacket().
00247 { 00248 MPEG2TransportStreamTrickModeFilter* filter = (MPEG2TransportStreamTrickModeFilter*)clientData; 00249 filter->onSourceClosure1(); 00250 }
| void MPEG2TransportStreamTrickModeFilter::onSourceClosure1 | ( | ) | [private] |
Definition at line 252 of file MPEG2TransportStreamTrickModeFilter.cpp.
References fIndexFile, FramedSource::handleClosure(), and MPEG2TransportStreamIndexFile::stopReading().
Referenced by afterGettingFrame1(), doGetNextFrame(), and onSourceClosure().
00252 { 00253 fIndexFile->stopReading(); 00254 FramedSource::handleClosure(this); 00255 }
| FramedSource* FramedFilter::inputSource | ( | ) | const [inline, inherited] |
Definition at line 30 of file FramedFilter.hh.
References FramedFilter::fInputSource.
Referenced by AC3AudioStreamFramer::AC3AudioStreamFramer(), EndianSwap16::createNew(), HostFromNetworkOrder16::createNew(), NetworkFromHostOrder16::createNew(), PCMFromuLawAudioSource::createNew(), QCELPDeinterleaver::createNew(), MPEG4VideoStreamFramer::createNew(), MPEG4VideoStreamDiscreteFramer::createNew(), MPEG2IFrameIndexFromTransportStream::createNew(), MPEG1or2VideoStreamFramer::createNew(), MPEG1or2VideoStreamDiscreteFramer::createNew(), MPEG1or2AudioStreamFramer::createNew(), MP3Transcoder::createNew(), MP3ADUTranscoder::createNew(), MP3ADUdeinterleaver::createNew(), MP3ADUinterleaver::createNew(), MP3FromADUSource::createNew(), ADUFromMP3Source::createNew(), H263plusVideoStreamFramer::createNew(), AC3AudioStreamFramer::createNew(), H264VideoRTPSink::doSpecialFrameHandling(), MP3ADUinterleaverBase::getInputSource(), H263plusVideoStreamFramer::H263plusVideoStreamFramer(), MPEG1or2VideoStreamFramer::MPEG1or2VideoStreamFramer(), MPEG4VideoStreamFramer::MPEG4VideoStreamFramer(), MP3AudioFileServerMediaSubsession::seekStreamSource(), ClientTrickPlayState::setSource(), and MP3AudioFileServerMediaSubsession::setStreamSourceScale().
00030 { return fInputSource; }
| char const * FramedFilter::MIMEtype | ( | ) | const [protected, virtual, inherited] |
Reimplemented from MediaSource.
Reimplemented in ADUFromMP3Source, and MP3FromADUSource.
Definition at line 39 of file FramedFilter.cpp.
References FramedFilter::fInputSource, MediaSource::MIMEtype(), and NULL.
00039 { 00040 if (fInputSource == NULL) return ""; 00041 00042 return fInputSource->MIMEtype(); 00043 }
| void FramedFilter::getAttributes | ( | ) | const [protected, virtual, inherited] |
Reimplemented from MediaSource.
Reimplemented in MP3ADUTranscoder.
Definition at line 45 of file FramedFilter.cpp.
References FramedFilter::fInputSource, MediaSource::getAttributes(), and NULL.
00045 { 00046 if (fInputSource != NULL) fInputSource->getAttributes(); 00047 }
| 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 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(), WAVAudioFileSource::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 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 }