MPEG4GenericBufferedPacket Class Reference

Inheritance diagram for MPEG4GenericBufferedPacket:

Inheritance graph
[legend]
Collaboration diagram for MPEG4GenericBufferedPacket:

Collaboration graph
[legend]

Public Member Functions

 MPEG4GenericBufferedPacket (MPEG4GenericRTPSource *ourSource)
virtual ~MPEG4GenericBufferedPacket ()
Boolean hasUsableData () const
unsigned useCount () const
Boolean fillInData (RTPInterface &rtpInterface, Boolean &packetReadWasIncomplete)
void assignMiscParams (unsigned short rtpSeqNo, unsigned rtpTimestamp, struct timeval presentationTime, Boolean hasBeenSyncedUsingRTCP, Boolean rtpMarkerBit, struct timeval timeReceived)
void skip (unsigned numBytes)
void removePadding (unsigned numBytes)
void appendData (unsigned char *newData, unsigned numBytes)
void use (unsigned char *to, unsigned toSize, unsigned &bytesUsed, unsigned &bytesTruncated, unsigned short &rtpSeqNo, unsigned &rtpTimestamp, struct timeval &presentationTime, Boolean &hasBeenSyncedUsingRTCP, Boolean &rtpMarkerBit)
BufferedPacket *& nextPacket ()
unsigned short rtpSeqNo () const
timeval const & timeReceived () const
unsigned char * data () const
unsigned dataSize () const
Boolean rtpMarkerBit () const
BooleanisFirstPacket ()
unsigned bytesAvailable () const

Protected Member Functions

virtual void reset ()
virtual void getNextEnclosedFrameParameters (unsigned char *&framePtr, unsigned dataSize, unsigned &frameSize, unsigned &frameDurationInMicroseconds)

Protected Attributes

unsigned fPacketSize
unsigned char * fBuf
unsigned fHead
unsigned fTail

Private Member Functions

virtual unsigned nextEnclosedFrameSize (unsigned char *&framePtr, unsigned dataSize)

Private Attributes

MPEG4GenericRTPSourcefOurSource

Detailed Description

Definition at line 27 of file MPEG4GenericRTPSource.cpp.


Constructor & Destructor Documentation

MPEG4GenericBufferedPacket::MPEG4GenericBufferedPacket ( MPEG4GenericRTPSource ourSource  ) 

Definition at line 171 of file MPEG4GenericRTPSource.cpp.

Referenced by MPEG4GenericBufferedPacketFactory::createNewPacket().

00172   : fOurSource(ourSource) {
00173 }

MPEG4GenericBufferedPacket::~MPEG4GenericBufferedPacket (  )  [virtual]

Definition at line 175 of file MPEG4GenericRTPSource.cpp.

00175                                                         {
00176 }


Member Function Documentation

unsigned MPEG4GenericBufferedPacket::nextEnclosedFrameSize ( unsigned char *&  framePtr,
unsigned  dataSize 
) [private, virtual]

Reimplemented from BufferedPacket.

Definition at line 179 of file MPEG4GenericRTPSource.cpp.

References Medium::envir(), MPEG4GenericRTPSource::fAUHeaders, MPEG4GenericRTPSource::fNextAUHeader, MPEG4GenericRTPSource::fNumAUHeaders, fOurSource, NULL, and AUHeader::size.

00179                                                                        {
00180   // WE CURRENTLY DON'T IMPLEMENT INTERLEAVING.  FIX THIS! #####
00181   AUHeader* auHeader = fOurSource->fAUHeaders;
00182   if (auHeader == NULL) return dataSize;
00183   unsigned numAUHeaders = fOurSource->fNumAUHeaders;
00184 
00185   if (fOurSource->fNextAUHeader >= numAUHeaders) {
00186     fOurSource->envir() << "MPEG4GenericBufferedPacket::nextEnclosedFrameSize("
00187                         << dataSize << "): data error ("
00188                         << auHeader << "," << fOurSource->fNextAUHeader
00189                         << "," << numAUHeaders << ")!\n";
00190     return dataSize;
00191   }
00192 
00193   auHeader = &auHeader[fOurSource->fNextAUHeader++];
00194   return auHeader->size <= dataSize ? auHeader->size : dataSize;
00195 }

