#include <MPEGVideoStreamParser.hh>
Inheritance diagram for MPEGVideoStreamParser:


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 | |
| MPEGVideoStreamFramer * | fUsingSource |
| unsigned char * | fStartOfFrame |
| unsigned char * | fTo |
| unsigned char * | fLimit |
| unsigned | fNumTruncatedBytes |
| unsigned char * | fSavedTo |
| unsigned | fSavedNumTruncatedBytes |
Private Member Functions | |
| virtual void | restoreSavedParserState () |
Definition at line 33 of file MPEGVideoStreamParser.hh.
typedef void( StreamParser::clientContinueFunc)(void *clientData, unsigned char *ptr, unsigned size, struct timeval presentationTime) [protected, inherited] |
Definition at line 33 of file StreamParser.hh.
| 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] |
| 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().
00034 { 00035 StreamParser::restoreSavedParserState(); 00036 fTo = fSavedTo; 00037 fNumTruncatedBytes = fSavedNumTruncatedBytes; 00038 }
| 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().
00178 { 00179 fCurParserIndex = fSavedParserIndex = 0; 00180 fSavedRemainingUnparsedBits = fRemainingUnparsedBits = 0; 00181 fTotNumValidBytes = 0; 00182 }
| 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().
00121 { 00122 fSavedParserIndex = fCurParserIndex; 00123 fSavedRemainingUnparsedBits = fRemainingUnparsedBits; 00124 }
| 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; }
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().
1.5.2