Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: media/mp4/cenc.cc

Issue 10651006: Add Common Encryption support to BMFF, including subsample decryption. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Satisfy mac_rel buildbot Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/mp4/cenc.h ('k') | media/mp4/mp4_stream_parser.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/mp4/cenc.h" 5 #include "media/mp4/cenc.h"
6 6
7 #include <cstring>
8
7 #include "media/mp4/box_reader.h" 9 #include "media/mp4/box_reader.h"
8 #include "media/mp4/rcheck.h" 10 #include "media/mp4/rcheck.h"
9 11
10 namespace media { 12 namespace media {
11 namespace mp4 { 13 namespace mp4 {
12 14
13 FrameCENCInfo::FrameCENCInfo() {} 15 FrameCENCInfo::FrameCENCInfo() {}
14 FrameCENCInfo::~FrameCENCInfo() {} 16 FrameCENCInfo::~FrameCENCInfo() {}
15 17
16 bool FrameCENCInfo::Parse(int iv_size, BufferReader* reader) { 18 bool FrameCENCInfo::Parse(int iv_size, BufferReader* reader) {
17 const int kEntrySize = 6; 19 const int kEntrySize = 6;
18
19 // Mandated by CENC spec 20 // Mandated by CENC spec
20 RCHECK(iv_size == 8 || iv_size == 16); 21 RCHECK(iv_size == 8 || iv_size == 16);
21 iv.resize(iv_size); 22
23 memset(iv, 0, sizeof(iv));
24 for (int i = 0; i < iv_size; i++)
25 RCHECK(reader->Read1(&iv[i]));
26
27 if (!reader->HasBytes(1)) return true;
22 28
23 uint16 subsample_count; 29 uint16 subsample_count;
24 RCHECK(reader->ReadVec(&iv, iv_size) && 30 RCHECK(reader->Read2(&subsample_count) &&
25 reader->Read2(&subsample_count) &&
26 reader->HasBytes(subsample_count * kEntrySize)); 31 reader->HasBytes(subsample_count * kEntrySize));
32
27 subsamples.resize(subsample_count); 33 subsamples.resize(subsample_count);
28
29 for (int i = 0; i < subsample_count; i++) { 34 for (int i = 0; i < subsample_count; i++) {
30 RCHECK(reader->Read2(&subsamples[i].clear_size) && 35 uint16 clear_bytes;
31 reader->Read4(&subsamples[i].encrypted_size)); 36 uint32 cypher_bytes;
37 RCHECK(reader->Read2(&clear_bytes) &&
38 reader->Read4(&cypher_bytes));
39 subsamples[i].clear_bytes = clear_bytes;
40 subsamples[i].cypher_bytes = cypher_bytes;
32 } 41 }
33 return true; 42 return true;
34 } 43 }
35 44
36 size_t FrameCENCInfo::GetTotalSize() const { 45 size_t FrameCENCInfo::GetTotalSizeOfSubsamples() const {
37 size_t size = 0; 46 size_t size = 0;
38 for (size_t i = 0; i < subsamples.size(); i++) { 47 for (size_t i = 0; i < subsamples.size(); i++) {
39 size += subsamples[i].clear_size + subsamples[i].encrypted_size; 48 size += subsamples[i].clear_bytes + subsamples[i].cypher_bytes;
40 } 49 }
41 return size; 50 return size;
42 } 51 }
43 52
44 } // namespace mp4 53 } // namespace mp4
45 } // namespace media 54 } // namespace media
OLDNEW
« no previous file with comments | « media/mp4/cenc.h ('k') | media/mp4/mp4_stream_parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698