Bug 1387798 - move initialized codes out of box constructor to another function which could be able to return error. r=kinetik

MozReview-Commit-ID: 5LJVCTYIT7o

--HG--
extra : rebase_source : a87d825abb76b5c9410eee1b996f3559ca7153d7
This commit is contained in:
Alfredo.Yang 2017-10-13 10:13:28 +08:00
Родитель 9bc0b0adbc
Коммит e707fdfbf4
2 изменённых файлов: 154 добавлений и 47 удалений

Просмотреть файл

@ -705,11 +705,19 @@ Moof::ParseTrun(Box& aBox, Tfhd& aTfhd, Mvhd& aMvhd, Mdhd& aMdhd, Edts& aEdts, u
} }
Tkhd::Tkhd(Box& aBox) Tkhd::Tkhd(Box& aBox)
{
if (Parse(aBox)) {
mValid = true;
}
}
bool
Tkhd::Parse(Box& aBox)
{ {
BoxReader reader(aBox); BoxReader reader(aBox);
if (!reader->CanReadType<uint32_t>()) { if (!reader->CanReadType<uint32_t>()) {
LOG(Tkhd, "Incomplete Box (missing flags)"); LOG(Tkhd, "Incomplete Box (missing flags)");
return; return false;
} }
uint32_t flags = reader->ReadU32(); uint32_t flags = reader->ReadU32();
uint8_t version = flags >> 24; uint8_t version = flags >> 24;
@ -718,7 +726,7 @@ Tkhd::Tkhd(Box& aBox)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Tkhd, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")", LOG(Tkhd, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
if (version == 0) { if (version == 0) {
mCreationTime = reader->ReadU32(); mCreationTime = reader->ReadU32();
@ -735,16 +743,23 @@ Tkhd::Tkhd(Box& aBox)
NS_ASSERTION(!reserved, "reserved should be 0"); NS_ASSERTION(!reserved, "reserved should be 0");
mDuration = reader->ReadU64(); mDuration = reader->ReadU64();
} }
// We don't care about whatever else may be in the box. return true;
mValid = true;
} }
Mvhd::Mvhd(Box& aBox) Mvhd::Mvhd(Box& aBox)
{
if (Parse(aBox)) {
mValid = true;
}
}
bool
Mvhd::Parse(Box& aBox)
{ {
BoxReader reader(aBox); BoxReader reader(aBox);
if (!reader->CanReadType<uint32_t>()) { if (!reader->CanReadType<uint32_t>()) {
LOG(Mdhd, "Incomplete Box (missing flags)"); LOG(Mdhd, "Incomplete Box (missing flags)");
return; return false;
} }
uint32_t flags = reader->ReadU32(); uint32_t flags = reader->ReadU32();
uint8_t version = flags >> 24; uint8_t version = flags >> 24;
@ -753,7 +768,7 @@ Mvhd::Mvhd(Box& aBox)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Mvhd, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")", LOG(Mvhd, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
if (version == 0) { if (version == 0) {
@ -767,12 +782,9 @@ Mvhd::Mvhd(Box& aBox)
mTimescale = reader->ReadU32(); mTimescale = reader->ReadU32();
mDuration = reader->ReadU64(); mDuration = reader->ReadU64();
} else { } else {
return; return false;
}
// We don't care about whatever else may be in the box.
if (mTimescale) {
mValid = true;
} }
return true;
} }
Mdhd::Mdhd(Box& aBox) Mdhd::Mdhd(Box& aBox)
@ -781,12 +793,20 @@ Mdhd::Mdhd(Box& aBox)
} }
Trex::Trex(Box& aBox) Trex::Trex(Box& aBox)
{
if (Parse(aBox)) {
mValid = true;
}
}
bool
Trex::Parse(Box& aBox)
{ {
BoxReader reader(aBox); BoxReader reader(aBox);
if (reader->Remaining() < 6*sizeof(uint32_t)) { if (reader->Remaining() < 6*sizeof(uint32_t)) {
LOG(Trex, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")", LOG(Trex, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")",
(uint64_t)reader->Remaining(), (uint64_t)6*sizeof(uint32_t)); (uint64_t)reader->Remaining(), (uint64_t)6*sizeof(uint32_t));
return; return false;
} }
mFlags = reader->ReadU32(); mFlags = reader->ReadU32();
mTrackId = reader->ReadU32(); mTrackId = reader->ReadU32();
@ -794,11 +814,19 @@ Trex::Trex(Box& aBox)
mDefaultSampleDuration = reader->ReadU32(); mDefaultSampleDuration = reader->ReadU32();
mDefaultSampleSize = reader->ReadU32(); mDefaultSampleSize = reader->ReadU32();
mDefaultSampleFlags = reader->ReadU32(); mDefaultSampleFlags = reader->ReadU32();
mValid = true; return true;
} }
Tfhd::Tfhd(Box& aBox, Trex& aTrex) Tfhd::Tfhd(Box& aBox, Trex& aTrex)
: Trex(aTrex) : Trex(aTrex)
{
if (Parse(aBox)) {
mValid = true;
}
}
bool
Tfhd::Parse(Box& aBox)
{ {
MOZ_ASSERT(aBox.IsType("tfhd")); MOZ_ASSERT(aBox.IsType("tfhd"));
MOZ_ASSERT(aBox.Parent()->IsType("traf")); MOZ_ASSERT(aBox.Parent()->IsType("traf"));
@ -807,7 +835,7 @@ Tfhd::Tfhd(Box& aBox, Trex& aTrex)
BoxReader reader(aBox); BoxReader reader(aBox);
if (!reader->CanReadType<uint32_t>()) { if (!reader->CanReadType<uint32_t>()) {
LOG(Tfhd, "Incomplete Box (missing flags)"); LOG(Tfhd, "Incomplete Box (missing flags)");
return; return false;
} }
mFlags = reader->ReadU32(); mFlags = reader->ReadU32();
size_t need = sizeof(uint32_t) /* trackid */; size_t need = sizeof(uint32_t) /* trackid */;
@ -821,7 +849,7 @@ Tfhd::Tfhd(Box& aBox, Trex& aTrex)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Tfhd, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")", LOG(Tfhd, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
mTrackId = reader->ReadU32(); mTrackId = reader->ReadU32();
mBaseDataOffset = mBaseDataOffset =
@ -838,15 +866,24 @@ Tfhd::Tfhd(Box& aBox, Trex& aTrex)
if (mFlags & 0x20) { if (mFlags & 0x20) {
mDefaultSampleFlags = reader->ReadU32(); mDefaultSampleFlags = reader->ReadU32();
} }
mValid = true;
return true;
} }
Tfdt::Tfdt(Box& aBox) Tfdt::Tfdt(Box& aBox)
{
if (Parse(aBox)) {
mValid = true;
}
}
bool
Tfdt::Parse(Box& aBox)
{ {
BoxReader reader(aBox); BoxReader reader(aBox);
if (!reader->CanReadType<uint32_t>()) { if (!reader->CanReadType<uint32_t>()) {
LOG(Tfdt, "Incomplete Box (missing flags)"); LOG(Tfdt, "Incomplete Box (missing flags)");
return; return false;
} }
uint32_t flags = reader->ReadU32(); uint32_t flags = reader->ReadU32();
uint8_t version = flags >> 24; uint8_t version = flags >> 24;
@ -854,29 +891,37 @@ Tfdt::Tfdt(Box& aBox)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Tfdt, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")", LOG(Tfdt, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
if (version == 0) { if (version == 0) {
mBaseMediaDecodeTime = reader->ReadU32(); mBaseMediaDecodeTime = reader->ReadU32();
} else if (version == 1) { } else if (version == 1) {
mBaseMediaDecodeTime = reader->ReadU64(); mBaseMediaDecodeTime = reader->ReadU64();
} }
mValid = true; return true;
} }
Edts::Edts(Box& aBox) Edts::Edts(Box& aBox)
: mMediaStart(0) : mMediaStart(0)
, mEmptyOffset(0) , mEmptyOffset(0)
{
if (Parse(aBox)) {
mValid = true;
}
}
bool
Edts::Parse(Box& aBox)
{ {
Box child = aBox.FirstChild(); Box child = aBox.FirstChild();
if (!child.IsType("elst")) { if (!child.IsType("elst")) {
return; return false;
} }
BoxReader reader(child); BoxReader reader(child);
if (!reader->CanReadType<uint32_t>()) { if (!reader->CanReadType<uint32_t>()) {
LOG(Edts, "Incomplete Box (missing flags)"); LOG(Edts, "Incomplete Box (missing flags)");
return; return false;
} }
uint32_t flags = reader->ReadU32(); uint32_t flags = reader->ReadU32();
uint8_t version = flags >> 24; uint8_t version = flags >> 24;
@ -885,7 +930,7 @@ Edts::Edts(Box& aBox)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Edts, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")", LOG(Edts, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
bool emptyEntry = false; bool emptyEntry = false;
uint32_t entryCount = reader->ReadU32(); uint32_t entryCount = reader->ReadU32();
@ -912,16 +957,26 @@ Edts::Edts(Box& aBox)
} }
reader->ReadU32(); // media_rate_integer and media_rate_fraction reader->ReadU32(); // media_rate_integer and media_rate_fraction
} }
return true;
} }
Saiz::Saiz(Box& aBox, AtomType aDefaultType) Saiz::Saiz(Box& aBox, AtomType aDefaultType)
: mAuxInfoType(aDefaultType) : mAuxInfoType(aDefaultType)
, mAuxInfoTypeParameter(0) , mAuxInfoTypeParameter(0)
{
if (Parse(aBox)) {
mValid = true;
}
}
bool
Saiz::Parse(Box& aBox)
{ {
BoxReader reader(aBox); BoxReader reader(aBox);
if (!reader->CanReadType<uint32_t>()) { if (!reader->CanReadType<uint32_t>()) {
LOG(Saiz, "Incomplete Box (missing flags)"); LOG(Saiz, "Incomplete Box (missing flags)");
return; return false;
} }
uint32_t flags = reader->ReadU32(); uint32_t flags = reader->ReadU32();
uint8_t version = flags >> 24; uint8_t version = flags >> 24;
@ -930,7 +985,7 @@ Saiz::Saiz(Box& aBox, AtomType aDefaultType)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Saiz, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")", LOG(Saiz, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
if (flags & 1) { if (flags & 1) {
mAuxInfoType = reader->ReadU32(); mAuxInfoType = reader->ReadU32();
@ -941,26 +996,34 @@ Saiz::Saiz(Box& aBox, AtomType aDefaultType)
if (defaultSampleInfoSize) { if (defaultSampleInfoSize) {
if (!mSampleInfoSize.SetLength(count, fallible)) { if (!mSampleInfoSize.SetLength(count, fallible)) {
LOG(Saiz, "OOM"); LOG(Saiz, "OOM");
return; return false;
} }
memset(mSampleInfoSize.Elements(), defaultSampleInfoSize, mSampleInfoSize.Length()); memset(mSampleInfoSize.Elements(), defaultSampleInfoSize, mSampleInfoSize.Length());
} else { } else {
if (!reader->ReadArray(mSampleInfoSize, count)) { if (!reader->ReadArray(mSampleInfoSize, count)) {
LOG(Saiz, "Incomplete Box (OOM or missing count:%u)", count); LOG(Saiz, "Incomplete Box (OOM or missing count:%u)", count);
return; return false;
} }
} }
mValid = true; return true;
} }
Saio::Saio(Box& aBox, AtomType aDefaultType) Saio::Saio(Box& aBox, AtomType aDefaultType)
: mAuxInfoType(aDefaultType) : mAuxInfoType(aDefaultType)
, mAuxInfoTypeParameter(0) , mAuxInfoTypeParameter(0)
{
if (Parse(aBox)) {
mValid = true;
}
}
bool
Saio::Parse(Box& aBox)
{ {
BoxReader reader(aBox); BoxReader reader(aBox);
if (!reader->CanReadType<uint32_t>()) { if (!reader->CanReadType<uint32_t>()) {
LOG(Saio, "Incomplete Box (missing flags)"); LOG(Saio, "Incomplete Box (missing flags)");
return; return false;
} }
uint32_t flags = reader->ReadU32(); uint32_t flags = reader->ReadU32();
uint8_t version = flags >> 24; uint8_t version = flags >> 24;
@ -968,7 +1031,7 @@ Saio::Saio(Box& aBox, AtomType aDefaultType)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Saio, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")", LOG(Saio, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
if (flags & 1) { if (flags & 1) {
mAuxInfoType = reader->ReadU32(); mAuxInfoType = reader->ReadU32();
@ -979,11 +1042,11 @@ Saio::Saio(Box& aBox, AtomType aDefaultType)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Saio, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")", LOG(Saio, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
if (!mOffsets.SetCapacity(count, fallible)) { if (!mOffsets.SetCapacity(count, fallible)) {
LOG(Saiz, "OOM"); LOG(Saiz, "OOM");
return; return false;
} }
if (version == 0) { if (version == 0) {
for (size_t i = 0; i < count; i++) { for (size_t i = 0; i < count; i++) {
@ -994,16 +1057,24 @@ Saio::Saio(Box& aBox, AtomType aDefaultType)
MOZ_ALWAYS_TRUE(mOffsets.AppendElement(reader->ReadU64(), fallible)); MOZ_ALWAYS_TRUE(mOffsets.AppendElement(reader->ReadU64(), fallible));
} }
} }
mValid = true; return true;
} }
Sbgp::Sbgp(Box& aBox) Sbgp::Sbgp(Box& aBox)
{
if (Parse(aBox)) {
mValid = true;
}
}
bool
Sbgp::Parse(Box& aBox)
{ {
BoxReader reader(aBox); BoxReader reader(aBox);
if (!reader->CanReadType<uint32_t>()) { if (!reader->CanReadType<uint32_t>()) {
LOG(Sbgp, "Incomplete Box (missing flags)"); LOG(Sbgp, "Incomplete Box (missing flags)");
return; return false;
} }
uint32_t flags = reader->ReadU32(); uint32_t flags = reader->ReadU32();
@ -1015,7 +1086,7 @@ Sbgp::Sbgp(Box& aBox)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Sbgp, "Incomplete Box (have:%" PRIu64 ", need:%" PRIu64 ")", LOG(Sbgp, "Incomplete Box (have:%" PRIu64 ", need:%" PRIu64 ")",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
mGroupingType = reader->ReadU32(); mGroupingType = reader->ReadU32();
@ -1031,7 +1102,7 @@ Sbgp::Sbgp(Box& aBox)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Sbgp, "Incomplete Box (have:%" PRIu64 ", need:%" PRIu64 "). Failed to read entries", LOG(Sbgp, "Incomplete Box (have:%" PRIu64 ", need:%" PRIu64 "). Failed to read entries",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
for (uint32_t i = 0; i < count; i++) { for (uint32_t i = 0; i < count; i++) {
@ -1041,20 +1112,27 @@ Sbgp::Sbgp(Box& aBox)
SampleToGroupEntry entry(sampleCount, groupDescriptionIndex); SampleToGroupEntry entry(sampleCount, groupDescriptionIndex);
if (!mEntries.AppendElement(entry, mozilla::fallible)) { if (!mEntries.AppendElement(entry, mozilla::fallible)) {
LOG(Sbgp, "OOM"); LOG(Sbgp, "OOM");
return; return false;
} }
} }
return true;
mValid = true;
} }
Sgpd::Sgpd(Box& aBox) Sgpd::Sgpd(Box& aBox)
{
if (Parse(aBox)) {
mValid = true;
}
}
bool
Sgpd::Parse(Box& aBox)
{ {
BoxReader reader(aBox); BoxReader reader(aBox);
if (!reader->CanReadType<uint32_t>()) { if (!reader->CanReadType<uint32_t>()) {
LOG(Sgpd, "Incomplete Box (missing flags)"); LOG(Sgpd, "Incomplete Box (missing flags)");
return; return false;
} }
uint32_t flags = reader->ReadU32(); uint32_t flags = reader->ReadU32();
@ -1065,7 +1143,7 @@ Sgpd::Sgpd(Box& aBox)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Sgpd, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")", LOG(Sgpd, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 ")",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
mGroupingType = reader->ReadU32(); mGroupingType = reader->ReadU32();
@ -1076,7 +1154,7 @@ Sgpd::Sgpd(Box& aBox)
if (version == 1) { if (version == 1) {
defaultLength = reader->ReadU32(); defaultLength = reader->ReadU32();
if (defaultLength < entrySize && defaultLength != 0) { if (defaultLength < entrySize && defaultLength != 0) {
return; return false;
} }
} }
@ -1089,28 +1167,27 @@ Sgpd::Sgpd(Box& aBox)
if (reader->Remaining() < need) { if (reader->Remaining() < need) {
LOG(Sgpd, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 "). Failed to read entries", LOG(Sgpd, "Incomplete Box (have:%" PRIu64 " need:%" PRIu64 "). Failed to read entries",
(uint64_t)reader->Remaining(), (uint64_t)need); (uint64_t)reader->Remaining(), (uint64_t)need);
return; return false;
} }
for (uint32_t i = 0; i < count; ++i) { for (uint32_t i = 0; i < count; ++i) {
if (version == 1 && defaultLength == 0) { if (version == 1 && defaultLength == 0) {
uint32_t descriptionLength = reader->ReadU32(); uint32_t descriptionLength = reader->ReadU32();
if (descriptionLength < entrySize) { if (descriptionLength < entrySize) {
return; return false;
} }
} }
CencSampleEncryptionInfoEntry entry; CencSampleEncryptionInfoEntry entry;
bool valid = entry.Init(reader); bool valid = entry.Init(reader);
if (!valid) { if (!valid) {
return; return false;
} }
if (!mEntries.AppendElement(entry, mozilla::fallible)) { if (!mEntries.AppendElement(entry, mozilla::fallible)) {
LOG(Sgpd, "OOM"); LOG(Sgpd, "OOM");
return; return false;
} }
} }
return true;
mValid = true;
} }
bool CencSampleEncryptionInfoEntry::Init(BoxReader& aReader) bool CencSampleEncryptionInfoEntry::Init(BoxReader& aReader)

Просмотреть файл

@ -43,6 +43,9 @@ public:
uint64_t mModificationTime; uint64_t mModificationTime;
uint32_t mTimescale; uint32_t mTimescale;
uint64_t mDuration; uint64_t mDuration;
protected:
bool Parse(Box& aBox);
}; };
class Tkhd : public Mvhd class Tkhd : public Mvhd
@ -55,6 +58,9 @@ public:
explicit Tkhd(Box& aBox); explicit Tkhd(Box& aBox);
uint32_t mTrackId; uint32_t mTrackId;
protected:
bool Parse(Box& aBox);
}; };
class Mdhd : public Mvhd class Mdhd : public Mvhd
@ -85,6 +91,9 @@ public:
uint32_t mDefaultSampleDuration; uint32_t mDefaultSampleDuration;
uint32_t mDefaultSampleSize; uint32_t mDefaultSampleSize;
uint32_t mDefaultSampleFlags; uint32_t mDefaultSampleFlags;
protected:
bool Parse(Box& aBox);
}; };
class Tfhd : public Trex class Tfhd : public Trex
@ -99,6 +108,9 @@ public:
Tfhd(Box& aBox, Trex& aTrex); Tfhd(Box& aBox, Trex& aTrex);
uint64_t mBaseDataOffset; uint64_t mBaseDataOffset;
protected:
bool Parse(Box& aBox);
}; };
class Tfdt : public Atom class Tfdt : public Atom
@ -111,6 +123,9 @@ public:
explicit Tfdt(Box& aBox); explicit Tfdt(Box& aBox);
uint64_t mBaseMediaDecodeTime; uint64_t mBaseMediaDecodeTime;
protected:
bool Parse(Box& aBox);
}; };
class Edts : public Atom class Edts : public Atom
@ -130,6 +145,9 @@ public:
int64_t mMediaStart; int64_t mMediaStart;
int64_t mEmptyOffset; int64_t mEmptyOffset;
protected:
bool Parse(Box& aBox);
}; };
struct Sample struct Sample
@ -149,6 +167,9 @@ public:
AtomType mAuxInfoType; AtomType mAuxInfoType;
uint32_t mAuxInfoTypeParameter; uint32_t mAuxInfoTypeParameter;
FallibleTArray<uint8_t> mSampleInfoSize; FallibleTArray<uint8_t> mSampleInfoSize;
protected:
bool Parse(Box& aBox);
}; };
class Saio final : public Atom class Saio final : public Atom
@ -159,6 +180,9 @@ public:
AtomType mAuxInfoType; AtomType mAuxInfoType;
uint32_t mAuxInfoTypeParameter; uint32_t mAuxInfoTypeParameter;
FallibleTArray<uint64_t> mOffsets; FallibleTArray<uint64_t> mOffsets;
protected:
bool Parse(Box& aBox);
}; };
struct SampleToGroupEntry struct SampleToGroupEntry
@ -185,6 +209,9 @@ public:
AtomType mGroupingType; AtomType mGroupingType;
uint32_t mGroupingTypeParam; uint32_t mGroupingTypeParam;
FallibleTArray<SampleToGroupEntry> mEntries; FallibleTArray<SampleToGroupEntry> mEntries;
protected:
bool Parse(Box& aBox);
}; };
struct CencSampleEncryptionInfoEntry final struct CencSampleEncryptionInfoEntry final
@ -206,6 +233,9 @@ public:
AtomType mGroupingType; AtomType mGroupingType;
FallibleTArray<CencSampleEncryptionInfoEntry> mEntries; FallibleTArray<CencSampleEncryptionInfoEntry> mEntries;
protected:
bool Parse(Box& aBox);
}; };
class AuxInfo { class AuxInfo {