Boolean BufferedPacket::hasUsableData (  )  const [inline, inherited]

Definition at line 91 of file MultiFramedRTPSource.hh.

References BufferedPacket::fHead, and BufferedPacket::fTail.

Referenced by MultiFramedRTPSource::doGetNextFrame1().

00091 { return fTail > fHead; }

unsigned BufferedPacket::useCount (  )  const [inline, inherited]

Definition at line 92 of file MultiFramedRTPSource.hh.

References BufferedPacket::fUseCount.

Referenced by MultiFramedRTPSource::doGetNextFrame1().

00092 { return fUseCount; }

Boolean BufferedPacket::fillInData ( RTPInterface rtpInterface,
Boolean packetReadWasIncomplete 
) [inherited]

Definition at line 375 of file MultiFramedRTPSource.cpp.

References BufferedPacket::bytesAvailable(), False, BufferedPacket::fBuf, BufferedPacket::fTail, RTPInterface::handleRead(), BufferedPacket::reset(), and True.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00375                                                                                                {
00376   if (!packetReadWasIncomplete) reset();
00377 
00378   unsigned numBytesRead;
00379   struct sockaddr_in fromAddress;
00380   unsigned const maxBytesToRead = bytesAvailable();
00381   if (maxBytesToRead == 0) return False; // exceeded buffer size when reading over TCP
00382   if (!rtpInterface.handleRead(&fBuf[fTail], maxBytesToRead, numBytesRead, fromAddress, packetReadWasIncomplete)) {
00383     return False;
00384   }
00385   fTail += numBytesRead;
00386   return True;
00387 }

void BufferedPacket::assignMiscParams ( unsigned short  rtpSeqNo,
unsigned  rtpTimestamp,
struct timeval  presentationTime,
Boolean  hasBeenSyncedUsingRTCP,
Boolean  rtpMarkerBit,
struct timeval  timeReceived 
) [inherited]

Definition at line 390 of file MultiFramedRTPSource.cpp.

References BufferedPacket::fHasBeenSyncedUsingRTCP, BufferedPacket::fPresentationTime, BufferedPacket::fRTPMarkerBit, BufferedPacket::fRTPSeqNo, BufferedPacket::fRTPTimestamp, and BufferedPacket::fTimeReceived.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00393                                                 {
00394   fRTPSeqNo = rtpSeqNo;
00395   fRTPTimestamp = rtpTimestamp;
00396   fPresentationTime = presentationTime;
00397   fHasBeenSyncedUsingRTCP = hasBeenSyncedUsingRTCP;
00398   fRTPMarkerBit = rtpMarkerBit;
00399   fTimeReceived = timeReceived;
00400 }

void BufferedPacket::skip ( unsigned  numBytes  )  [inherited]

Definition at line 402 of file MultiFramedRTPSource.cpp.

References BufferedPacket::fHead, and BufferedPacket::fTail.

Referenced by MultiFramedRTPSource::doGetNextFrame1().

00402                                            {
00403   fHead += numBytes;
00404   if (fHead > fTail) fHead = fTail;
00405 }

void BufferedPacket::removePadding ( unsigned  numBytes  )  [inherited]

Definition at line 407 of file MultiFramedRTPSource.cpp.

References BufferedPacket::fHead, and BufferedPacket::fTail.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00407                                                     {
00408   if (numBytes > fTail-fHead) numBytes = fTail-fHead;
00409   fTail -= numBytes;
00410 }

void BufferedPacket::appendData ( unsigned char *  newData,
unsigned  numBytes 
) [inherited]

Definition at line 412 of file MultiFramedRTPSource.cpp.

References BufferedPacket::fBuf, BufferedPacket::fPacketSize, and BufferedPacket::fTail.

00412                                                                          {
00413   if (numBytes > fPacketSize-fTail) numBytes = fPacketSize - fTail;
00414   memmove(&fBuf[fTail], newData, numBytes);
00415   fTail += numBytes;
00416 }

