MPEGVideoStreamParser Class Reference

#include <MPEGVideoStreamParser.hh>

Inheritance diagram for MPEGVideoStreamParser:

Inheritance graph
[legend]
Collaboration diagram for MPEGVideoStreamParser:

Collaboration graph
[legend]

Public Member Functions

 MPEGVideoStreamParser (MPEGVideoStreamFramer *usingSource, FramedSource *inputSource)
virtual ~MPEGVideoStreamParser ()
void registerReadInterest (unsigned char *to, unsigned maxSize)
virtual unsigned parse ()=0
unsigned numTruncatedBytes () const
virtual void flushInput ()

Protected Types

typedef void( clientContinueFunc )(void *clientData, unsigned char *ptr, unsigned size, struct timeval presentationTime)

Protected Member Functions

void setParseState ()
void saveByte (u_int8_t byte)
void save4Bytes (u_int32_t word)
void saveToNextCode (u_int32_t &curWord)
void skipToNextCode (u_int32_t &curWord)
unsigned curFrameSize ()
void saveParserState ()
u_int32_t get4Bytes ()
u_int32_t test4Bytes ()
u_int16_t get2Bytes ()
u_int8_t get1Byte ()
void getBytes (u_int8_t *to, unsigned numBytes)
void skipBytes (unsigned numBytes)
void skipBits (unsigned numBits)
unsigned getBits (unsigned numBits)
unsigned curOffset () const
unsigned & totNumValidBytes ()

Protected Attributes

MPEGVideoStreamFramerfUsingSource
unsigned char * fStartOfFrame
unsigned char * fTo
unsigned char * fLimit
unsigned fNumTruncatedBytes
unsigned char * fSavedTo
unsigned fSavedNumTruncatedBytes

Private Member Functions

virtual void restoreSavedParserState ()

Detailed Description

Definition at line 33 of file MPEGVideoStreamParser.hh.


Member Typedef Documentation

typedef void( StreamParser::clientContinueFunc)(void *clientData, unsigned char *ptr, unsigned size, struct timeval presentationTime) [protected, inherited]

Definition at line 33 of file StreamParser.hh.


Constructor & Destructor Documentation

MPEGVideoStreamParser::MPEGVideoStreamParser ( MPEGVideoStreamFramer usingSource,
FramedSource inputSource 
)

Definition at line 24 of file MPEGVideoStreamParser.cpp.

00026   : StreamParser(inputSource, FramedSource::handleClosure, usingSource,
00027                  &MPEGVideoStreamFramer::continueReadProcessing, usingSource),
00028   fUsingSource(usingSource) {
00029 }

MPEGVideoStreamParser::~MPEGVideoStreamParser (  )  [virtual]

Definition at line 31 of file MPEGVideoStreamParser.cpp.

00031                                               {
00032 }


Member Function Documentation

void MPEGVideoStreamParser::registerReadInterest ( unsigned char *  to,
unsigned  maxSize 
)

Definition at line 46 of file MPEGVideoStreamParser.cpp.

References fLimit, fNumTruncatedBytes, fSavedNumTruncatedBytes, fSavedTo, fStartOfFrame, and fTo.

Referenced by MPEGVideoStreamFramer::doGetNextFrame().

00047                                                                    {
00048   fStartOfFrame = fTo = fSavedTo = to;
00049   fLimit = to + maxSize;
00050   fNumTruncatedBytes = fSavedNumTruncatedBytes = 0;
00051 }

virtual unsigned MPEGVideoStreamParser::parse (  )  [pure virtual]

Implemented in MPEG1or2VideoStreamParser, and MPEG4VideoStreamParser.

Referenced by MPEGVideoStreamFramer::continueReadProcessing().

unsigned MPEGVideoStreamParser::numTruncatedBytes (  )  const [inline]

Definition at line 45 of file MPEGVideoStreamParser.hh.

References fNumTruncatedBytes.

Referenced by MPEGVideoStreamFramer::continueReadProcessing().

00045 { return fNumTruncatedBytes; }

void MPEGVideoStreamParser::setParseState (  )  [protected]

Definition at line 40 of file MPEGVideoStreamParser.cpp.

References fNumTruncatedBytes, fSavedNumTruncatedBytes, fSavedTo, fTo, and StreamParser::saveParserState().

