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

Unified Diff: media/webm/webm_cluster_parser.cc

Issue 10829470: Support for parsing encrypted WebM streams by src. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix tool player_x11 Created 7 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/tools/seek_tester/seek_tester.cc ('k') | media/webm/webm_cluster_parser_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/webm/webm_cluster_parser.cc
diff --git a/media/webm/webm_cluster_parser.cc b/media/webm/webm_cluster_parser.cc
index 8a984c87453c345d990edfd5c89387003a43a62b..a0b95a8ee553cd3e66c99bac2c93ba452bd33210 100644
--- a/media/webm/webm_cluster_parser.cc
+++ b/media/webm/webm_cluster_parser.cc
@@ -10,19 +10,10 @@
#include "media/base/buffers.h"
#include "media/base/decrypt_config.h"
#include "media/webm/webm_constants.h"
+#include "media/webm/webm_crypto_helpers.h"
namespace media {
-// Generates a 16 byte CTR counter block. The CTR counter block format is a
-// CTR IV appended with a CTR block counter. |iv| is an 8 byte CTR IV.
-// |iv_size| is the size of |iv| in btyes. Returns a string of
-// kDecryptionKeySize bytes.
-static std::string GenerateCounterBlock(const uint8* iv, int iv_size) {
- std::string counter_block(reinterpret_cast<const char*>(iv), iv_size);
- counter_block.append(DecryptConfig::kDecryptionKeySize - iv_size, 0);
- return counter_block;
-}
-
WebMClusterParser::TextTrackIterator::TextTrackIterator(
const TextTrackMap& text_track_map) :
iterator_(text_track_map.begin()),
@@ -294,39 +285,13 @@ bool WebMClusterParser::OnBlock(bool is_simple_block, int track_num,
// encrypted WebM request for comments specification is here
// http://wiki.webmproject.org/encryption/webm-encryption-rfc
if (!encryption_key_id.empty()) {
- DCHECK_EQ(kWebMSignalByteSize, 1);
- if (size < kWebMSignalByteSize) {
- MEDIA_LOG(log_cb_)
- << "Got a block from an encrypted stream with no data.";
+ scoped_ptr<DecryptConfig> config(WebMCreateDecryptConfig(
+ data, size,
+ reinterpret_cast<const uint8*>(encryption_key_id.data()),
+ encryption_key_id.size()));
+ if (!config)
return false;
- }
- uint8 signal_byte = data[0];
- int data_offset = sizeof(signal_byte);
-
- // Setting the DecryptConfig object of the buffer while leaving the
- // initialization vector empty will tell the decryptor that the frame is
- // unencrypted.
- std::string counter_block;
-
- if (signal_byte & kWebMFlagEncryptedFrame) {
- if (size < kWebMSignalByteSize + kWebMIvSize) {
- MEDIA_LOG(log_cb_) << "Got an encrypted block with not enough data "
- << size;
- return false;
- }
- counter_block = GenerateCounterBlock(data + data_offset, kWebMIvSize);
- data_offset += kWebMIvSize;
- }
-
- // TODO(fgalligan): Revisit if DecryptConfig needs to be set on unencrypted
- // frames after the CDM API is finalized.
- // Unencrypted frames of potentially encrypted streams currently set
- // DecryptConfig.
- buffer->SetDecryptConfig(scoped_ptr<DecryptConfig>(new DecryptConfig(
- encryption_key_id,
- counter_block,
- data_offset,
- std::vector<SubsampleEntry>())));
+ buffer->SetDecryptConfig(config.Pass());
}
buffer->SetTimestamp(timestamp);
« no previous file with comments | « media/tools/seek_tester/seek_tester.cc ('k') | media/webm/webm_cluster_parser_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698