void BufferedPacket::use ( unsigned char *  to,
unsigned  toSize,
unsigned &  bytesUsed,
unsigned &  bytesTruncated,
unsigned short &  rtpSeqNo,
unsigned &  rtpTimestamp,
struct timeval &  presentationTime,
Boolean hasBeenSyncedUsingRTCP,
Boolean rtpMarkerBit 
) [inherited]

Definition at line 418 of file MultiFramedRTPSource.cpp.

References BufferedPacket::fBuf, BufferedPacket::fHasBeenSyncedUsingRTCP, BufferedPacket::fHead, BufferedPacket::fPresentationTime, frameSize, BufferedPacket::fRTPMarkerBit, BufferedPacket::fRTPSeqNo, BufferedPacket::fRTPTimestamp, BufferedPacket::fTail, BufferedPacket::fUseCount, and BufferedPacket::getNextEnclosedFrameParameters().

Referenced by MultiFramedRTPSource::doGetNextFrame1().

00423                                                 {
00424   unsigned char* origFramePtr = &fBuf[fHead];
00425   unsigned char* newFramePtr = origFramePtr; // may change in the call below
00426   unsigned frameSize, frameDurationInMicroseconds;
00427   getNextEnclosedFrameParameters(newFramePtr, fTail - fHead,
00428                                  frameSize, frameDurationInMicroseconds);
00429   if (frameSize > toSize) {
00430     bytesTruncated += frameSize - toSize;
00431     bytesUsed = toSize;
00432   } else {
00433     bytesTruncated = 0;
00434     bytesUsed = frameSize;
00435   }
00436 
00437   memmove(to, newFramePtr, bytesUsed);
00438   fHead += (newFramePtr - origFramePtr) + frameSize;
00439   ++fUseCount;
00440 
00441   rtpSeqNo = fRTPSeqNo;
00442   rtpTimestamp = fRTPTimestamp;
00443   presentationTime = fPresentationTime;
00444   hasBeenSyncedUsingRTCP = fHasBeenSyncedUsingRTCP;
00445   rtpMarkerBit = fRTPMarkerBit;
00446 
00447   // Update "fPresentationTime" for the next enclosed frame (if any):
00448   fPresentationTime.tv_usec += frameDurationInMicroseconds;
00449   if (fPresentationTime.tv_usec >= 1000000) {
00450     fPresentationTime.tv_sec += fPresentationTime.tv_usec/1000000;
00451     fPresentationTime.tv_usec = fPresentationTime.tv_usec%1000000;
00452   }
00453 }

BufferedPacket*& BufferedPacket::nextPacket (  )  [inline, inherited]

Definition at line 108 of file MultiFramedRTPSource.hh.

References BufferedPacket::fNextPacket.

Referenced by ReorderingPacketBuffer::releaseUsedPacket(), and ReorderingPacketBuffer::storePacket().

00108 { return fNextPacket; }

unsigned short BufferedPacket::rtpSeqNo (  )  const [inline, inherited]

Definition at line 110 of file MultiFramedRTPSource.hh.

References BufferedPacket::fRTPSeqNo.

Referenced by ReorderingPacketBuffer::getNextCompletedPacket(), and ReorderingPacketBuffer::storePacket().

00110 { return fRTPSeqNo; }

struct timeval const& BufferedPacket::timeReceived (  )  const [inline, read, inherited]

Definition at line 111 of file MultiFramedRTPSource.hh.

References BufferedPacket::fTimeReceived.

Referenced by ReorderingPacketBuffer::getNextCompletedPacket().

00111 { return fTimeReceived; }

unsigned char* BufferedPacket::data (  )  const [inline, inherited]

Definition at line 113 of file MultiFramedRTPSource.hh.

References BufferedPacket::fBuf, and BufferedPacket::fHead.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00113 { return &fBuf[fHead]; }

unsigned BufferedPacket::dataSize (  )  const [inline, inherited]

Definition at line 114 of file MultiFramedRTPSource.hh.

References BufferedPacket::fHead, and BufferedPacket::fTail.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00114 { return fTail-fHead; }

Boolean BufferedPacket::rtpMarkerBit (  )  const [inline, inherited]

Definition at line 115 of file MultiFramedRTPSource.hh.

References BufferedPacket::fRTPMarkerBit.