Referenced by MPEG4VideoStreamParser::flushInput(), MPEG1or2VideoStreamParser::flushInput(), MPEG1or2VideoStreamParser::parseGOPHeader(), MPEG4VideoStreamParser::parseGroupOfVideoObjectPlane(), MPEG1or2VideoStreamParser::parsePictureHeader(), MPEG1or2VideoStreamParser::parseSlice(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG1or2VideoStreamParser::parseVideoSequenceHeader(), MPEG4VideoStreamParser::parseVisualObject(), MPEG4VideoStreamParser::parseVisualObjectSequence(), MPEG4VideoStreamParser::parseVisualObjectSequenceEndCode(), MPEG4VideoStreamParser::setParseState(), and MPEG1or2VideoStreamParser::setParseState().

00040                                           {
00041   fSavedTo = fTo;
00042   fSavedNumTruncatedBytes = fNumTruncatedBytes;
00043   saveParserState();
00044 }

void MPEGVideoStreamParser::saveByte ( u_int8_t  byte  )  [inline, protected]

Definition at line 51 of file MPEGVideoStreamParser.hh.

References fLimit, fNumTruncatedBytes, and fTo.

Referenced by MPEG4VideoStreamParser::parseGroupOfVideoObjectPlane(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG4VideoStreamParser::parseVisualObject(), MPEG4VideoStreamParser::parseVisualObjectSequence(), and saveToNextCode().

00051                                {
00052     if (fTo >= fLimit) { // there's no space left
00053       ++fNumTruncatedBytes;
00054       return;
00055     }
00056 
00057     *fTo++ = byte;
00058   }

void MPEGVideoStreamParser::save4Bytes ( u_int32_t  word  )  [inline, protected]

Definition at line 60 of file MPEGVideoStreamParser.hh.

References fLimit, fNumTruncatedBytes, and fTo.

Referenced by MPEG1or2VideoStreamParser::parseGOPHeader(), MPEG4VideoStreamParser::parseGroupOfVideoObjectPlane(), MPEG1or2VideoStreamParser::parsePictureHeader(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG1or2VideoStreamParser::parseVideoSequenceHeader(), MPEG4VideoStreamParser::parseVisualObject(), MPEG4VideoStreamParser::parseVisualObjectSequence(), MPEG4VideoStreamParser::parseVisualObjectSequenceEndCode(), and saveToNextCode().

00060                                   {
00061     if (fTo+4 > fLimit) { // there's no space left
00062       fNumTruncatedBytes += 4;
00063       return;
00064     }
00065 
00066     *fTo++ = word>>24; *fTo++ = word>>16; *fTo++ = word>>8; *fTo++ = word;
00067   }

void MPEGVideoStreamParser::saveToNextCode ( u_int32_t &  curWord  )  [inline, protected]

Definition at line 70 of file MPEGVideoStreamParser.hh.

References StreamParser::get1Byte(), StreamParser::get4Bytes(), save4Bytes(), and saveByte().

Referenced by MPEG1or2VideoStreamParser::parseGOPHeader(), MPEG4VideoStreamParser::parseGroupOfVideoObjectPlane(), MPEG1or2VideoStreamParser::parsePictureHeader(), MPEG1or2VideoStreamParser::parseSlice(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG1or2VideoStreamParser::parseVideoSequenceHeader(), MPEG4VideoStreamParser::parseVisualObject(), and MPEG4VideoStreamParser::parseVisualObjectSequence().

00070                                           {
00071     saveByte(curWord>>24);
00072     curWord = (curWord<<8)|get1Byte();
00073     while ((curWord&0xFFFFFF00) != 0x00000100) {
00074       if ((unsigned)(curWord&0xFF) > 1) {
00075         // a sync word definitely doesn't begin anywhere in "curWord"
00076         save4Bytes(curWord);
00077         curWord = get4Bytes();
00078       } else {
00079         // a sync word might begin in "curWord", although not at its start
00080         saveByte(curWord>>24);
00081         unsigned char newByte = get1Byte();
00082         curWord = (curWord<<8)|newByte;
00083       }
00084     }
00085   }

void MPEGVideoStreamParser::skipToNextCode ( u_int32_t &  curWord  )  [inline, protected]

Definition at line 88 of file MPEGVideoStreamParser.hh.

References StreamParser::get1Byte(), and StreamParser::get4Bytes().

Referenced by MPEG1or2VideoStreamParser::parsePictureHeader(), and MPEG1or2VideoStreamParser::parseSlice().

00088                                           {
00089     curWord = (curWord<<8)|get1Byte();
00090     while ((curWord&0xFFFFFF00) != 0x00000100) {
00091       if ((unsigned)(curWord&0xFF) > 1) {
00092         // a sync word definitely doesn't begin anywhere in "curWord"
00093         curWord = get4Bytes();
00094       } else {
00095         // a sync word might begin in "curWord", although not at its start
00096         unsigned char newByte = get1Byte();
00097         curWord = (curWord<<8)|newByte;
00098       }
00099     }
00100   }

unsigned MPEGVideoStreamParser::curFrameSize (  )  [inline, protected]

Definition at line 110 of file MPEGVideoStreamParser.hh.

References fStartOfFrame, and fTo.

Referenced by MPEG4VideoStreamParser::analyzeVOLHeader(), MPEG4VideoStreamParser::getNextFrameBit(), MPEG1or2VideoStreamParser::parseGOPHeader(), MPEG4VideoStreamParser::parseGroupOfVideoObjectPlane(), MPEG1or2VideoStreamParser::parsePictureHeader(), MPEG1or2VideoStreamParser::parseSlice(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG1or2VideoStreamParser::parseVideoSequenceHeader(), MPEG4VideoStreamParser::parseVisualObject(), MPEG4VideoStreamParser::parseVisualObjectSequence(), MPEG4VideoStreamParser::parseVisualObjectSequenceEndCode(), and MPEG1or2VideoStreamParser::saveCurrentVSH().

00110 { return fTo - fStartOfFrame; }

void MPEGVideoStreamParser::restoreSavedParserState (  )  [private, virtual]

Reimplemented from StreamParser.

Definition at line 34 of file MPEGVideoStreamParser.cpp.

References fNumTruncatedBytes, fSavedNumTruncatedBytes, fSavedTo, fTo, and StreamParser::restoreSavedParserState().

void StreamParser::flushInput (  )  [virtual, inherited]

Reimplemented in MPEG1or2VideoStreamParser, and MPEG4VideoStreamParser.

Definition at line 178 of file StreamParser.cpp.

References StreamParser::fCurParserIndex, StreamParser::fRemainingUnparsedBits, StreamParser::fSavedParserIndex, StreamParser::fSavedRemainingUnparsedBits, and StreamParser::fTotNumValidBytes.

Referenced by MPEGVideoStreamFramer::flushInput(), MPEG4VideoStreamParser::flushInput(), MPEG1or2VideoStreamParser::flushInput(), MPEG1or2Demux::flushInput(), MPEG1or2AudioStreamFramer::flushInput(), and AC3AudioStreamFramer::flushInput().

void StreamParser::saveParserState (  )  [protected, inherited]

Definition at line 121 of file StreamParser.cpp.

References StreamParser::fCurParserIndex, StreamParser::fRemainingUnparsedBits, StreamParser::fSavedParserIndex, and StreamParser::fSavedRemainingUnparsedBits.

Referenced by MPEG1or2AudioStreamParser::parse(), AC3AudioStreamParser::parseFrame(), setParseState(), MPEGProgramStreamParser::setParseState(), and H263plusVideoStreamParser::setParseState().

u_int32_t StreamParser::get4Bytes (  )  [inline, protected, inherited]

Definition at line 46 of file StreamParser.hh.

References StreamParser::fCurParserIndex, StreamParser::fRemainingUnparsedBits, and StreamParser::test4Bytes().

Referenced by AC3AudioStreamParser::parseFrame(), MPEG1or2VideoStreamParser::parseGOPHeader(), MPEG4VideoStreamParser::parseGroupOfVideoObjectPlane(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), MPEG1or2VideoStreamParser::parsePictureHeader(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG1or2VideoStreamParser::parseVideoSequenceHeader(), MPEG4VideoStreamParser::parseVisualObject(), MPEG4VideoStreamParser::parseVisualObjectSequence(), saveToNextCode(), and skipToNextCode().

00046                         { // byte-aligned; returned in big-endian order
00047     u_int32_t result = test4Bytes();
00048     fCurParserIndex += 4;
00049     fRemainingUnparsedBits = 0;
00050 
00051     return result;
00052   }

u_int32_t StreamParser::test4Bytes (  )  [inline, protected, inherited]

Definition at line 53 of file StreamParser.hh.

References StreamParser::ensureValidBytes(), and StreamParser::nextToParse().

Referenced by StreamParser::get4Bytes(), StreamParser::getBits(), MPEG1or2AudioStreamParser::parse(), AC3AudioStreamParser::parseFrame(), MPEG1or2VideoStreamParser::parseGOPHeader(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), MPEGProgramStreamParser::parseSystemHeader(), MPEG1or2VideoStreamParser::parseVideoSequenceHeader(), and MPEG4VideoStreamParser::parseVisualObjectSequence().

00053                          { // as above, but doesn't advance ptr
00054     ensureValidBytes(4);
00055 
00056     unsigned char const* ptr = nextToParse();
00057     return (ptr[0]<<24)|(ptr[1]<<16)|(ptr[2]<<8)|ptr[3];
00058   }

u_int16_t StreamParser::get2Bytes (  )  [inline, protected, inherited]

Definition at line 60 of file StreamParser.hh.

References StreamParser::ensureValidBytes(), StreamParser::fCurParserIndex, StreamParser::fRemainingUnparsedBits, and StreamParser::nextToParse().

Referenced by MPEGProgramStreamParser::parsePESPacket(), and MPEGProgramStreamParser::parseSystemHeader().

00060                         {
00061     ensureValidBytes(2);
00062 
00063     unsigned char const* ptr = nextToParse();
00064     u_int16_t result = (ptr[0]<<8)|ptr[1];
00065 
00066     fCurParserIndex += 2;
00067     fRemainingUnparsedBits = 0;
00068 
00069     return result;
00070   }

u_int8_t StreamParser::get1Byte (  )  [inline, protected, inherited]

Definition at line 72 of file StreamParser.hh.

References StreamParser::curBank(), StreamParser::ensureValidBytes(), StreamParser::fCurParserIndex, and StreamParser::fRemainingUnparsedBits.

Referenced by MPEG1or2VideoStreamParser::parseGOPHeader(), H263plusVideoStreamParser::parseH263Frame(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG1or2VideoStreamParser::parseVideoSequenceHeader(), MPEG4VideoStreamParser::parseVisualObject(), MPEG4VideoStreamParser::parseVisualObjectSequence(), saveToNextCode(), and skipToNextCode().

00072                       { // byte-aligned
00073     ensureValidBytes(1);
00074     fRemainingUnparsedBits = 0;
00075     return curBank()[fCurParserIndex++];
00076   }

void StreamParser::getBytes ( u_int8_t *  to,
unsigned  numBytes 
) [inline, protected, inherited]

Definition at line 78 of file StreamParser.hh.

References StreamParser::ensureValidBytes(), StreamParser::fCurParserIndex, StreamParser::fRemainingUnparsedBits, and StreamParser::nextToParse().

Referenced by MPEG1or2AudioStreamParser::parse(), AC3AudioStreamParser::parseFrame(), MPEG4VideoStreamParser::parseGroupOfVideoObjectPlane(), H263plusVideoStreamParser::parseH263Frame(), and MPEGProgramStreamParser::parsePESPacket().

00078                                                  {
00079     ensureValidBytes(numBytes);
00080     memmove(to, nextToParse(), numBytes);
00081     fCurParserIndex += numBytes;
00082     fRemainingUnparsedBits = 0;
00083   }

void StreamParser::skipBytes ( unsigned  numBytes  )  [inline, protected, inherited]

Definition at line 84 of file StreamParser.hh.

References StreamParser::ensureValidBytes(), and StreamParser::fCurParserIndex.

Referenced by MPEG1or2AudioStreamParser::parse(), AC3AudioStreamParser::parseFrame(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), and MPEGProgramStreamParser::parseSystemHeader().

00084                                     {
00085     ensureValidBytes(numBytes);
00086     fCurParserIndex += numBytes;
00087   }

void StreamParser::skipBits ( unsigned  numBits  )  [protected, inherited]

Definition at line 131 of file StreamParser.cpp.

References StreamParser::ensureValidBytes(), StreamParser::fCurParserIndex, and StreamParser::fRemainingUnparsedBits.

Referenced by MPEGProgramStreamParser::parsePackHeader().

00131                                             {
00132   if (numBits <= fRemainingUnparsedBits) {
00133     fRemainingUnparsedBits -= numBits;
00134   } else {
00135     numBits -= fRemainingUnparsedBits;
00136 
00137     unsigned numBytesToExamine = (numBits+7)/8; // round up
00138     ensureValidBytes(numBytesToExamine);
00139     fCurParserIndex += numBytesToExamine;
00140 
00141     fRemainingUnparsedBits = 8*numBytesToExamine - numBits;
00142   }
00143 }

unsigned StreamParser::getBits ( unsigned  numBits  )  [protected, inherited]

Definition at line 145 of file StreamParser.cpp.

References StreamParser::fCurParserIndex, StreamParser::fRemainingUnparsedBits, StreamParser::lastParsed(), and StreamParser::test4Bytes().

Referenced by MPEGProgramStreamParser::parsePackHeader(), and MPEGProgramStreamParser::parsePESPacket().

00145                                                {
00146   if (numBits <= fRemainingUnparsedBits) {
00147     unsigned char lastByte = *lastParsed();
00148     lastByte >>= (fRemainingUnparsedBits - numBits);
00149     fRemainingUnparsedBits -= numBits;
00150 
00151     return (unsigned)lastByte &~ ((~0)<<numBits);
00152   } else {
00153     unsigned char lastByte;
00154     if (fRemainingUnparsedBits > 0) {
00155       lastByte = *lastParsed();
00156     } else {
00157       lastByte = 0;
00158     }
00159 
00160     unsigned remainingBits = numBits - fRemainingUnparsedBits; // > 0
00161 
00162     // For simplicity, read the next 4 bytes, even though we might not
00163     // need all of them here:
00164     unsigned result = test4Bytes();
00165 
00166     result >>= (32 - remainingBits);
00167     result |= (lastByte << remainingBits);
00168     if (numBits < 32) result &=~ ((~0)<<numBits);
00169 
00170     unsigned const numRemainingBytes = (remainingBits+7)/8;
00171     fCurParserIndex += numRemainingBytes;
00172     fRemainingUnparsedBits = 8*numRemainingBytes - remainingBits;
00173 
00174     return result;
00175   }
00176 }

unsigned StreamParser::curOffset (  )  const [inline, protected, inherited]

Definition at line 93 of file StreamParser.hh.

References StreamParser::fCurParserIndex.

Referenced by MPEGProgramStreamParser::parsePESPacket().

00093 { return fCurParserIndex; }

unsigned& StreamParser::totNumValidBytes (  )  [inline, protected, inherited]

Definition at line 95 of file StreamParser.hh.

References StreamParser::fTotNumValidBytes.

Referenced by AC3AudioStreamParser::testStreamCode().

00095 { return fTotNumValidBytes; }


Field Documentation

MPEGVideoStreamFramer* MPEGVideoStreamParser::fUsingSource [protected]

Definition at line 103 of file MPEGVideoStreamParser.hh.

Referenced by MPEG4VideoStreamParser::usingSource(), and MPEG1or2VideoStreamParser::usingSource().

unsigned char* MPEGVideoStreamParser::fStartOfFrame [protected]

Definition at line 106 of file MPEGVideoStreamParser.hh.

Referenced by curFrameSize(), MPEG4VideoStreamParser::getNextFrameBit(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVisualObject(), MPEG4VideoStreamParser::parseVisualObjectSequence(), registerReadInterest(), MPEG1or2VideoStreamParser::saveCurrentVSH(), and MPEG1or2VideoStreamParser::useSavedVSH().

unsigned char* MPEGVideoStreamParser::fTo [protected]

Definition at line 107 of file MPEGVideoStreamParser.hh.

Referenced by curFrameSize(), registerReadInterest(), restoreSavedParserState(), save4Bytes(), saveByte(), and setParseState().

unsigned char* MPEGVideoStreamParser::fLimit [protected]

Definition at line 108 of file MPEGVideoStreamParser.hh.

Referenced by registerReadInterest(), save4Bytes(), saveByte(), and MPEG1or2VideoStreamParser::useSavedVSH().

unsigned MPEGVideoStreamParser::fNumTruncatedBytes [protected]

Definition at line 109 of file MPEGVideoStreamParser.hh.

Referenced by numTruncatedBytes(), registerReadInterest(), restoreSavedParserState(), save4Bytes(), saveByte(), and setParseState().

unsigned char* MPEGVideoStreamParser::fSavedTo [protected]

Definition at line 111 of file MPEGVideoStreamParser.hh.

Referenced by registerReadInterest(), restoreSavedParserState(), and setParseState().

unsigned MPEGVideoStreamParser::fSavedNumTruncatedBytes [protected]

Definition at line 112 of file MPEGVideoStreamParser.hh.

Referenced by registerReadInterest(), restoreSavedParserState(), and setParseState().


The documentation for this class was generated from the following files:
Generated on Fri Dec 19 22:00:07 2008 for live by  doxygen 1.5.2