MPEG2IFrameIndexFromTransportStream Class Reference

#include <MPEG2IndexFromTransportStream.hh>

Inheritance diagram for MPEG2IFrameIndexFromTransportStream:

Inheritance graph
[legend]
Collaboration diagram for MPEG2IFrameIndexFromTransportStream:

Collaboration graph
[legend]

Public Types

typedef void( afterGettingFunc )(void *clientData, unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds)
typedef void( onCloseFunc )(void *clientData)

Public Member Functions

FramedSourceinputSource () 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
UsageEnvironmentenvir () 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 MPEG2IFrameIndexFromTransportStreamcreateNew (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 ()
TaskTokennextTask ()

Protected Attributes

FramedSourcefInputSource
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
IndexRecordfHeadIndexRecord
IndexRecordfTailIndexRecord

Friends

class MediaLookupTable

Detailed Description

Definition at line 38 of file MPEG2IndexFromTransportStream.hh.


Member Typedef Documentation

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.


Constructor & Destructor Documentation

MPEG2IFrameIndexFromTransportStream::MPEG2IFrameIndexFromTransportStream ( UsageEnvironment env,
FramedSource inputSource 
) [protected]

Definition at line 113 of file MPEG2IndexFromTransportStream.cpp.

References fParseBuffer, and fParseBufferSize.

Referenced by createNew().

MPEG2IFrameIndexFromTransportStream::~MPEG2IFrameIndexFromTransportStream (  )  [protected, virtual]

Definition at line 126 of file MPEG2IndexFromTransportStream.cpp.

References fHeadIndexRecord, and fParseBuffer.

00126                                                                           {
00127   delete fHeadIndexRecord;
00128   delete[] fParseBuffer;
00129 }


Member Function Documentation

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(), 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().

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 FramedFilter::fInputSource, NULL, and FramedSource::stopGettingFrames().

Referenced by T140IdleFilter::doStopGettingFrames(), MPEG2TransportStreamTrickModeFilter::doStopGettingFrames(), and MPEG2TransportStreamFramer::doStopGettingFrames().

00049                                        {
00050   if (fInputSource != NULL) fInputSource->stopGettingFrames();
00051 }

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(), EndianSwap16::doGetNextFrame(), HostFromNetworkOrder16::doGetNextFrame(), NetworkFromHostOrder16::doGetNextFrame(), PCMFromuLawAudioSource::doGetNextFrame(), uLawFromPCMAudioSource::doGetNextFrame(), T140IdleFilter::doGetNextFrame(), QCELPDeinterleaver::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(), 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(), 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 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().

00116                                           {
00117   // By default, this source has no maximum frame size.
00118   return 0;
00119 }

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 ByteStreamMultiFileSource::afterGettingFrame(), 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(), RTSPServerSupportingHTTPStreaming::RTSPClientSessionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET(), MediaSubsession::initiate(), MPEG1or2ProgramStreamFileDuration(), MPEG1or2Demux::noteElementaryStreamDeletion(), ByteStreamMultiFileSource::onSourceClosure1(), StreamState::reclaim(), RTSPServer::removeServerMediaSession(), 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::RTSPClientSessionSupportingHTTPStreaming::~RTSPClientSessionSupportingHTTPStreaming(), ServerMediaSession::~ServerMediaSession(), 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::RTSPClientSession::changeClientInputSocket(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), H264VideoFileServerMediaSubsession::checkForAuxSDPLine1(), Medium::close(), ProxyServerMediaSubsession::closeStreamSource(), compactParseBuffer(), RTSPClient::connectionHandler1(), RTSPClient::connectToServer(), ProxyServerMediaSession::continueAfterDESCRIBE(), ProxyRTSPClient::continueAfterOPTIONS(), 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(), 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(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), MediaSubsession::env(), SubsessionIOState::envir(), RTSPServer::RTSPClientSession::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::handleGET_PARAMETERResponse(), RTSPServerSupportingHTTPStreaming::RTSPClientSessionSupportingHTTPStreaming::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(), 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(), 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]

Reimplemented in MediaSink.

Definition at line 66 of file Media.cpp.

References False.

Referenced by MediaSink::lookupByName().

00066                              {
00067   return False; // default implementation
00068 }

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(), RTCPInstance::reschedule(), RTCPInstance::schedule(), MultiFramedRTPSink::sendPacketIfNecessary(), and MediaSink::stopPlaying().

