32 auto buffer = make_unique<char[]>(
size);
33 reader.read(buffer.get(),
size);
34 BitReader bitReader(buffer.get(),
size);
38 bitReader.skipBits(3);
39 if (bitReader.readBits<std::uint8_t>(5) != 7) {
45 id = bitReader.readUnsignedExpGolombCodedBits<
ugolomb>();
60 bitReader.skipBits(1);
62 bitReader.readUnsignedExpGolombCodedBits<std::uint8_t>();
63 bitReader.readUnsignedExpGolombCodedBits<std::uint8_t>();
64 bitReader.skipBits(1);
65 if (bitReader.readBit()) {
66 for (std::uint8_t i = 0; i < 8; ++i) {
68 if (bitReader.readBit()) {
70 bitReader.skipBits(16);
72 bitReader.skipBits(64);
94 bitReader.readUnsignedExpGolombCodedBits<
ugolomb>();
102 bitReader.readUnsignedExpGolombCodedBits<
ugolomb>();
103 bitReader.skipBits(1);
107 mbSize.
setWidth(bitReader.readUnsignedExpGolombCodedBits<std::uint32_t>() + 1);
108 mbSize.
setHeight(bitReader.readUnsignedExpGolombCodedBits<std::uint32_t>() + 1);
112 bitReader.skipBits(1);
115 if (bitReader.readBit()) {
116 cropping.setLeft(bitReader.readUnsignedExpGolombCodedBits<std::uint32_t>());
117 cropping.setRight(bitReader.readUnsignedExpGolombCodedBits<std::uint32_t>());
118 cropping.setTop(bitReader.readUnsignedExpGolombCodedBits<std::uint32_t>());
119 cropping.setBottom(bitReader.readUnsignedExpGolombCodedBits<std::uint32_t>());
125 ugolomb croppingScaleX, croppingScaleY;
149 if ((bitReader.readBit())) {
159 if (bitReader.readBit()) {
160 bitReader.skipBits(1);
162 if (bitReader.readBit()) {
163 bitReader.skipBits(4);
164 if (bitReader.readBit()) {
165 bitReader.skipBits(24);
168 if (bitReader.readBit()) {
169 bitReader.readUnsignedExpGolombCodedBits<std::uint8_t>();
170 bitReader.readUnsignedExpGolombCodedBits<std::uint8_t>();
174 if ((
timingInfo.isPresent = bitReader.readBit())) {
175 timingInfo.unitsInTick = bitReader.readBits<std::uint32_t>(32);
176 timingInfo.timeScale = bitReader.readBits<std::uint32_t>(32);
177 timingInfo.fixedFrameRate = bitReader.readBit();
182 if (bitReader.readBit()) {
186 if (bitReader.readBit()) {
191 bitReader.skipBits(1);
197 if (bitReader.readBit()) {
198 bitReader.skipBits(1);
199 bitReader.readUnsignedExpGolombCodedBits<std::uint8_t>();
200 bitReader.readUnsignedExpGolombCodedBits<std::uint8_t>();
201 bitReader.readUnsignedExpGolombCodedBits<std::uint8_t>();
202 bitReader.readUnsignedExpGolombCodedBits<std::uint8_t>();
203 bitReader.readUnsignedExpGolombCodedBits<std::uint8_t>();
204 bitReader.readUnsignedExpGolombCodedBits<std::uint8_t>();
208 }
catch (
const std::ios_base::failure &) {
229 auto buffer = make_unique<char[]>(
size);
230 reader.read(buffer.get(),
size);
231 BitReader bitReader(buffer.get(),
size);
235 bitReader.skipBits(1);
236 if (bitReader.readBits<std::uint8_t>(5) != 8) {
239 id = bitReader.readUnsignedExpGolombCodedBits<
ugolomb>();
240 spsId = bitReader.readUnsignedExpGolombCodedBits<
ugolomb>();
241 bitReader.skipBits(1);
243 }
catch (
const std::ios_base::failure &) {
264 reader.readUnsignedExpGolombCodedBits<std::uint8_t>();
265 reader.readUnsignedExpGolombCodedBits<std::uint8_t>();