Relax requirement on reserved bits when parsing AVCC
Issue #44 Change-Id: I84235a4d94225e2bf1777443611ad19429b958d4
This commit is contained in:
parent
e276a9de2d
commit
00ff04ffad
|
@ -32,25 +32,12 @@ bool ExtractResolutionFromDecoderConfig(const uint8_t* avc_decoder_config_data,
|
||||||
RCHECK(reader.Read1(&value));
|
RCHECK(reader.Read1(&value));
|
||||||
RCHECK(value == 1);
|
RCHECK(value == 1);
|
||||||
|
|
||||||
// avc profile. No value check.
|
// Skip avc profile, profile compatibility, avc level, and length size.
|
||||||
RCHECK(reader.Read1(&value));
|
RCHECK(reader.SkipBytes(4));
|
||||||
|
|
||||||
// profile compatibility. No value check.
|
// Reserved and num sps.
|
||||||
RCHECK(reader.Read1(&value));
|
RCHECK(reader.Read1(&value));
|
||||||
|
|
||||||
// avc level indication. No value check.
|
|
||||||
RCHECK(reader.Read1(&value));
|
|
||||||
|
|
||||||
// reserved and length sized minus one.
|
|
||||||
RCHECK(reader.Read1(&value));
|
|
||||||
// upper 6 bits are reserved and must be 111111.
|
|
||||||
RCHECK((value & 0xFC) == 0xFC);
|
|
||||||
|
|
||||||
// reserved and num sps.
|
|
||||||
RCHECK(reader.Read1(&value));
|
|
||||||
// upper 3 bits are reserved for 0b111.
|
|
||||||
RCHECK((value & 0xE0) == 0xE0);
|
|
||||||
|
|
||||||
const uint8_t num_sps = value & 0x1F;
|
const uint8_t num_sps = value & 0x1F;
|
||||||
if (num_sps < 1) {
|
if (num_sps < 1) {
|
||||||
LOG(ERROR) << "No SPS found.";
|
LOG(ERROR) << "No SPS found.";
|
||||||
|
|
|
@ -902,12 +902,11 @@ bool AVCDecoderConfigurationRecord::ParseData(BufferReader* reader) {
|
||||||
reader->Read1(&avc_level));
|
reader->Read1(&avc_level));
|
||||||
|
|
||||||
uint8_t length_size_minus_one;
|
uint8_t length_size_minus_one;
|
||||||
RCHECK(reader->Read1(&length_size_minus_one) &&
|
RCHECK(reader->Read1(&length_size_minus_one));
|
||||||
(length_size_minus_one & 0xfc) == 0xfc);
|
|
||||||
length_size = (length_size_minus_one & 0x3) + 1;
|
length_size = (length_size_minus_one & 0x3) + 1;
|
||||||
|
|
||||||
uint8_t num_sps;
|
uint8_t num_sps;
|
||||||
RCHECK(reader->Read1(&num_sps) && (num_sps & 0xe0) == 0xe0);
|
RCHECK(reader->Read1(&num_sps));
|
||||||
num_sps &= 0x1f;
|
num_sps &= 0x1f;
|
||||||
|
|
||||||
sps_list.resize(num_sps);
|
sps_list.resize(num_sps);
|
||||||
|
|
Loading…
Reference in New Issue