| Index: media/formats/mp4/box_definitions.cc
|
| diff --git a/media/formats/mp4/box_definitions.cc b/media/formats/mp4/box_definitions.cc
|
| index 5a15240ebbc0f8b860fa55dba16daaa63d9fe68d..72809cfdffdd542a7c97b2563f97bb935bc79779 100644
|
| --- a/media/formats/mp4/box_definitions.cc
|
| +++ b/media/formats/mp4/box_definitions.cc
|
| @@ -26,16 +26,65 @@ ProtectionSystemSpecificHeader::~ProtectionSystemSpecificHeader() {}
|
| FourCC ProtectionSystemSpecificHeader::BoxType() const { return FOURCC_PSSH; }
|
|
|
| bool ProtectionSystemSpecificHeader::Parse(BoxReader* reader) {
|
| - // Validate the box's contents and hang on to the system ID.
|
| - RCHECK(reader->ReadFullBoxHeader() &&
|
| - reader->ReadVec(&system_id, 16));
|
| -
|
| + // Don't bother validating the box's contents.
|
| // Copy the entire box, including the header, for passing to EME as initData.
|
| DCHECK(raw_box.empty());
|
| raw_box.assign(reader->data(), reader->data() + reader->size());
|
| return true;
|
| }
|
|
|
| +FullProtectionSystemSpecificHeader::FullProtectionSystemSpecificHeader() {}
|
| +FullProtectionSystemSpecificHeader::~FullProtectionSystemSpecificHeader() {}
|
| +FourCC FullProtectionSystemSpecificHeader::BoxType() const {
|
| + return FOURCC_PSSH;
|
| +}
|
| +
|
| +// The format of a 'pssh' box is as follows:
|
| +// unsigned int(32) size;
|
| +// unsigned int(32) type = "pssh";
|
| +// if (size==1) {
|
| +// unsigned int(64) largesize;
|
| +// } else if (size==0) {
|
| +// -- box extends to end of file
|
| +// }
|
| +// unsigned int(8) version;
|
| +// bit(24) flags;
|
| +// unsigned int(8)[16] SystemID;
|
| +// if (version > 0)
|
| +// {
|
| +// unsigned int(32) KID_count;
|
| +// {
|
| +// unsigned int(8)[16] KID;
|
| +// } [KID_count]
|
| +// }
|
| +// unsigned int(32) DataSize;
|
| +// unsigned int(8)[DataSize] Data;
|
| +
|
| +bool FullProtectionSystemSpecificHeader::Parse(mp4::BoxReader* reader) {
|
| + RCHECK(reader->type() == BoxType() && reader->ReadFullBoxHeader());
|
| +
|
| + // Only versions 0 and 1 of the 'pssh' boxes are supported. Any other
|
| + // versions are ignored.
|
| + RCHECK(reader->version() == 0 || reader->version() == 1);
|
| + RCHECK(reader->flags() == 0);
|
| + RCHECK(reader->ReadVec(&system_id, 16));
|
| +
|
| + if (reader->version() > 0) {
|
| + uint32_t kid_count;
|
| + RCHECK(reader->Read4(&kid_count));
|
| + for (uint32_t i = 0; i < kid_count; ++i) {
|
| + std::vector<uint8_t> kid;
|
| + RCHECK(reader->ReadVec(&kid, 16));
|
| + key_ids.push_back(kid);
|
| + }
|
| + }
|
| +
|
| + uint32_t data_size;
|
| + RCHECK(reader->Read4(&data_size));
|
| + RCHECK(reader->ReadVec(&data, data_size));
|
| + return true;
|
| +}
|
| +
|
| SampleAuxiliaryInformationOffset::SampleAuxiliaryInformationOffset() {}
|
| SampleAuxiliaryInformationOffset::~SampleAuxiliaryInformationOffset() {}
|
| FourCC SampleAuxiliaryInformationOffset::BoxType() const { return FOURCC_SAIO; }
|
|
|