| Index: media/mp4/cenc.cc
|
| diff --git a/media/mp4/cenc.cc b/media/mp4/cenc.cc
|
| index 996ebb12c28c50fe3b3c520ff78e0f6ae47854f5..104948dd4fa9066c3ed98a8f58f81215a0aad4e5 100644
|
| --- a/media/mp4/cenc.cc
|
| +++ b/media/mp4/cenc.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "media/mp4/cenc.h"
|
|
|
| +#include <cstring>
|
| +
|
| #include "media/mp4/box_reader.h"
|
| #include "media/mp4/rcheck.h"
|
|
|
| @@ -15,28 +17,35 @@ FrameCENCInfo::~FrameCENCInfo() {}
|
|
|
| bool FrameCENCInfo::Parse(int iv_size, BufferReader* reader) {
|
| const int kEntrySize = 6;
|
| -
|
| // Mandated by CENC spec
|
| RCHECK(iv_size == 8 || iv_size == 16);
|
| - iv.resize(iv_size);
|
| +
|
| + memset(iv, 0, sizeof(iv));
|
| + for (int i = 0; i < iv_size; i++)
|
| + RCHECK(reader->Read1(&iv[i]));
|
| +
|
| + if (!reader->HasBytes(1)) return true;
|
|
|
| uint16 subsample_count;
|
| - RCHECK(reader->ReadVec(&iv, iv_size) &&
|
| - reader->Read2(&subsample_count) &&
|
| + RCHECK(reader->Read2(&subsample_count) &&
|
| reader->HasBytes(subsample_count * kEntrySize));
|
| - subsamples.resize(subsample_count);
|
|
|
| + subsamples.resize(subsample_count);
|
| for (int i = 0; i < subsample_count; i++) {
|
| - RCHECK(reader->Read2(&subsamples[i].clear_size) &&
|
| - reader->Read4(&subsamples[i].encrypted_size));
|
| + uint16 clear_bytes;
|
| + uint32 cypher_bytes;
|
| + RCHECK(reader->Read2(&clear_bytes) &&
|
| + reader->Read4(&cypher_bytes));
|
| + subsamples[i].clear_bytes = clear_bytes;
|
| + subsamples[i].cypher_bytes = cypher_bytes;
|
| }
|
| return true;
|
| }
|
|
|
| -size_t FrameCENCInfo::GetTotalSize() const {
|
| +size_t FrameCENCInfo::GetTotalSizeOfSubsamples() const {
|
| size_t size = 0;
|
| for (size_t i = 0; i < subsamples.size(); i++) {
|
| - size += subsamples[i].clear_size + subsamples[i].encrypted_size;
|
| + size += subsamples[i].clear_bytes + subsamples[i].cypher_bytes;
|
| }
|
| return size;
|
| }
|
|
|