#include <MPEG2IndexFromTransportStream.hh>
Inheritance diagram for MPEG2IFrameIndexFromTransportStream:


Public Types | |
| typedef void( | afterGettingFunc )(void *clientData, unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds) |
| typedef void( | onCloseFunc )(void *clientData) |
Public Member Functions | |
| FramedSource * | inputSource () const |
| void | reassignInputSource (FramedSource *newInputSource) |
| void | detachInputSource () |
| 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 | isDVVideoStreamFramer () 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 MPEG2IFrameIndexFromTransportStream * | createNew (UsageEnvironment &env, FramedSource *inputSource) |
| 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 | afterGetting (FramedSource *source) |
| static void | close (UsageEnvironment &env, char const *mediumName) |
| static void | close (Medium *medium) |
Protected Member Functions | |
| MPEG2IFrameIndexFromTransportStream (UsageEnvironment &env, FramedSource *inputSource) | |
| virtual | ~MPEG2IFrameIndexFromTransportStream () |
| virtual char const * | MIMEtype () const |
| virtual void | getAttributes () const |
| virtual void | doStopGettingFrames () |
| TaskToken & | nextTask () |
Protected Attributes | |
| FramedSource * | fInputSource |
| unsigned char * | fTo |
| unsigned | fMaxSize |
| unsigned | fFrameSize |
| unsigned | fNumTruncatedBytes |
| timeval | fPresentationTime |
| unsigned | fDurationInMicroseconds |
Private Member Functions | |
| virtual void | doGetNextFrame () |
| void | afterGettingFrame1 (unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds) |
| void | handleInputClosure1 () |
| void | analyzePAT (unsigned char *pkt, unsigned size) |
| void | analyzePMT (unsigned char *pkt, unsigned size) |
| Boolean | deliverIndexRecord () |
| Boolean | parseFrame () |
| Boolean | parseToNextCode (unsigned char &nextCode) |
| void | compactParseBuffer () |
| void | addToTail (IndexRecord *newIndexRecord) |
Static Private Member Functions | |
| static void | afterGettingFrame (void *clientData, unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds) |
| static void | handleInputClosure (void *clientData) |
Private Attributes | |
| Boolean | fIsH264 |
| unsigned long | fInputTransportPacketCounter |
| unsigned | fClosureNumber |
| u_int8_t | fLastContinuityCounter |
| float | fFirstPCR |
| float | fLastPCR |
| Boolean | fHaveSeenFirstPCR |
| u_int16_t | fPMT_PID |
| u_int16_t | fVideo_PID |
| unsigned char | fInputBuffer [TRANSPORT_PACKET_SIZE] |
| unsigned char * | fParseBuffer |
| unsigned | fParseBufferSize |
| unsigned | fParseBufferFrameStart |
| unsigned | fParseBufferParseEnd |
| unsigned | fParseBufferDataEnd |
| IndexRecord * | fHeadIndexRecord |
| IndexRecord * | fTailIndexRecord |
Friends | |
| class | MediaLookupTable |
Definition at line 38 of file MPEG2IndexFromTransportStream.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.
| MPEG2IFrameIndexFromTransportStream::MPEG2IFrameIndexFromTransportStream | ( | UsageEnvironment & | env, | |
| FramedSource * | inputSource | |||
| ) | [protected] |
Definition at line 113 of file MPEG2IndexFromTransportStream.cpp.
References fParseBuffer, and fParseBufferSize.
Referenced by createNew().
00115 : FramedFilter(env, inputSource), 00116 fIsH264(False), fInputTransportPacketCounter((unsigned)-1), fClosureNumber(0), 00117 fLastContinuityCounter(~0), 00118 fFirstPCR(0.0), fLastPCR(0.0), fHaveSeenFirstPCR(False), 00119 fPMT_PID(0x10), fVideo_PID(0xE0), // default values 00120 fParseBufferSize(PARSE_BUFFER_SIZE), 00121 fParseBufferFrameStart(0), fParseBufferParseEnd(4), fParseBufferDataEnd(0), 00122 fHeadIndexRecord(NULL), fTailIndexRecord(NULL) { 00123 fParseBuffer = new unsigned char[fParseBufferSize]; 00124 }
| MPEG2IFrameIndexFromTransportStream::~MPEG2IFrameIndexFromTransportStream | ( | ) | [protected, virtual] |
Definition at line 126 of file MPEG2IndexFromTransportStream.cpp.
References fHeadIndexRecord, and fParseBuffer.
00126 { 00127 delete fHeadIndexRecord; 00128 delete[] fParseBuffer; 00129 }
| MPEG2IFrameIndexFromTransportStream * MPEG2IFrameIndexFromTransportStream::createNew | ( | UsageEnvironment & | env, | |
| FramedSource * | inputSource | |||
| ) | [static] |
Definition at line 97 of file MPEG2IndexFromTransportStream.cpp.
References env, FramedFilter::inputSource(), and MPEG2IFrameIndexFromTransportStream().
Referenced by main().
00098 { 00099 return new MPEG2IFrameIndexFromTransportStream(env, inputSource); 00100 }
| void MPEG2IFrameIndexFromTransportStream::doGetNextFrame | ( | ) | [private, virtual] |
Implements FramedSource.
Definition at line 131 of file MPEG2IndexFromTransportStream.cpp.
References afterGettingFrame(), compactParseBuffer(), deliverIndexRecord(), Medium::envir(), fInputBuffer, FramedFilter::fInputSource, fParseBufferDataEnd, fParseBufferSize, FramedSource::getNextFrame(), handleInputClosure(), handleInputClosure1(), parseFrame(), and TRANSPORT_PACKET_SIZE.
Referenced by afterGettingFrame1(), and handleInputClosure1().
00131 { 00132 // Begin by trying to deliver an index record (for an already-parsed frame) 00133 // to the client: 00134 if (deliverIndexRecord()) return; 00135 00136 // No more index records are left to deliver, so try to parse a new frame: 00137 if (parseFrame()) { // success - try again 00138 doGetNextFrame(); 00139 return; 00140 } 00141 00142 // We need to read some more Transport Stream packets. Check whether we have room: 00143 if (fParseBufferSize - fParseBufferDataEnd < TRANSPORT_PACKET_SIZE) { 00144 // There's no room left. Compact the buffer, and check again: 00145 compactParseBuffer(); 00146 if (fParseBufferSize - fParseBufferDataEnd < TRANSPORT_PACKET_SIZE) { 00147 envir() << "ERROR: parse buffer full; increase MAX_FRAME_SIZE\n"; 00148 // Treat this as if the input source ended: 00149 handleInputClosure1(); 00150 return; 00151 } 00152 } 00153 00154 // Arrange to read a new Transport Stream packet: 00155 fInputSource->getNextFrame(fInputBuffer, sizeof fInputBuffer, 00156 afterGettingFrame, this, 00157 handleInputClosure, this); 00158 }
| void MPEG2IFrameIndexFromTransportStream::afterGettingFrame | ( | void * | clientData, | |
| unsigned | frameSize, | |||
| unsigned | numTruncatedBytes, | |||
| struct timeval | presentationTime, | |||
| unsigned | durationInMicroseconds | |||
| ) | [static, private] |
Definition at line 161 of file MPEG2IndexFromTransportStream.cpp.
References afterGettingFrame1().
Referenced by doGetNextFrame().
00164 { 00165 MPEG2IFrameIndexFromTransportStream* source 00166 = (MPEG2IFrameIndexFromTransportStream*)clientData; 00167 source->afterGettingFrame1(frameSize, numTruncatedBytes, 00168 presentationTime, durationInMicroseconds); 00169 }
| void MPEG2IFrameIndexFromTransportStream::afterGettingFrame1 | ( | unsigned | frameSize, | |
| unsigned | numTruncatedBytes, | |||
| struct timeval | presentationTime, | |||
| unsigned | durationInMicroseconds | |||
| ) | [private] |
Definition at line 174 of file MPEG2IndexFromTransportStream.cpp.
References addToTail(), analyzePAT(), analyzePMT(), doGetNextFrame(), Medium::envir(), fFirstPCR, fHaveSeenFirstPCR, fInputBuffer, fInputTransportPacketCounter, fLastContinuityCounter, fLastPCR, fParseBuffer, fParseBufferDataEnd, fPMT_PID, fVideo_PID, handleInputClosure1(), PAT_PID, TRANSPORT_PACKET_SIZE, TRANSPORT_SYNC_BYTE, and True.
Referenced by afterGettingFrame().
00177 { 00178 if (frameSize < TRANSPORT_PACKET_SIZE || fInputBuffer[0] != TRANSPORT_SYNC_BYTE) { 00179 if (fInputBuffer[0] != TRANSPORT_SYNC_BYTE) { 00180 envir() << "Bad TS sync byte: 0x" << fInputBuffer[0] << "\n"; 00181 } 00182 // Handle this as if the source ended: 00183 handleInputClosure1(); 00184 return; 00185 } 00186 00187 ++fInputTransportPacketCounter; 00188 00189 // Figure out how much of this Transport Packet contains PES data: 00190 u_int8_t adaptation_field_control = (fInputBuffer[3]&0x30)>>4; 00191 u_int8_t totalHeaderSize 00192 = adaptation_field_control == 1 ? 4 : 5 + fInputBuffer[4]; 00193 00194 // Check for a PCR: 00195 if (totalHeaderSize > 5 && (fInputBuffer[5]&0x10) != 0) { 00196 // There's a PCR: 00197 u_int32_t pcrBaseHigh 00198 = (fInputBuffer[6]<<24)|(fInputBuffer[7]<<16) 00199 |(fInputBuffer[8]<<8)|fInputBuffer[9]; 00200 float pcr = pcrBaseHigh/45000.0f; 00201 if ((fInputBuffer[10]&0x80) != 0) pcr += 1/90000.0f; // add in low-bit (if set) 00202 unsigned short pcrExt = ((fInputBuffer[10]&0x01)<<8) | fInputBuffer[11]; 00203 pcr += pcrExt/27000000.0f; 00204 00205 if (!fHaveSeenFirstPCR) { 00206 fFirstPCR = pcr; 00207 fHaveSeenFirstPCR = True; 00208 } else if (pcr < fLastPCR) { 00209 // The PCR timestamp has gone backwards. DIsplay a warning about this (because it indicates buggy Transport Stream data), 00210 // and compensate for it. 00211 envir() << "\nWarning: At about " << fLastPCR-fFirstPCR << " seconds into the file, the PCR timestamp decreased - from " 00212 << fLastPCR << " to " << pcr << "\n"; 00213 fFirstPCR -= (fLastPCR - pcr); 00214 } 00215 fLastPCR = pcr; 00216 } 00217 00218 // Get the PID from the packet, and check for special tables: the PAT and PMT: 00219 u_int16_t PID = ((fInputBuffer[1]&0x1F)<<8) | fInputBuffer[2]; 00220 if (PID == PAT_PID) { 00221 analyzePAT(&fInputBuffer[totalHeaderSize], TRANSPORT_PACKET_SIZE-totalHeaderSize); 00222 } else if (PID == fPMT_PID) { 00223 analyzePMT(&fInputBuffer[totalHeaderSize], TRANSPORT_PACKET_SIZE-totalHeaderSize); 00224 } 00225 00226 // Ignore transport packets for non-video programs, 00227 // or packets with no data, or packets that duplicate the previous packet: 00228 u_int8_t continuity_counter = fInputBuffer[3]&0x0F; 00229 if ((PID != fVideo_PID) || 00230 !(adaptation_field_control == 1 || adaptation_field_control == 3) || 00231 continuity_counter == fLastContinuityCounter) { 00232 doGetNextFrame(); 00233 return; 00234 } 00235 fLastContinuityCounter = continuity_counter; 00236 00237 // Also, if this is the start of a PES packet, then skip over the PES header: 00238 Boolean payload_unit_start_indicator = (fInputBuffer[1]&0x40) != 0; 00239 //fprintf(stderr, "PUSI: %d\n", payload_unit_start_indicator);//##### 00240 if (payload_unit_start_indicator) { 00241 // Note: The following works only for MPEG-2 data ##### 00242 u_int8_t PES_header_data_length = fInputBuffer[totalHeaderSize+8]; 00243 //fprintf(stderr, "PES_header_data_length: %d\n", PES_header_data_length);//##### 00244 totalHeaderSize += 9 + PES_header_data_length; 00245 if (totalHeaderSize >= TRANSPORT_PACKET_SIZE) { 00246 envir() << "Unexpectedly large PES header size: " << PES_header_data_length << "\n"; 00247 // Handle this as if the source ended: 00248 handleInputClosure1(); 00249 return; 00250 } 00251 } 00252 00253 // The remaining data is Video Elementary Stream data. Add it to our parse buffer: 00254 unsigned vesSize = TRANSPORT_PACKET_SIZE - totalHeaderSize; 00255 memmove(&fParseBuffer[fParseBufferDataEnd], &fInputBuffer[totalHeaderSize], vesSize); 00256 fParseBufferDataEnd += vesSize; 00257 00258 // And add a new index record noting where it came from: 00259 addToTail(new IndexRecord(totalHeaderSize, vesSize, fInputTransportPacketCounter, 00260 fLastPCR - fFirstPCR)); 00261 00262 // Try again: 00263 doGetNextFrame(); 00264 }
| void MPEG2IFrameIndexFromTransportStream::handleInputClosure | ( | void * | clientData | ) | [static, private] |
Definition at line 266 of file MPEG2IndexFromTransportStream.cpp.
References handleInputClosure1().
Referenced by doGetNextFrame().
00266 { 00267 MPEG2IFrameIndexFromTransportStream* source 00268 = (MPEG2IFrameIndexFromTransportStream*)clientData; 00269 source->handleInputClosure1(); 00270 }
| void MPEG2IFrameIndexFromTransportStream::handleInputClosure1 | ( | ) | [private] |
Definition at line 279 of file MPEG2IndexFromTransportStream.cpp.
References doGetNextFrame(), fClosureNumber, fParseBuffer, fParseBufferDataEnd, fParseBufferFrameStart, fParseBufferSize, FramedSource::handleClosure(), and PICTURE_START_CODE.
Referenced by afterGettingFrame1(), doGetNextFrame(), and handleInputClosure().
00279 { 00280 if (++fClosureNumber == 1 && fParseBufferDataEnd > fParseBufferFrameStart 00281 && fParseBufferDataEnd <= fParseBufferSize - 4) { 00282 // This is the first time we saw EOF, and there's still data remaining to be 00283 // parsed. Hack: Append a Picture Header code to the end of the unparsed 00284 // data, and try again. This should use up all of the unparsed data. 00285 fParseBuffer[fParseBufferDataEnd++] = 0; 00286 fParseBuffer[fParseBufferDataEnd++] = 0; 00287 fParseBuffer[fParseBufferDataEnd++] = 1; 00288 fParseBuffer[fParseBufferDataEnd++] = PICTURE_START_CODE; 00289 00290 // Try again: 00291 doGetNextFrame(); 00292 } else { 00293 // Handle closure in the regular way: 00294 FramedSource::handleClosure(this); 00295 } 00296 }
| void MPEG2IFrameIndexFromTransportStream::analyzePAT | ( | unsigned char * | pkt, | |
| unsigned | size | |||
| ) | [private] |
Definition at line 299 of file MPEG2IndexFromTransportStream.cpp.
References fPMT_PID.
Referenced by afterGettingFrame1().
00299 { 00300 // Get the PMT_PID: 00301 while (size >= 17) { // The table is large enough 00302 u_int16_t program_number = (pkt[9]<<8) | pkt[10]; 00303 if (program_number != 0) { 00304 fPMT_PID = ((pkt[11]&0x1F)<<8) | pkt[12]; 00305 return; 00306 } 00307 00308 pkt += 4; size -= 4; 00309 } 00310 }
| void MPEG2IFrameIndexFromTransportStream::analyzePMT | ( | unsigned char * | pkt, | |
| unsigned | size | |||
| ) | [private] |
Definition at line 313 of file MPEG2IndexFromTransportStream.cpp.
References fIsH264, fVideo_PID, and True.
Referenced by afterGettingFrame1().
00313 { 00314 // Scan the "elementary_PID"s in the map, until we see the first video stream. 00315 00316 // First, get the "section_length", to get the table's size: 00317 u_int16_t section_length = ((pkt[2]&0x0F)<<8) | pkt[3]; 00318 if ((unsigned)(4+section_length) < size) size = (4+section_length); 00319 00320 // Then, skip any descriptors following the "program_info_length": 00321 if (size < 22) return; // not enough data 00322 unsigned program_info_length = ((pkt[11]&0x0F)<<8) | pkt[12]; 00323 pkt += 13; size -= 13; 00324 if (size < program_info_length) return; // not enough data 00325 pkt += program_info_length; size -= program_info_length; 00326 00327 // Look at each ("stream_type","elementary_PID") pair, looking for a video stream 00328 // ("stream_type" == 1 or 2): 00329 while (size >= 9) { 00330 u_int8_t stream_type = pkt[0]; 00331 u_int16_t elementary_PID = ((pkt[1]&0x1F)<<8) | pkt[2]; 00332 if (stream_type == 1 || stream_type == 2 || stream_type == 0x1B/*H.264 video*/) { 00333 if (stream_type == 0x1B) fIsH264 = True; 00334 fVideo_PID = elementary_PID; 00335 return; 00336 } 00337 00338 u_int16_t ES_info_length = ((pkt[3]&0x0F)<<8) | pkt[4]; 00339 pkt += 5; size -= 5; 00340 if (size < ES_info_length) return; // not enough data 00341 pkt += ES_info_length; size -= ES_info_length; 00342 } 00343 }
| Boolean MPEG2IFrameIndexFromTransportStream::deliverIndexRecord | ( | ) | [private] |
Definition at line 345 of file MPEG2IndexFromTransportStream.cpp.
References FramedSource::afterGetting(), Medium::envir(), False, FramedSource::fFrameSize, fHeadIndexRecord, FramedSource::fMaxSize, fTailIndexRecord, FramedSource::fTo, IndexRecord::next(), NULL, IndexRecord::pcr(), RECORD_JUNK, RECORD_UNPARSED, IndexRecord::recordType(), IndexRecord::size(), IndexRecord::startOffset(), IndexRecord::transportPacketNumber(), True, and IndexRecord::unlink().
Referenced by doGetNextFrame().
00345 { 00346 IndexRecord* head = fHeadIndexRecord; 00347 if (head == NULL) return False; 00348 00349 // Check whether the head record has been parsed yet: 00350 if (head->recordType() == RECORD_UNPARSED) return False; 00351 00352 // Remove the head record (the one whose data we'll be delivering): 00353 IndexRecord* next = head->next(); 00354 head->unlink(); 00355 if (next == head) { 00356 fHeadIndexRecord = fTailIndexRecord = NULL; 00357 } else { 00358 fHeadIndexRecord = next; 00359 } 00360 00361 if (head->recordType() == RECORD_JUNK) { 00362 // Don't actually deliver the data to the client: 00363 delete head; 00364 // Try to deliver the next record instead: 00365 return deliverIndexRecord(); 00366 } 00367 00368 // Deliver data from the head record: 00369 #ifdef DEBUG 00370 envir() << "delivering: " << *head << "\n"; 00371 #endif 00372 if (fMaxSize < 11) { 00373 fFrameSize = 0; 00374 } else { 00375 fTo[0] = (u_int8_t)(head->recordType()); 00376 fTo[1] = head->startOffset(); 00377 fTo[2] = head->size(); 00378 // Deliver the PCR, as 24 bits (integer part; little endian) + 8 bits (fractional part) 00379 float pcr = head->pcr(); 00380 unsigned pcr_int = (unsigned)pcr; 00381 u_int8_t pcr_frac = (u_int8_t)(256*(pcr-pcr_int)); 00382 fTo[3] = (unsigned char)(pcr_int); 00383 fTo[4] = (unsigned char)(pcr_int>>8); 00384 fTo[5] = (unsigned char)(pcr_int>>16); 00385 fTo[6] = (unsigned char)(pcr_frac); 00386 // Deliver the transport packet number (in little-endian order): 00387 unsigned long tpn = head->transportPacketNumber(); 00388 fTo[7] = (unsigned char)(tpn); 00389 fTo[8] = (unsigned char)(tpn>>8); 00390 fTo[9] = (unsigned char)(tpn>>16); 00391 fTo[10] = (unsigned char)(tpn>>24); 00392 fFrameSize = 11; 00393 } 00394 00395 // Free the (former) head record (as we're now done with it): 00396 delete head; 00397 00398 // Complete delivery to the client: 00399 afterGetting(this); 00400 return True; 00401 }
| Boolean MPEG2IFrameIndexFromTransportStream::parseFrame | ( | ) | [private] |
Definition at line 403 of file MPEG2IndexFromTransportStream.cpp.
References IndexRecord::addAfter(), Medium::envir(), False, fHeadIndexRecord, fIsH264, fParseBuffer, fParseBufferDataEnd, fParseBufferFrameStart, fParseBufferParseEnd, frameSize, fTailIndexRecord, GROUP_START_CODE, GROUP_VOP_START_CODE, IndexRecord::next(), parseToNextCode(), IndexRecord::pcr(), PICTURE_START_CODE, RECORD_GOP, RECORD_JUNK, RECORD_NAL_IFRAME, RECORD_NAL_NON_IFRAME, RECORD_NAL_OTHER, RECORD_NAL_PPS, RECORD_NAL_SEI, RECORD_NAL_SPS, RECORD_PIC_IFRAME, RECORD_PIC_NON_IFRAME, RECORD_VSH, IndexRecord::recordType(), IndexRecord::setFirstFlag(), IndexRecord::size(), IndexRecord::startOffset(), IndexRecord::transportPacketNumber(), True, VIDEO_SEQUENCE_START_CODE, VISUAL_OBJECT_SEQUENCE_START_CODE, and VOP_START_CODE.
Referenced by doGetNextFrame().
00403 { 00404 // At this point, we have a queue of >=0 (unparsed) index records, representing 00405 // the data in the parse buffer from "fParseBufferFrameStart" 00406 // to "fParseBufferDataEnd". We now parse through this data, looking for 00407 // a complete 'frame', where a 'frame', in this case, means: 00408 // for MPEG video: a Video Sequence Header, GOP Header, Picture Header, or Slice 00409 // for H.264 video: a NAL unit 00410 00411 // Inspect the frame's initial 4-byte code, to make sure it starts with a system code: 00412 if (fParseBufferDataEnd-fParseBufferFrameStart < 4) return False; // not enough data 00413 unsigned numInitialBadBytes = 0; 00414 unsigned char const* p = &fParseBuffer[fParseBufferFrameStart]; 00415 if (!(p[0] == 0 && p[1] == 0 && p[2] == 1)) { 00416 // There's no system code at the beginning. Parse until we find one: 00417 if (fParseBufferParseEnd == fParseBufferFrameStart + 4) { 00418 // Start parsing from the beginning of the frame data: 00419 fParseBufferParseEnd = fParseBufferFrameStart; 00420 } 00421 unsigned char nextCode; 00422 if (!parseToNextCode(nextCode)) return False; 00423 00424 numInitialBadBytes = fParseBufferParseEnd - fParseBufferFrameStart; 00425 //fprintf(stderr, "#####numInitialBadBytes: %d (0x%x)\n", numInitialBadBytes, numInitialBadBytes); 00426 fParseBufferFrameStart = fParseBufferParseEnd; 00427 fParseBufferParseEnd += 4; // skip over the code that we just saw 00428 p = &fParseBuffer[fParseBufferFrameStart]; 00429 } 00430 00431 unsigned char curCode = p[3]; 00432 if (fIsH264) curCode &= 0x1F; // nal_unit_type 00433 RecordType curRecordType; 00434 unsigned char nextCode; 00435 switch (curCode) { 00436 case VIDEO_SEQUENCE_START_CODE: 00437 case VISUAL_OBJECT_SEQUENCE_START_CODE: { 00438 curRecordType = RECORD_VSH; 00439 while (1) { 00440 if (!parseToNextCode(nextCode)) return False; 00441 if (nextCode == GROUP_START_CODE || /*nextCode == GROUP_VOP_START_CODE ||*/ 00442 nextCode == PICTURE_START_CODE || nextCode == VOP_START_CODE) break; 00443 fParseBufferParseEnd += 4; // skip over the code that we just saw 00444 } 00445 break; 00446 } 00447 case GROUP_START_CODE: 00448 /*case GROUP_VOP_START_CODE:*/ { 00449 curRecordType = RECORD_GOP; 00450 while (1) { 00451 if (!parseToNextCode(nextCode)) return False; 00452 if (nextCode == PICTURE_START_CODE || nextCode == VOP_START_CODE) break; 00453 fParseBufferParseEnd += 4; // skip over the code that we just saw 00454 } 00455 break; 00456 } 00457 case 1: // Coded slice of a non-IDR picture (H.264) 00458 curRecordType = RECORD_NAL_NON_IFRAME; 00459 if (!parseToNextCode(nextCode)) return False; 00460 break; 00461 case 5: // Coded slice of an IDR picture (H.264) 00462 curRecordType = RECORD_NAL_IFRAME; 00463 if (!parseToNextCode(nextCode)) return False; 00464 break; 00465 case 6: // Supplemental enhancement information (SEI) (H.264) 00466 curRecordType = RECORD_NAL_SEI; 00467 if (!parseToNextCode(nextCode)) return False; 00468 break; 00469 case 7: // Sequence parameter set (SPS) (H.264) 00470 curRecordType = RECORD_NAL_SPS; 00471 if (!parseToNextCode(nextCode)) return False; 00472 break; 00473 case 8: // Picture parameter set (PPS) (H.264) 00474 curRecordType = RECORD_NAL_PPS; 00475 if (!parseToNextCode(nextCode)) return False; 00476 break; 00477 default: { // picture (including slices), or some other H.264 NAL unit 00478 if (fIsH264) { 00479 curRecordType = RECORD_NAL_OTHER; 00480 if (!parseToNextCode(nextCode)) return False; 00481 } else { 00482 curRecordType = RECORD_PIC_NON_IFRAME; // may get changed to IFRAME later 00483 while (1) { 00484 if (!parseToNextCode(nextCode)) return False; 00485 if (nextCode == VIDEO_SEQUENCE_START_CODE || nextCode == VISUAL_OBJECT_SEQUENCE_START_CODE || 00486 nextCode == GROUP_START_CODE || nextCode == GROUP_VOP_START_CODE || 00487 nextCode == PICTURE_START_CODE || nextCode == VOP_START_CODE) break; 00488 fParseBufferParseEnd += 4; // skip over the code that we just saw 00489 } 00490 } 00491 break; 00492 } 00493 } 00494 00495 if (curRecordType == RECORD_PIC_NON_IFRAME) { 00496 if (curCode == VOP_START_CODE) { // MPEG-4 00497 //fprintf(stderr, "#####parseFrame()1(4): 0x%x, 0x%x\n", curCode, fParseBuffer[fParseBufferFrameStart+4]&0xC0); 00498 if ((fParseBuffer[fParseBufferFrameStart+4]&0xC0) == 0) { 00499 // This is actually an I-frame. Note it as such: 00500 curRecordType = RECORD_PIC_IFRAME; 00501 } 00502 } else { // MPEG-1 or 2 00503 //fprintf(stderr, "#####parseFrame()1(!4): 0x%x, 0x%x\n", curCode, fParseBuffer[fParseBufferFrameStart+5]&0x38); 00504 if ((fParseBuffer[fParseBufferFrameStart+5]&0x38) == 0x08) { 00505 // This is actually an I-frame. Note it as such: 00506 curRecordType = RECORD_PIC_IFRAME; 00507 } 00508 } 00509 } 00510 00511 // There is now a parsed 'frame', from "fParseBufferFrameStart" 00512 // to "fParseBufferParseEnd". Tag the corresponding index records to note this: 00513 unsigned frameSize = fParseBufferParseEnd - fParseBufferFrameStart + numInitialBadBytes; 00514 #ifdef DEBUG 00515 envir() << "parsed " << recordTypeStr[curRecordType] << "; length " 00516 << frameSize << "\n"; 00517 #endif 00518 for (IndexRecord* r = fHeadIndexRecord; ; r = r->next()) { 00519 if (numInitialBadBytes >= r->size()) { 00520 r->recordType() = RECORD_JUNK; 00521 numInitialBadBytes -= r->size(); 00522 } else { 00523 r->recordType() = curRecordType; 00524 } 00525 if (r == fHeadIndexRecord) r->setFirstFlag(); 00526 // indicates that this is the first record for this frame 00527 00528 if (r->size() > frameSize) { 00529 // This record contains extra data that's not part of the frame. 00530 // Shorten this record, and move the extra data to a new record 00531 // that comes afterwards: 00532 u_int8_t newOffset = r->startOffset() + frameSize; 00533 u_int8_t newSize = r->size() - frameSize; 00534 r->size() = frameSize; 00535 #ifdef DEBUG 00536 envir() << "tagged record (modified): " << *r << "\n"; 00537 #endif 00538 00539 IndexRecord* newRecord 00540 = new IndexRecord(newOffset, newSize, r->transportPacketNumber(), r->pcr()); 00541 newRecord->addAfter(r); 00542 if (fTailIndexRecord == r) fTailIndexRecord = newRecord; 00543 #ifdef DEBUG 00544 envir() << "added extra record: " << *newRecord << "\n"; 00545 #endif 00546 } else { 00547 #ifdef DEBUG 00548 envir() << "tagged record: " << *r << "\n"; 00549 #endif 00550 } 00551 frameSize -= r->size(); 00552 if (frameSize == 0) break; 00553 if (r == fTailIndexRecord) { // this shouldn't happen 00554 envir() << "!!!!!Internal consistency error!!!!!\n"; 00555 return False; 00556 } 00557 } 00558 00559 // Finally, update our parse state (to skip over the now-parsed data): 00560 fParseBufferFrameStart = fParseBufferParseEnd; 00561 fParseBufferParseEnd += 4; // to skip over the next code (that we found) 00562 00563 return True; 00564 }
| Boolean MPEG2IFrameIndexFromTransportStream::parseToNextCode | ( | unsigned char & | nextCode | ) | [private] |
Definition at line 567 of file MPEG2IndexFromTransportStream.cpp.
References False, fParseBuffer, fParseBufferDataEnd, fParseBufferParseEnd, and True.
Referenced by parseFrame().
00567 { 00568 unsigned char const* p = &fParseBuffer[fParseBufferParseEnd]; 00569 unsigned char const* end = &fParseBuffer[fParseBufferDataEnd]; 00570 while (p <= end-4) { 00571 if (p[2] > 1) p += 3; // common case (optimized) 00572 else if (p[2] == 0) ++p; 00573 else if (p[0] == 0 && p[1] == 0) { // && p[2] == 1 00574 // We found a code here: 00575 nextCode = p[3]; 00576 fParseBufferParseEnd = p - &fParseBuffer[0]; // where we've gotten to 00577 return True; 00578 } else p += 3; 00579 } 00580 00581 fParseBufferParseEnd = p - &fParseBuffer[0]; // where we've gotten to 00582 return False; // no luck this time 00583 }
| void MPEG2IFrameIndexFromTransportStream::compactParseBuffer | ( | ) | [private] |
Definition at line 585 of file MPEG2IndexFromTransportStream.cpp.
References Medium::envir(), fParseBuffer, fParseBufferDataEnd, fParseBufferFrameStart, and fParseBufferParseEnd.
Referenced by doGetNextFrame().
00585 { 00586 #ifdef DEBUG 00587 envir() << "Compacting parse buffer: [" << fParseBufferFrameStart 00588 << "," << fParseBufferParseEnd << "," << fParseBufferDataEnd << "]"; 00589 #endif 00590 memmove(&fParseBuffer[0], &fParseBuffer[fParseBufferFrameStart], 00591 fParseBufferDataEnd - fParseBufferFrameStart); 00592 fParseBufferDataEnd -= fParseBufferFrameStart; 00593 fParseBufferParseEnd -= fParseBufferFrameStart; 00594 fParseBufferFrameStart = 0; 00595 #ifdef DEBUG 00596 envir() << "-> [" << fParseBufferFrameStart 00597 << "," << fParseBufferParseEnd << "," << fParseBufferDataEnd << "]\n"; 00598 #endif 00599 }
| void MPEG2IFrameIndexFromTransportStream::addToTail | ( | IndexRecord * | newIndexRecord | ) | [private] |
Definition at line 601 of file MPEG2IndexFromTransportStream.cpp.
References IndexRecord::addAfter(), Medium::envir(), fHeadIndexRecord, fTailIndexRecord, and NULL.
Referenced by afterGettingFrame1().
00601 { 00602 #ifdef DEBUG 00603 envir() << "adding new: " << *newIndexRecord << "\n"; 00604 #endif 00605 if (fTailIndexRecord == NULL) { 00606 fHeadIndexRecord = fTailIndexRecord = newIndexRecord; 00607 } else { 00608 newIndexRecord->addAfter(fTailIndexRecord); 00609 fTailIndexRecord = newIndexRecord; 00610 } 00611 }
| FramedSource* FramedFilter::inputSource | ( | ) | const [inline, inherited] |
Definition at line 30 of file FramedFilter.hh.
References FramedFilter::fInputSource.
Referenced by AC3AudioStreamFramer::AC3AudioStreamFramer(), MediaSubsession::addFilter(), H264VideoRTPSink::auxSDPLine(), EndianSwap24::createNew(), EndianSwap16::createNew(), HostFromNetworkOrder16::createNew(), NetworkFromHostOrder16::createNew(), PCMFromuLawAudioSource::createNew(), QCELPDeinterleaver::createNew(), MPEG4VideoStreamFramer::createNew(), MPEG4VideoStreamDiscreteFramer::createNew(), createNew(), MPEG1or2VideoStreamFramer::createNew(), MPEG1or2VideoStreamDiscreteFramer::createNew(), MPEG1or2AudioStreamFramer::createNew(), MP3Transcoder::createNew(), MP3ADUTranscoder::createNew(), MP3ADUdeinterleaver::createNew(), MP3ADUinterleaver::createNew(), MP3FromADUSource::createNew(), ADUFromMP3Source::createNew(), H264VideoStreamDiscreteFramer::createNew(), H263plusVideoStreamFramer::createNew(), DVVideoStreamFramer::createNew(), AC3AudioStreamFramer::createNew(), H264VideoRTPSink::doSpecialFrameHandling(), H264VideoFileServerMediaSubsession::getAuxSDPLine(), MP3AudioFileServerMediaSubsession::getBaseStreams(), MP3ADUinterleaverBase::getInputSource(), H263plusVideoStreamFramer::H263plusVideoStreamFramer(), MPEG1or2VideoStreamFramer::MPEG1or2VideoStreamFramer(), MPEG4VideoStreamFramer::MPEG4VideoStreamFramer(), H264VideoMatroskaFileServerMediaSubsession::seekStreamSource(), DVVideoFileServerMediaSubsession::seekStreamSource(), and ClientTrickPlayState::setSource().
00030 { return fInputSource; }
| void FramedFilter::reassignInputSource | ( | FramedSource * | newInputSource | ) | [inline, inherited] |
Definition at line 32 of file FramedFilter.hh.
References FramedFilter::fInputSource.
Referenced by T140TextRTPSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), and FramedFilter::detachInputSource().
00032 { fInputSource = newInputSource; }
| void FramedFilter::detachInputSource | ( | ) | [inline, inherited] |
Definition at line 35 of file FramedFilter.hh.
References NULL, and FramedFilter::reassignInputSource().
Referenced by H264FUAFragmenter::~H264FUAFragmenter(), and T140IdleFilter::~T140IdleFilter().
00035 { reassignInputSource(NULL); }
| 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 }
| void FramedFilter::doStopGettingFrames | ( | ) | [protected, virtual, inherited] |
Reimplemented from FramedSource.
Reimplemented in MPEG2TransportStreamFramer, MPEG2TransportStreamTrickModeFilter, T140IdleFilter, and QCELPDeinterleaver.
Definition at line 49 of file FramedFilter.cpp.
References FramedSource::doStopGettingFrames(), FramedFilter::fInputSource, NULL, and FramedSource::stopGettingFrames().
Referenced by T140IdleFilter::doStopGettingFrames(), MPEG2TransportStreamTrickModeFilter::doStopGettingFrames(), and MPEG2TransportStreamFramer::doStopGettingFrames().
00049 { 00050 FramedSource::doStopGettingFrames(); 00051 if (fInputSource != NULL) fInputSource->stopGettingFrames(); 00052 }
| 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 65 of file MediaSource.cpp.
References env, False, Medium::isSource(), Medium::lookupByName(), NULL, and True.
Referenced by RTPSource::lookupByName(), and FramedSource::lookupByName().
00067 { 00068 resultSource = NULL; // unless we succeed 00069 00070 Medium* medium; 00071 if (!Medium::lookupByName(env, sourceName, medium)) return False; 00072 00073 if (!medium->isSource()) { 00074 env.setResultMsg(sourceName, " is not a media source"); 00075 return False; 00076 } 00077 00078 resultSource = (MediaSource*)medium; 00079 return True; 00080 }
| 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 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, UsageEnvironment::internalError(), and True.
Referenced by MPEG2TransportStreamFramer::afterGettingFrame1(), InputESSourceRecord::askForNewData(), MPEG2TransportStreamFromPESSource::awaitNewBuffer(), DummySink::continuePlaying(), QuickTimeFileSink::continuePlaying(), MFSD_DummySink::continuePlaying(), FileSink::continuePlaying(), AVIFileSink::continuePlaying(), BasicUDPSink::continuePlaying1(), StreamReplicator::deactivateStreamReplica(), StreamReplicator::deliverReceivedFrame(), EndianSwap24::doGetNextFrame(), EndianSwap16::doGetNextFrame(), HostFromNetworkOrder16::doGetNextFrame(), NetworkFromHostOrder16::doGetNextFrame(), PCMFromuLawAudioSource::doGetNextFrame(), uLawFromPCMAudioSource::doGetNextFrame(), T140IdleFilter::doGetNextFrame(), QCELPDeinterleaver::doGetNextFrame(), PresentationTimeSubsessionNormalizer::doGetNextFrame(), MPEG4VideoStreamDiscreteFramer::doGetNextFrame(), MPEG2TransportStreamFramer::doGetNextFrame(), doGetNextFrame(), MPEG1or2VideoStreamDiscreteFramer::doGetNextFrame(), MP3ADUTranscoder::doGetNextFrame(), MP3ADUdeinterleaver::doGetNextFrame(), MP3ADUinterleaver::doGetNextFrame(), H264VideoStreamDiscreteFramer::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), DVVideoStreamFramer::getAndDeliverData(), StreamReplicator::getNextFrame(), DVVideoStreamFramer::getProfile(), MultiFramedRTPSink::packFrame(), TCPStreamSink::processBuffer(), AC3AudioStreamParser::readAndSaveAFrame(), and MPEG2TransportStreamTrickModeFilter::readTransportPacket().
00061 { 00062 // Make sure we're not already being read: 00063 if (fIsCurrentlyAwaitingData) { 00064 envir() << "FramedSource[" << this << "]::getNextFrame(): attempting to read more than once at the same time!\n"; 00065 envir().internalError(); 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(), EndianSwap24::doGetNextFrame(), EndianSwap16::doGetNextFrame(), HostFromNetworkOrder16::doGetNextFrame(), NetworkFromHostOrder16::doGetNextFrame(), PCMFromuLawAudioSource::doGetNextFrame(), uLawFromPCMAudioSource::doGetNextFrame(), QCELPDeinterleaver::doGetNextFrame(), PresentationTimeSubsessionNormalizer::doGetNextFrame(), MPEG4VideoStreamDiscreteFramer::doGetNextFrame(), MPEG2TransportStreamFramer::doGetNextFrame(), MPEG1or2VideoStreamDiscreteFramer::doGetNextFrame(), MPEG1or2DemuxedElementaryStream::doGetNextFrame(), MP3FileSource::doGetNextFrame(), MP3ADUTranscoder::doGetNextFrame(), MP3ADUdeinterleaver::doGetNextFrame(), MP3ADUinterleaver::doGetNextFrame(), ADUFromMP3Source::doGetNextFrame(), H264VideoStreamDiscreteFramer::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), DeviceSource::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), ByteStreamMemoryBufferSource::doGetNextFrame(), ByteStreamFileSource::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), SegmentQueue::enqueueNewSegment(), DVVideoStreamFramer::getAndDeliverData(), StreamReplicator::getNextFrame(), DVVideoStreamFramer::getProfile(), MatroskaDemux::handleEndOfFile(), handleInputClosure1(), T140IdleFilter::onSourceClosure(), StreamReplicator::onSourceClosure(), MPEG2TransportStreamTrickModeFilter::onSourceClosure1(), and ProxyServerMediaSubsession::subsessionByeHandler().
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 FileSink::afterGettingFrame(), StreamReplicator::deactivateStreamReplica(), QCELPDeinterleaver::doStopGettingFrames(), MPEG2TransportStreamFromPESSource::doStopGettingFrames(), FramedFilter::doStopGettingFrames(), AMRDeinterleaver::doStopGettingFrames(), and MediaSink::stopPlaying().
00103 { 00104 fIsCurrentlyAwaitingData = False; // indicates that we can be read again 00105 00106 // Perform any specialized action now: 00107 doStopGettingFrames(); 00108 }
| unsigned FramedSource::maxFrameSize | ( | ) | const [virtual, inherited] |
Reimplemented in MPEG1or2DemuxedElementaryStream.
Definition at line 116 of file FramedSource.cpp.
Referenced by StreamParser::ensureValidBytes1().
| Boolean FramedSource::isCurrentlyAwaitingData | ( | ) | const [inline, inherited] |
Definition at line 60 of file FramedSource.hh.
References FramedSource::fIsCurrentlyAwaitingData.
Referenced by T140IdleFilter::afterGettingFrame(), afterPlaying(), InputESSourceRecord::askForNewData(), MPEG2TransportStreamFromESSource::awaitNewBuffer(), MatroskaFileParser::continueParsing(), QuickTimeFileSink::continuePlaying(), AVIFileSink::continuePlaying(), StreamReplicator::deactivateStreamReplica(), DeviceSource::deliverFrame(), MatroskaFileParser::deliverFrameWithinBlock(), T140IdleFilter::doGetNextFrame(), QCELPDeinterleaver::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), WAVAudioFileSource::fileReadableHandler(), ByteStreamFileSource::fileReadableHandler(), StreamReplicator::getNextFrame(), BasicUDPSource::incomingPacketHandler1(), and TCPStreamSink::processBuffer().
00060 {return fIsCurrentlyAwaitingData;}
| void FramedSource::afterGetting | ( | FramedSource * | source | ) | [static, inherited] |
Definition at line 81 of file FramedSource.cpp.
References FramedSource::fAfterGettingClientData, FramedSource::fAfterGettingFunc, False, FramedSource::fDurationInMicroseconds, FramedSource::fFrameSize, FramedSource::fIsCurrentlyAwaitingData, FramedSource::fNumTruncatedBytes, FramedSource::fPresentationTime, and NULL.
Referenced by PresentationTimeSubsessionNormalizer::afterGettingFrame(), ByteStreamMultiFileSource::afterGettingFrame(), EndianSwap24::afterGettingFrame1(), EndianSwap16::afterGettingFrame1(), HostFromNetworkOrder16::afterGettingFrame1(), NetworkFromHostOrder16::afterGettingFrame1(), PCMFromuLawAudioSource::afterGettingFrame1(), uLawFromPCMAudioSource::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG1or2DemuxedElementaryStream::afterGettingFrame1(), MP3ADUTranscoder::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), MPEG2TransportStreamTrickModeFilter::attemptDeliveryToClient(), MPEGVideoStreamFramer::continueReadProcessing(), MPEG1or2AudioStreamFramer::continueReadProcessing(), H263plusVideoStreamFramer::continueReadProcessing(), T140IdleFilter::deliverEmptyFrame(), DeviceSource::deliverFrame(), MatroskaFileParser::deliverFrameBytes(), T140IdleFilter::deliverFromBuffer(), deliverIndexRecord(), StreamReplicator::deliverReceivedFrame(), QCELPDeinterleaver::doGetNextFrame(), MPEG2TransportStreamTrickModeFilter::doGetNextFrame(), MPEG2TransportStreamMultiplexor::doGetNextFrame(), MP3FileSource::doGetNextFrame(), MP3ADUdeinterleaver::doGetNextFrame(), MP3ADUinterleaver::doGetNextFrame(), MP3FromADUSource::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), DVVideoStreamFramer::doGetNextFrame(), ByteStreamMemoryBufferSource::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), BasicUDPSource::incomingPacketHandler1(), and AC3AudioStreamFramer::parseNextFrame().
00081 { 00082 source->fIsCurrentlyAwaitingData = False; 00083 // indicates that we can be read again 00084 // Note that this needs to be done here, in case the "fAfterFunc" 00085 // called below tries to read another frame (which it usually will) 00086 00087 if (source->fAfterGettingFunc != NULL) { 00088 (*(source->fAfterGettingFunc))(source->fAfterGettingClientData, 00089 source->fFrameSize, source->fNumTruncatedBytes, 00090 source->fPresentationTime, 00091 source->fDurationInMicroseconds); 00092 } 00093 }
| Boolean MediaSource::isRTPSource | ( | ) | const [virtual, inherited] |
Reimplemented in RTPSource.
Definition at line 43 of file MediaSource.cpp.
References False.
Referenced by RTPSource::lookupByName().
00043 { 00044 return False; // default implementation 00045 }
| Boolean MediaSource::isMPEG1or2VideoStreamFramer | ( | ) | const [virtual, inherited] |
Reimplemented in MPEG1or2VideoStreamFramer.
Definition at line 46 of file MediaSource.cpp.
References False.
Referenced by MPEG1or2VideoRTPSink::sourceIsCompatibleWithUs().
00046 { 00047 return False; // default implementation 00048 }
| Boolean MediaSource::isMPEG4VideoStreamFramer | ( | ) | const [virtual, inherited] |
Reimplemented in MPEG4VideoStreamFramer.
Definition at line 49 of file MediaSource.cpp.
References False.
Referenced by MPEG4ESVideoRTPSink::sourceIsCompatibleWithUs().
00049 { 00050 return False; // default implementation 00051 }
| Boolean MediaSource::isH264VideoStreamFramer | ( | ) | const [virtual, inherited] |
Reimplemented in H264VideoStreamFramer.
Definition at line 52 of file MediaSource.cpp.
References False.
Referenced by H264VideoRTPSink::sourceIsCompatibleWithUs().
00052 { 00053 return False; // default implementation 00054 }
| Boolean MediaSource::isDVVideoStreamFramer | ( | ) | const [virtual, inherited] |
Reimplemented in DVVideoStreamFramer.
Definition at line 55 of file MediaSource.cpp.
References False.
Referenced by DVVideoRTPSink::sourceIsCompatibleWithUs().
00055 { 00056 return False; // default implementation 00057 }
| Boolean MediaSource::isJPEGVideoSource | ( | ) | const [virtual, inherited] |
Reimplemented in JPEGVideoSource.
Definition at line 58 of file MediaSource.cpp.
References False.
Referenced by JPEGVideoRTPSink::sourceIsCompatibleWithUs().
00058 { 00059 return False; // default implementation 00060 }
| Boolean MediaSource::isAMRAudioSource | ( | ) | const [virtual, inherited] |
Reimplemented in AMRAudioSource.
Definition at line 61 of file MediaSource.cpp.
References False.
Referenced by AMRAudioRTPSink::sourceIsCompatibleWithUs(), and AMRAudioFileSink::sourceIsCompatibleWithUs().
00061 { 00062 return False; // default implementation 00063 }
| 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(), 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(), addToTail(), StreamParser::afterGettingBytes1(), DummySink::afterGettingFrame(), TCPStreamSink::afterGettingFrame(), T140IdleFilter::afterGettingFrame(), FileSink::afterGettingFrame(), MultiFramedRTPSink::afterGettingFrame1(), InputESSourceRecord::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), H264VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoStreamParser::analyzeVOLHeader(), announceStream(), RTSPServer::RTSPClientConnection::changeClientInputSocket(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), H264VideoFileServerMediaSubsession::checkForAuxSDPLine1(), Medium::close(), ProxyServerMediaSubsession::closeStreamSource(), 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(), deliverIndexRecord(), SegmentQueue::dequeue(), DeviceSource::DeviceSource(), WAVAudioFileSource::doGetNextFrame(), T140IdleFilter::doGetNextFrame(), MPEG2TransportStreamMultiplexor::doGetNextFrame(), 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(), 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(), 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::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 MediaLookupTable [friend, inherited] |
Definition at line 76 of file MPEG2IndexFromTransportStream.hh.
Referenced by analyzePMT(), and parseFrame().
unsigned long MPEG2IFrameIndexFromTransportStream::fInputTransportPacketCounter [private] |
unsigned MPEG2IFrameIndexFromTransportStream::fClosureNumber [private] |
Definition at line 78 of file MPEG2IndexFromTransportStream.hh.
Referenced by handleInputClosure1().
u_int8_t MPEG2IFrameIndexFromTransportStream::fLastContinuityCounter [private] |
float MPEG2IFrameIndexFromTransportStream::fFirstPCR [private] |
float MPEG2IFrameIndexFromTransportStream::fLastPCR [private] |
u_int16_t MPEG2IFrameIndexFromTransportStream::fPMT_PID [private] |
Definition at line 82 of file MPEG2IndexFromTransportStream.hh.
Referenced by afterGettingFrame1(), and analyzePAT().
u_int16_t MPEG2IFrameIndexFromTransportStream::fVideo_PID [private] |
Definition at line 82 of file MPEG2IndexFromTransportStream.hh.
Referenced by afterGettingFrame1(), and analyzePMT().
unsigned char MPEG2IFrameIndexFromTransportStream::fInputBuffer[TRANSPORT_PACKET_SIZE] [private] |
Definition at line 84 of file MPEG2IndexFromTransportStream.hh.
Referenced by afterGettingFrame1(), and doGetNextFrame().
unsigned char* MPEG2IFrameIndexFromTransportStream::fParseBuffer [private] |
Definition at line 85 of file MPEG2IndexFromTransportStream.hh.
Referenced by afterGettingFrame1(), compactParseBuffer(), handleInputClosure1(), MPEG2IFrameIndexFromTransportStream(), parseFrame(), parseToNextCode(), and ~MPEG2IFrameIndexFromTransportStream().
unsigned MPEG2IFrameIndexFromTransportStream::fParseBufferSize [private] |
Definition at line 86 of file MPEG2IndexFromTransportStream.hh.
Referenced by doGetNextFrame(), handleInputClosure1(), and MPEG2IFrameIndexFromTransportStream().
unsigned MPEG2IFrameIndexFromTransportStream::fParseBufferFrameStart [private] |
Definition at line 87 of file MPEG2IndexFromTransportStream.hh.
Referenced by compactParseBuffer(), handleInputClosure1(), and parseFrame().
unsigned MPEG2IFrameIndexFromTransportStream::fParseBufferParseEnd [private] |
Definition at line 88 of file MPEG2IndexFromTransportStream.hh.
Referenced by compactParseBuffer(), parseFrame(), and parseToNextCode().
unsigned MPEG2IFrameIndexFromTransportStream::fParseBufferDataEnd [private] |
Definition at line 89 of file MPEG2IndexFromTransportStream.hh.
Referenced by afterGettingFrame1(), compactParseBuffer(), doGetNextFrame(), handleInputClosure1(), parseFrame(), and parseToNextCode().
Definition at line 90 of file MPEG2IndexFromTransportStream.hh.
Referenced by addToTail(), deliverIndexRecord(), parseFrame(), and ~MPEG2IFrameIndexFromTransportStream().
Definition at line 91 of file MPEG2IndexFromTransportStream.hh.
Referenced by addToTail(), deliverIndexRecord(), and parseFrame().
FramedSource* FramedFilter::fInputSource [protected, inherited] |
Definition at line 49 of file FramedFilter.hh.
Referenced by QCELPDeinterleaver::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG2TransportStreamFramer::changeInputSource(), EndianSwap24::doGetNextFrame(), EndianSwap16::doGetNextFrame(), HostFromNetworkOrder16::doGetNextFrame(), NetworkFromHostOrder16::doGetNextFrame(), PCMFromuLawAudioSource::doGetNextFrame(), uLawFromPCMAudioSource::doGetNextFrame(), T140IdleFilter::doGetNextFrame(), QCELPDeinterleaver::doGetNextFrame(), PresentationTimeSubsessionNormalizer::doGetNextFrame(), MPEG4VideoStreamDiscreteFramer::doGetNextFrame(), MPEG2TransportStreamFramer::doGetNextFrame(), doGetNextFrame(), MPEG1or2VideoStreamDiscreteFramer::doGetNextFrame(), MP3ADUTranscoder::doGetNextFrame(), MP3ADUdeinterleaver::doGetNextFrame(), MP3ADUinterleaver::doGetNextFrame(), MP3FromADUSource::doGetNextFrame(), ADUFromMP3Source::doGetNextFrame(), H264VideoStreamDiscreteFramer::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), QCELPDeinterleaver::doStopGettingFrames(), FramedFilter::doStopGettingFrames(), MPEG2TransportStreamTrickModeFilter::forgetInputSource(), DVVideoStreamFramer::getAndDeliverData(), MP3ADUTranscoder::getAttributes(), FramedFilter::getAttributes(), DVVideoStreamFramer::getProfile(), FramedFilter::inputSource(), FramedFilter::MIMEtype(), MPEG2TransportStreamTrickModeFilter::readTransportPacket(), FramedFilter::reassignInputSource(), MPEG2TransportStreamTrickModeFilter::seekToTransportPacket(), and FramedFilter::~FramedFilter().
unsigned char* FramedSource::fTo [protected, inherited] |
Definition at line 74 of file FramedSource.hh.
Referenced by DVVideoStreamFramer::afterGettingFrame(), EndianSwap24::afterGettingFrame1(), EndianSwap16::afterGettingFrame1(), HostFromNetworkOrder16::afterGettingFrame1(), NetworkFromHostOrder16::afterGettingFrame1(), PCMFromuLawAudioSource::afterGettingFrame1(), uLawFromPCMAudioSource::afterGettingFrame1(), MPEG4VideoStreamDiscreteFramer::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG1or2VideoStreamDiscreteFramer::afterGettingFrame1(), MP3ADUTranscoder::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), MPEG2TransportStreamTrickModeFilter::attemptDeliveryToClient(), StreamReplica::copyReceivedFrame(), StreamReplicator::deactivateStreamReplica(), MPEG2TransportStreamMultiplexor::deliverDataToClient(), DeviceSource::deliverFrame(), T140IdleFilter::deliverFromBuffer(), deliverIndexRecord(), StreamReplicator::deliverReceivedFrame(), EndianSwap24::doGetNextFrame(), EndianSwap16::doGetNextFrame(), HostFromNetworkOrder16::doGetNextFrame(), NetworkFromHostOrder16::doGetNextFrame(), QCELPDeinterleaver::doGetNextFrame(), PresentationTimeSubsessionNormalizer::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame(), MPEGVideoStreamFramer::doGetNextFrame(), MPEG4VideoStreamDiscreteFramer::doGetNextFrame(), MPEG2TransportStreamFramer::doGetNextFrame(), MPEG1or2VideoStreamDiscreteFramer::doGetNextFrame(), MPEG1or2DemuxedElementaryStream::doGetNextFrame(), MPEG1or2AudioStreamFramer::doGetNextFrame(), H264VideoStreamDiscreteFramer::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), H263plusVideoStreamFramer::doGetNextFrame(), DVVideoStreamFramer::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), ByteStreamMemoryBufferSource::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), AC3AudioStreamFramer::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), MP3FileSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), DVVideoStreamFramer::DVVideoStreamFramer(), MP3FromADUSource::generateFrameFromHeadADU(), DVVideoStreamFramer::getAndDeliverData(), StreamReplicator::getNextFrame(), FramedSource::getNextFrame(), BasicUDPSource::incomingPacketHandler1(), MP3ADUdeinterleaver::releaseOutgoingFrame(), MP3ADUinterleaver::releaseOutgoingFrame(), and MatroskaDemuxedTrack::to().
unsigned FramedSource::fMaxSize [protected, inherited] |
Definition at line 75 of file FramedSource.hh.
Referenced by MPEG1or2VideoStreamDiscreteFramer::afterGettingFrame1(), MP3ADUTranscoder::afterGettingFrame1(), StreamReplica::copyReceivedFrame(), StreamReplicator::deactivateStreamReplica(), MPEG2TransportStreamMultiplexor::deliverDataToClient(), DeviceSource::deliverFrame(), T140IdleFilter::deliverFromBuffer(), deliverIndexRecord(), StreamReplicator::deliverReceivedFrame(), EndianSwap24::doGetNextFrame(), EndianSwap16::doGetNextFrame(), HostFromNetworkOrder16::doGetNextFrame(), NetworkFromHostOrder16::doGetNextFrame(), PCMFromuLawAudioSource::doGetNextFrame(), uLawFromPCMAudioSource::doGetNextFrame(), QCELPDeinterleaver::doGetNextFrame(), PresentationTimeSubsessionNormalizer::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame(), MPEGVideoStreamFramer::doGetNextFrame(), MPEG4VideoStreamDiscreteFramer::doGetNextFrame(), MPEG2TransportStreamTrickModeFilter::doGetNextFrame(), MPEG2TransportStreamFramer::doGetNextFrame(), MPEG1or2VideoStreamDiscreteFramer::doGetNextFrame(), MPEG1or2DemuxedElementaryStream::doGetNextFrame(), MPEG1or2AudioStreamFramer::doGetNextFrame(), H264VideoStreamDiscreteFramer::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), H263plusVideoStreamFramer::doGetNextFrame(), DVVideoStreamFramer::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), ByteStreamMemoryBufferSource::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), AC3AudioStreamFramer::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), MP3FileSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), DVVideoStreamFramer::getAndDeliverData(), StreamReplicator::getNextFrame(), FramedSource::getNextFrame(), BasicUDPSource::incomingPacketHandler1(), MatroskaDemuxedTrack::maxSize(), MP3ADUdeinterleaver::releaseOutgoingFrame(), and MP3ADUinterleaver::releaseOutgoingFrame().
unsigned FramedSource::fFrameSize [protected, inherited] |
Definition at line 76 of file FramedSource.hh.
Referenced by FramedSource::afterGetting(), StreamReplicator::afterGettingFrame(), PresentationTimeSubsessionNormalizer::afterGettingFrame(), ByteStreamMultiFileSource::afterGettingFrame(), EndianSwap24::afterGettingFrame1(), EndianSwap16::afterGettingFrame1(), HostFromNetworkOrder16::afterGettingFrame1(), NetworkFromHostOrder16::afterGettingFrame1(), PCMFromuLawAudioSource::afterGettingFrame1(), uLawFromPCMAudioSource::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG1or2DemuxedElementaryStream::afterGettingFrame1(), MP3ADUTranscoder::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), MPEG2TransportStreamTrickModeFilter::attemptDeliveryToClient(), MPEGVideoStreamFramer::continueReadProcessing(), MPEG1or2AudioStreamFramer::continueReadProcessing(), H263plusVideoStreamFramer::continueReadProcessing(), StreamReplica::copyReceivedFrame(), MPEG2TransportStreamMultiplexor::deliverDataToClient(), T140IdleFilter::deliverEmptyFrame(), DeviceSource::deliverFrame(), T140IdleFilter::deliverFromBuffer(), deliverIndexRecord(), WAVAudioFileSource::doGetNextFrame(), QCELPDeinterleaver::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame(), MPEG2TransportStreamTrickModeFilter::doGetNextFrame(), MPEG2TransportStreamFramer::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), DVVideoStreamFramer::doGetNextFrame(), ByteStreamMemoryBufferSource::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), MP3FileSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), MatroskaDemuxedTrack::frameSize(), MP3FromADUSource::generateFrameFromHeadADU(), DVVideoStreamFramer::getAndDeliverData(), BasicUDPSource::incomingPacketHandler1(), AC3AudioStreamFramer::parseNextFrame(), MP3ADUdeinterleaver::releaseOutgoingFrame(), and MP3ADUinterleaver::releaseOutgoingFrame().
unsigned FramedSource::fNumTruncatedBytes [protected, inherited] |
Definition at line 77 of file FramedSource.hh.
Referenced by FramedSource::afterGetting(), StreamReplicator::afterGettingFrame(), PresentationTimeSubsessionNormalizer::afterGettingFrame(), ByteStreamMultiFileSource::afterGettingFrame(), EndianSwap24::afterGettingFrame1(), EndianSwap16::afterGettingFrame1(), HostFromNetworkOrder16::afterGettingFrame1(), NetworkFromHostOrder16::afterGettingFrame1(), PCMFromuLawAudioSource::afterGettingFrame1(), uLawFromPCMAudioSource::afterGettingFrame1(), MPEG1or2DemuxedElementaryStream::afterGettingFrame1(), MP3ADUTranscoder::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), MPEGVideoStreamFramer::continueReadProcessing(), MPEG1or2AudioStreamFramer::continueReadProcessing(), StreamReplica::copyReceivedFrame(), MPEG2TransportStreamMultiplexor::deliverDataToClient(), T140IdleFilter::deliverEmptyFrame(), DeviceSource::deliverFrame(), T140IdleFilter::deliverFromBuffer(), QCELPDeinterleaver::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), DVVideoStreamFramer::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), FramedSource::getNextFrame(), MatroskaDemuxedTrack::numTruncatedBytes(), AC3AudioStreamFramer::parseNextFrame(), MP3ADUdeinterleaver::releaseOutgoingFrame(), and MP3ADUinterleaver::releaseOutgoingFrame().
struct timeval FramedSource::fPresentationTime [read, protected, inherited] |
Definition at line 78 of file FramedSource.hh.
Referenced by FramedSource::afterGetting(), StreamReplicator::afterGettingFrame(), PresentationTimeSubsessionNormalizer::afterGettingFrame(), ByteStreamMultiFileSource::afterGettingFrame(), EndianSwap24::afterGettingFrame1(), EndianSwap16::afterGettingFrame1(), HostFromNetworkOrder16::afterGettingFrame1(), NetworkFromHostOrder16::afterGettingFrame1(), PCMFromuLawAudioSource::afterGettingFrame1(), uLawFromPCMAudioSource::afterGettingFrame1(), InputESSourceRecord::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG1or2DemuxedElementaryStream::afterGettingFrame1(), MP3ADUTranscoder::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), H264FUAFragmenter::afterGettingFrame1(), MPEG2TransportStreamTrickModeFilter::attemptDeliveryToClient(), MPEGVideoStreamFramer::computePresentationTime(), MPEGVideoStreamFramer::continueReadProcessing(), MPEG1or2AudioStreamFramer::continueReadProcessing(), H263plusVideoStreamFramer::continueReadProcessing(), StreamReplica::copyReceivedFrame(), T140IdleFilter::deliverEmptyFrame(), DeviceSource::deliverFrame(), T140IdleFilter::deliverFromBuffer(), QCELPDeinterleaver::doGetNextFrame(), ByteStreamMemoryBufferSource::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), MP3FileSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), FramedSource::FramedSource(), MP3FromADUSource::generateFrameFromHeadADU(), MPEG1or2VideoStreamFramer::getCurrentPTS(), H264VideoStreamParser::parse(), AC3AudioStreamFramer::parseNextFrame(), MatroskaDemuxedTrack::presentationTime(), MP3ADUdeinterleaver::releaseOutgoingFrame(), MP3ADUinterleaver::releaseOutgoingFrame(), and H264VideoStreamFramer::setPresentationTime().
unsigned FramedSource::fDurationInMicroseconds [protected, inherited] |
Definition at line 79 of file FramedSource.hh.
Referenced by FramedSource::afterGetting(), StreamReplicator::afterGettingFrame(), PresentationTimeSubsessionNormalizer::afterGettingFrame(), ByteStreamMultiFileSource::afterGettingFrame(), EndianSwap24::afterGettingFrame1(), EndianSwap16::afterGettingFrame1(), HostFromNetworkOrder16::afterGettingFrame1(), NetworkFromHostOrder16::afterGettingFrame1(), PCMFromuLawAudioSource::afterGettingFrame1(), uLawFromPCMAudioSource::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG1or2DemuxedElementaryStream::afterGettingFrame1(), MP3ADUTranscoder::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), H264FUAFragmenter::afterGettingFrame1(), MPEGVideoStreamFramer::continueReadProcessing(), MPEG1or2AudioStreamFramer::continueReadProcessing(), H263plusVideoStreamFramer::continueReadProcessing(), StreamReplica::copyReceivedFrame(), T140IdleFilter::deliverFromBuffer(), QCELPDeinterleaver::doGetNextFrame(), ByteStreamMemoryBufferSource::doGetNextFrame(), AMRDeinterleaver::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MP3FileSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), MatroskaDemuxedTrack::durationInMicroseconds(), MP3FromADUSource::generateFrameFromHeadADU(), FramedSource::getNextFrame(), AC3AudioStreamFramer::parseNextFrame(), MP3ADUdeinterleaver::releaseOutgoingFrame(), and MP3ADUinterleaver::releaseOutgoingFrame().
1.5.2