BufferedPacket Class Reference

#include <MultiFramedRTPSource.hh>

Inheritance diagram for BufferedPacket:

Inheritance graph
[legend]
Collaboration diagram for BufferedPacket:

Collaboration graph
[legend]

Public Member Functions

 BufferedPacket ()
virtual ~BufferedPacket ()
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 ()

Protected Member Functions

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

Protected Attributes

unsigned fPacketSize
unsigned char * fBuf
unsigned fHead
unsigned fTail

Private Attributes

BufferedPacketfNextPacket
unsigned fUseCount
unsigned short fRTPSeqNo
unsigned fRTPTimestamp
timeval fPresentationTime
Boolean fHasBeenSyncedUsingRTCP
Boolean fRTPMarkerBit
Boolean fIsFirstPacket
timeval fTimeReceived

Detailed Description

Definition at line 86 of file MultiFramedRTPSource.hh.


Constructor & Destructor Documentation

BufferedPacket::BufferedPacket (  ) 

Definition at line 327 of file MultiFramedRTPSource.cpp.

00328   : fPacketSize(MAX_PACKET_SIZE),
00329     fBuf(new unsigned char[MAX_PACKET_SIZE]),
00330     fNextPacket(NULL) {
00331 }

BufferedPacket::~BufferedPacket (  )  [virtual]

Definition at line 333 of file MultiFramedRTPSource.cpp.

References fBuf, and fNextPacket.

00333                                 {
00334   delete fNextPacket;
00335   delete[] fBuf;
00336 }


Member Function Documentation

Boolean BufferedPacket::hasUsableData (  )  const [inline]

Definition at line 91 of file MultiFramedRTPSource.hh.

References fHead, and fTail.

Referenced by MultiFramedRTPSource::doGetNextFrame1().

00091 { return fTail > fHead; }

unsigned BufferedPacket::useCount (  )  const [inline]

Definition at line 92 of file MultiFramedRTPSource.hh.

References fUseCount.

Referenced by MultiFramedRTPSource::doGetNextFrame1().

00092 { return fUseCount; }

Boolean BufferedPacket::fillInData ( RTPInterface rtpInterface,
Boolean packetReadWasIncomplete 
)

Definition at line 368 of file MultiFramedRTPSource.cpp.

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

Referenced by MultiFramedRTPSource::networkReadHandler1().

00368                                                                                                {
00369   if (!packetReadWasIncomplete) reset();
00370 
00371   unsigned numBytesRead;
00372   struct sockaddr_in fromAddress;
00373   if (!rtpInterface.handleRead(&fBuf[fTail], fPacketSize-fTail, numBytesRead, fromAddress, packetReadWasIncomplete)) {
00374     return False;
00375   }
00376   fTail += numBytesRead;
00377   return True;
00378 }

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

Definition at line 381 of file MultiFramedRTPSource.cpp.

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

Referenced by MultiFramedRTPSource::networkReadHandler1().

00384                                                 {
00385   fRTPSeqNo = rtpSeqNo;
00386   fRTPTimestamp = rtpTimestamp;
00387   fPresentationTime = presentationTime;
00388   fHasBeenSyncedUsingRTCP = hasBeenSyncedUsingRTCP;
00389   fRTPMarkerBit = rtpMarkerBit;
00390   fTimeReceived = timeReceived;
00391 }

void BufferedPacket::skip ( unsigned  numBytes  ) 

Definition at line 393 of file MultiFramedRTPSource.cpp.

References fHead, and fTail.

Referenced by MultiFramedRTPSource::doGetNextFrame1().

00393                                            {
00394   fHead += numBytes;
00395   if (fHead > fTail) fHead = fTail;
00396 }

void BufferedPacket::removePadding ( unsigned  numBytes  ) 

Definition at line 398 of file MultiFramedRTPSource.cpp.

References fHead, and fTail.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00398                                                     {
00399   if (numBytes > fTail-fHead) numBytes = fTail-fHead;
00400   fTail -= numBytes;
00401 }

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

Definition at line 403 of file MultiFramedRTPSource.cpp.

References fBuf, fPacketSize, and fTail.

00403                                                                          {
00404   if (numBytes > fPacketSize-fTail) numBytes = fPacketSize - fTail;
00405   memmove(&fBuf[fTail], newData, numBytes);
00406   fTail += numBytes;
00407 }

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

Definition at line 409 of file MultiFramedRTPSource.cpp.

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

