MCPcopy Create free account
hub / github.com/IENT/YUView / parseExtradata_AVC

Method parseExtradata_AVC

YUViewLib/src/parser/AVFormat/ParserAVFormat.cpp:140–187  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

138}
139
140bool ParserAVFormat::parseExtradata_AVC(ByteVector &extradata)
141{
142 if (extradata.empty() || !packetModel->rootItem)
143 return true;
144
145 if (extradata.at(0) == 1 && extradata.size() >= 7)
146 {
147 SubByteReaderLogging reader(extradata, packetModel->rootItem, "Extradata (Raw AVC NAL units)");
148 reader.disableEmulationPrevention();
149
150 reader.readBits("Version", 8);
151
152 // The extradata uses the avcc format (see avc.c in libavformat)
153 reader.readBits("profile", 8);
154 reader.readBits("profile_compat", 8);
155 reader.readBits("level", 8);
156 reader.readBits("reserved_6_one_bits", 6);
157 reader.readBits("nal_size_length_minus1", 2);
158 reader.readBits("reserved_3_one_bits", 3);
159 auto number_of_sps = reader.readBits("number_of_sps", 5);
160
161 unsigned nalID = 0;
162 for (unsigned i = 0; i < number_of_sps; i++)
163 {
164 SubByteReaderLoggingSubLevel spsSubLevel(reader, "SPS " + std::to_string(i));
165 auto sps_size = reader.readBits("sps_size", 16);
166 auto spsData = reader.readBytes("", sps_size, Options().withLoggingDisabled());
167 auto parseResult = this->annexBParser->parseAndAddNALUnit(
168 nalID++, spsData, {}, {}, reader.getCurrentItemTree());
169 if (parseResult.success && parseResult.bitrateEntry)
170 this->bitratePlotModel->addBitratePoint(this->videoStreamIndex, *parseResult.bitrateEntry);
171 }
172
173 auto number_of_pps = reader.readBits("number_of_pps", 8);
174 for (unsigned i = 0; i < number_of_pps; i++)
175 {
176 SubByteReaderLoggingSubLevel ppsSubLevel(reader, "PPS " + std::to_string(i));
177 auto pps_size = reader.readBits("pps_size", 16);
178 auto pspsData = reader.readBytes("", pps_size, Options().withLoggingDisabled());
179 auto parseResult = this->annexBParser->parseAndAddNALUnit(
180 nalID++, pspsData, {}, {}, reader.getCurrentItemTree());
181 if (parseResult.success && parseResult.bitrateEntry)
182 this->bitratePlotModel->addBitratePoint(this->videoStreamIndex, *parseResult.bitrateEntry);
183 }
184 }
185
186 return true;
187}
188
189bool ParserAVFormat::parseExtradata_hevc(ByteVector &extradata)
190{

Callers 1

parseExtradataMethod · 0.95

Calls 10

OptionsClass · 0.85
getCurrentItemTreeMethod · 0.80
addBitratePointMethod · 0.80
to_stringFunction · 0.50
atMethod · 0.45
sizeMethod · 0.45
readBitsMethod · 0.45
readBytesMethod · 0.45
parseAndAddNALUnitMethod · 0.45

Tested by

no test coverage detected