00078                         {
00079         return fNextTask;
00080   }


Friends And Related Function Documentation

friend class MediaLookupTable [friend, inherited]

Definition at line 74 of file Media.hh.


Field Documentation

Boolean MPEG2IFrameIndexFromTransportStream::fIsH264 [private]

Definition at line 76 of file MPEG2IndexFromTransportStream.hh.

Referenced by analyzePMT(), and parseFrame().

unsigned long MPEG2IFrameIndexFromTransportStream::fInputTransportPacketCounter [private]

Definition at line 77 of file MPEG2IndexFromTransportStream.hh.

Referenced by afterGettingFrame1().

unsigned MPEG2IFrameIndexFromTransportStream::fClosureNumber [private]

Definition at line 78 of file MPEG2IndexFromTransportStream.hh.

Referenced by handleInputClosure1().

u_int8_t MPEG2IFrameIndexFromTransportStream::fLastContinuityCounter [private]

Definition at line 79 of file MPEG2IndexFromTransportStream.hh.

Referenced by afterGettingFrame1().

float MPEG2IFrameIndexFromTransportStream::fFirstPCR [private]

Definition at line 80 of file MPEG2IndexFromTransportStream.hh.

Referenced by afterGettingFrame1().

float MPEG2IFrameIndexFromTransportStream::fLastPCR [private]

Definition at line 80 of file MPEG2IndexFromTransportStream.hh.

Referenced by afterGettingFrame1().

Boolean MPEG2IFrameIndexFromTransportStream::fHaveSeenFirstPCR [private]

Definition at line 81 of file MPEG2IndexFromTransportStream.hh.

Referenced by afterGettingFrame1().

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().

IndexRecord* MPEG2IFrameIndexFromTransportStream::fHeadIndexRecord [private]

Definition at line 90 of file MPEG2IndexFromTransportStream.hh.

Referenced by addToTail(), deliverIndexRecord(), parseFrame(), and ~MPEG2IFrameIndexFromTransportStream().

IndexRecord* MPEG2IFrameIndexFromTransportStream::fTailIndexRecord [private]

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(), EndianSwap16::doGetNextFrame(), HostFromNetworkOrder16::doGetNextFrame(), NetworkFromHostOrder16::doGetNextFrame(), PCMFromuLawAudioSource::doGetNextFrame(), uLawFromPCMAudioSource::doGetNextFrame(), T140IdleFilter::doGetNextFrame(), QCELPDeinterleaver::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 EndianSwap16::afterGettingFrame1(), HostFromNetworkOrder16::afterGettingFrame1(), NetworkFromHostOrder16::afterGettingFrame1(), PCMFromuLawAudioSource::afterGettingFrame1(), uLawFromPCMAudioSource::afterGettingFrame1(), MPEG4VideoStreamDiscreteFramer::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG1or2VideoStreamDiscreteFramer::afterGettingFrame1(), MP3ADUTranscoder::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), DVVideoStreamFramer::afterGettingFrame1(), MPEG2TransportStreamTrickModeFilter::attemptDeliveryToClient(), StreamReplica::copyReceivedFrame(), StreamReplicator::deactivateStreamReplica(), MPEG2TransportStreamMultiplexor::deliverDataToClient(), DeviceSource::deliverFrame(), T140IdleFilter::deliverFromBuffer(), deliverIndexRecord(), StreamReplicator::deliverReceivedFrame(), EndianSwap16::doGetNextFrame(), HostFromNetworkOrder16::doGetNextFrame(), NetworkFromHostOrder16::doGetNextFrame(), QCELPDeinterleaver::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(), EndianSwap16::doGetNextFrame(), HostFromNetworkOrder16::doGetNextFrame(), NetworkFromHostOrder16::doGetNextFrame(), PCMFromuLawAudioSource::doGetNextFrame(), uLawFromPCMAudioSource::doGetNextFrame(), QCELPDeinterleaver::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(), ByteStreamMultiFileSource::afterGettingFrame(), 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(), ByteStreamMultiFileSource::afterGettingFrame(), 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(), ByteStreamMultiFileSource::afterGettingFrame(), 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(), ByteStreamMultiFileSource::afterGettingFrame(), 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().


The documentation for this class was generated from the following files:
Generated on Thu May 17 07:15:47 2012 for live by  doxygen 1.5.2