Referenced by MultiFramedRTPSource::doGetNextFrame1().

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

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

Definition at line 108 of file MultiFramedRTPSource.hh.

References fNextPacket.

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

00108 { return fNextPacket; }

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

Definition at line 110 of file MultiFramedRTPSource.hh.

References fRTPSeqNo.

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

00110 { return fRTPSeqNo; }

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

Definition at line 111 of file MultiFramedRTPSource.hh.

References fTimeReceived.

Referenced by ReorderingPacketBuffer::getNextCompletedPacket().

00111 { return fTimeReceived; }

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

Definition at line 113 of file MultiFramedRTPSource.hh.

References fBuf, and fHead.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00113 { return &fBuf[fHead]; }

unsigned BufferedPacket::dataSize (  )  const [inline]

Definition at line 114 of file MultiFramedRTPSource.hh.

References fHead, and fTail.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00114 { return fTail-fHead; }

Boolean BufferedPacket::rtpMarkerBit (  )  const [inline]

Definition at line 115 of file MultiFramedRTPSource.hh.

References fRTPMarkerBit.

00115 { return fRTPMarkerBit; }

Boolean& BufferedPacket::isFirstPacket (  )  [inline]

Definition at line 116 of file MultiFramedRTPSource.hh.

References fIsFirstPacket.

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

00116 { return fIsFirstPacket; }

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

Reimplemented in JPEGBufferedPacket.

Definition at line 338 of file MultiFramedRTPSource.cpp.

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

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

00338                            {
00339   fHead = fTail = 0;
00340   fUseCount = 0;
00341   fIsFirstPacket = False; // by default
00342 }

unsigned BufferedPacket::nextEnclosedFrameSize ( unsigned char *&  framePtr,
unsigned  dataSize 
) [protected, virtual]

Reimplemented in AMRBufferedPacket, H264BufferedPacket, JPEGBufferedPacket, ADUBufferedPacket, MPEG4GenericBufferedPacket, LATMBufferedPacket, QCELPBufferedPacket, QTGenericBufferedPacket, and VorbisBufferedPacket.

Definition at line 346 of file MultiFramedRTPSource.cpp.

Referenced by getNextEnclosedFrameParameters().

00346                                                                        {
00347   // By default, use the entire buffered data, even though it may consist
00348   // of more than one frame, on the assumption that the client doesn't
00349   // care.  (This is more efficient than delivering a frame at a time)
00350   return dataSize;
00351 }

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

Definition at line 354 of file MultiFramedRTPSource.cpp.

References nextEnclosedFrameSize().

Referenced by use().

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


Field Documentation

unsigned BufferedPacket::fPacketSize [protected]

Definition at line 128 of file MultiFramedRTPSource.hh.

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

unsigned char* BufferedPacket::fBuf [protected]

Definition at line 129 of file MultiFramedRTPSource.hh.

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

unsigned BufferedPacket::fHead [protected]

Definition at line 130 of file MultiFramedRTPSource.hh.

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

unsigned BufferedPacket::fTail [protected]

Definition at line 131 of file MultiFramedRTPSource.hh.

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

BufferedPacket* BufferedPacket::fNextPacket [private]

Definition at line 134 of file MultiFramedRTPSource.hh.

Referenced by nextPacket(), and ~BufferedPacket().

unsigned BufferedPacket::fUseCount [private]

Definition at line 136 of file MultiFramedRTPSource.hh.

Referenced by reset(), use(), and useCount().

unsigned short BufferedPacket::fRTPSeqNo [private]

Definition at line 137 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), rtpSeqNo(), and use().

unsigned BufferedPacket::fRTPTimestamp [private]

Definition at line 138 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), and use().

struct timeval BufferedPacket::fPresentationTime [read, private]

Definition at line 139 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), and use().

Boolean BufferedPacket::fHasBeenSyncedUsingRTCP [private]

Definition at line 140 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), and use().

Boolean BufferedPacket::fRTPMarkerBit [private]

Definition at line 141 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), rtpMarkerBit(), and use().

Boolean BufferedPacket::fIsFirstPacket [private]

Definition at line 142 of file MultiFramedRTPSource.hh.

Referenced by isFirstPacket(), and reset().

struct timeval BufferedPacket::fTimeReceived [read, private]

Definition at line 143 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), and timeReceived().


The documentation for this class was generated from the following files:
Generated on Thu Feb 2 23:54:44 2012 for live by  doxygen 1.5.2