00115 { return fRTPMarkerBit; }

Boolean& BufferedPacket::isFirstPacket (  )  [inline, inherited]

Definition at line 116 of file MultiFramedRTPSource.hh.

References BufferedPacket::fIsFirstPacket.

Referenced by ReorderingPacketBuffer::getNextCompletedPacket(), and ReorderingPacketBuffer::storePacket().

00116 { return fIsFirstPacket; }

unsigned BufferedPacket::bytesAvailable (  )  const [inline, inherited]

Definition at line 117 of file MultiFramedRTPSource.hh.

References BufferedPacket::fPacketSize, and BufferedPacket::fTail.

Referenced by BufferedPacket::fillInData(), and MultiFramedRTPSource::networkReadHandler1().

00117 { return fPacketSize - fTail; }

void BufferedPacket::reset (  )  [protected, virtual, inherited]

Reimplemented in JPEGBufferedPacket.

Definition at line 345 of file MultiFramedRTPSource.cpp.

References False, BufferedPacket::fHead, BufferedPacket::fIsFirstPacket, BufferedPacket::fTail, and BufferedPacket::fUseCount.

Referenced by BufferedPacket::fillInData(), and JPEGBufferedPacket::reset().

00345                            {
00346   fHead = fTail = 0;
00347   fUseCount = 0;
00348   fIsFirstPacket = False; // by default
00349 }

void BufferedPacket::getNextEnclosedFrameParameters ( unsigned char *&  framePtr,
unsigned  dataSize,
unsigned &  frameSize,
unsigned &  frameDurationInMicroseconds 
) [protected, virtual, inherited]

Definition at line 361 of file MultiFramedRTPSource.cpp.

References BufferedPacket::nextEnclosedFrameSize().

Referenced by BufferedPacket::use().

00363                                                                         {
00364   // By default, use the entire buffered data, even though it may consist
00365   // of more than one frame, on the assumption that the client doesn't
00366   // care.  (This is more efficient than delivering a frame at a time)
00367 
00368   // For backwards-compatibility with existing uses of (the now deprecated)
00369   // "nextEnclosedFrameSize()", call that function to implement this one:
00370   frameSize = nextEnclosedFrameSize(framePtr, dataSize);
00371 
00372   frameDurationInMicroseconds = 0; // by default.  Subclasses should correct this.
00373 }


Field Documentation

MPEG4GenericRTPSource* MPEG4GenericBufferedPacket::fOurSource [private]

Definition at line 36 of file MPEG4GenericRTPSource.cpp.

Referenced by nextEnclosedFrameSize().

unsigned BufferedPacket::fPacketSize [protected, inherited]

Definition at line 129 of file MultiFramedRTPSource.hh.

Referenced by BufferedPacket::appendData(), BufferedPacket::bytesAvailable(), and JPEGBufferedPacket::reset().

unsigned char* BufferedPacket::fBuf [protected, inherited]

Definition at line 130 of file MultiFramedRTPSource.hh.

Referenced by BufferedPacket::appendData(), BufferedPacket::data(), BufferedPacket::fillInData(), BufferedPacket::use(), and BufferedPacket::~BufferedPacket().

unsigned BufferedPacket::fHead [protected, inherited]

Definition at line 131 of file MultiFramedRTPSource.hh.

Referenced by BufferedPacket::data(), BufferedPacket::dataSize(), BufferedPacket::hasUsableData(), BufferedPacket::removePadding(), BufferedPacket::reset(), JPEGBufferedPacket::reset(), BufferedPacket::skip(), and BufferedPacket::use().

unsigned BufferedPacket::fTail [protected, inherited]

Definition at line 132 of file MultiFramedRTPSource.hh.

Referenced by BufferedPacket::appendData(), BufferedPacket::bytesAvailable(), BufferedPacket::dataSize(), BufferedPacket::fillInData(), BufferedPacket::hasUsableData(), BufferedPacket::removePadding(), BufferedPacket::reset(), JPEGBufferedPacket::reset(), BufferedPacket::skip(), and BufferedPacket::use().


The documentation for this class was generated from the following file:
Generated on Tue Jun 18 13:21:00 2013 for live by  doxygen 1.5.2