本文整理汇总了C++中BitStream::readStringWithLen方法的典型用法代码示例。如果您正苦于以下问题:C++ BitStream::readStringWithLen方法的具体用法?C++ BitStream::readStringWithLen怎么用?C++ BitStream::readStringWithLen使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BitStream
的用法示例。
在下文中一共展示了BitStream::readStringWithLen方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: parseBox
void ElementaryStreamDescriptorBox::parseBox(BitStream& bitstr)
{
parseFullBoxHeader(bitstr);
//////////////////////////////////////////////
// Fill in struct ES_Descriptor //
//////////////////////////////////////////////
mES_Descriptor.ES_DescrTag = bitstr.read8Bits();
if (mES_Descriptor.ES_DescrTag != 3) // ES_DescrTag
{
throw RuntimeError("ElementaryStreamDescritorBox ES_Descriptor.ES_DescrTag not valid");
}
/* Expandable class... need to find out size based on (from ISO/IEC 14496-1)
* int sizeOfInstance = 0;
* bit(1) nextByte;
* bit(7) sizeOfInstance;
* while(nextByte) {
* bit(1) nextByte;
* bit(7) sizeByte;
* sizeOfInstance = sizeOfInstance<<7 | sizeByte; }
*/
std::uint8_t readByte = 0;
std::uint32_t size = 0;
do
{
readByte = bitstr.read8Bits();
std::uint8_t sizeByte = (readByte & 0x7F);
size = (size << 7) | sizeByte;
} while (readByte & 0x80);
mES_Descriptor.size = size;
mES_Descriptor.ES_ID = bitstr.read16Bits();
mES_Descriptor.flags = bitstr.read8Bits();
if (mES_Descriptor.flags & 0x80) // streamDependenceFlag as defined in 7.2.6.5.1 of ISO/IEC 14486-1:2010(E)
{
mES_Descriptor.dependsOn_ES_ID = bitstr.read16Bits();
}
if (mES_Descriptor.flags & 0x40) // URL_Flag as defined in 7.2.6.5.1 of ISO/IEC 14486-1:2010(E)
{
mES_Descriptor.URLlength = bitstr.read8Bits();
if (mES_Descriptor.URLlength)
{
bitstr.readStringWithLen(mES_Descriptor.URLstring, mES_Descriptor.URLlength);
}
}
if (mES_Descriptor.flags & 0x20) // OCRstreamFlag as defined in 7.2.6.5.1 of ISO/IEC 14486-1:2010(E)
{
mES_Descriptor.OCR_ES_Id = bitstr.read16Bits();
}
//////////////////////////////////////////////////////////////////
// Fill in struct ES_Descriptor.DecoderConfigDescriptor //
//////////////////////////////////////////////////////////////////
mES_Descriptor.decConfigDescr.DecoderConfigDescrTag = bitstr.read8Bits();
if (mES_Descriptor.decConfigDescr.DecoderConfigDescrTag != 4) // DecoderConfigDescrTag
{
throw RuntimeError("ElementaryStreamDescritorBox DecoderConfigDescriptor.DecoderConfigDescrTag not valid");
}
readByte = 0;
size = 0;
do
{
readByte = bitstr.read8Bits();
std::uint8_t sizeByte = (readByte & 0x7f);
size = (size << 7) | sizeByte;
} while (readByte & 0x80);
mES_Descriptor.decConfigDescr.size = size;
mES_Descriptor.decConfigDescr.objectTypeIndication = bitstr.read8Bits();
mES_Descriptor.decConfigDescr.streamType = (bitstr.read8Bits() >> 2);
mES_Descriptor.decConfigDescr.bufferSizeDB = bitstr.read24Bits();
mES_Descriptor.decConfigDescr.maxBitrate = bitstr.read32Bits();
mES_Descriptor.decConfigDescr.avgBitrate = bitstr.read32Bits();
/////////////////////////////////////////////////////////////////////////////////////
// Fill in struct ES_Descriptor.DecoderConfigDescriptor.DecoderSpecificInfo //
/////////////////////////////////////////////////////////////////////////////////////
while (bitstr.numBytesLeft()) // DecoderSpecificInfo is optional.
{
std::uint8_t tag = bitstr.read8Bits();
readByte = 0;
size = 0;
do
{
readByte = bitstr.read8Bits();
std::uint8_t sizeByte = (readByte & 0x7f);
size = (size << 7) | sizeByte;
} while (readByte & 0x80);
DecoderSpecificInfo decSpecificInfo;
decSpecificInfo.DecSpecificInfoTag = tag;
decSpecificInfo.size = size;
bitstr.read8BitsArray(decSpecificInfo.DecSpecificInfo, decSpecificInfo.size);
//.........这里部分代码省略.........