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

Unified Diff: media/webm/webm_cluster_parser.cc

Issue 11088047: Support encrypted audio stream in demuxer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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
Index: media/webm/webm_cluster_parser.cc
diff --git a/media/webm/webm_cluster_parser.cc b/media/webm/webm_cluster_parser.cc
index a6867bc07d9783c863325f9f84dd89705defcf2a..cf5c0fcf76335dd2eaecb63cb81a2326e67f62c9 100644
--- a/media/webm/webm_cluster_parser.cc
+++ b/media/webm/webm_cluster_parser.cc
@@ -26,8 +26,10 @@ static std::string GenerateCounterBlock(uint64 iv) {
WebMClusterParser::WebMClusterParser(int64 timecode_scale,
int audio_track_num,
int video_track_num,
+ const std::string& audio_encryption_key_id,
const std::string& video_encryption_key_id)
: timecode_multiplier_(timecode_scale / 1000.0),
+ audio_encryption_key_id_(audio_encryption_key_id),
video_encryption_key_id_(video_encryption_key_id),
parser_(kWebMIdCluster, this),
last_block_timecode_(-1),
@@ -198,24 +200,34 @@ bool WebMClusterParser::OnBlock(int track_num, int timecode,
return false;
}
+ Track* track = NULL;
+ std::string encryption_key_id;
ddorwin 2012/10/10 07:14:52 const ref?
xhwang 2012/10/11 00:49:41 Ref has to be initialized upon declaration. If we
ddorwin 2012/10/11 05:18:22 Oh, duh. Nevermind.
+ if (track_num == audio_.track_num()) {
+ track = &audio_;
+ encryption_key_id = audio_encryption_key_id_;
+ } else if (track_num == video_.track_num()) {
+ track = &video_;
+ encryption_key_id = video_encryption_key_id_;
+ } else {
+ DVLOG(1) << "Unexpected track number " << track_num;
ddorwin 2012/10/10 07:14:52 I know this was copied from below, but it seems li
acolwell GONE FROM CHROMIUM 2012/10/10 16:00:06 I don't think this condition is any more important
+ return false;
+ }
+
last_block_timecode_ = timecode;
base::TimeDelta timestamp = base::TimeDelta::FromMicroseconds(
(cluster_timecode_ + timecode) * timecode_multiplier_);
- // Every encrypted Block has a signal byte and IV prepended to it. Current
- // encrypted WebM request for comments specification is here
- // http://wiki.webmproject.org/encryption/webm-encryption-rfc
- bool is_track_encrypted =
- track_num == video_.track_num() && !video_encryption_key_id_.empty();
-
// The first bit of the flags is set when the block contains only keyframes.
// http://www.matroska.org/technical/specs/index.html
bool is_keyframe = (flags & 0x80) != 0;
scoped_refptr<StreamParserBuffer> buffer =
StreamParserBuffer::CopyFrom(data, size, is_keyframe);
- if (is_track_encrypted) {
+ // Every encrypted Block has a signal byte and IV prepended to it. Current
+ // encrypted WebM request for comments specification is here
+ // http://wiki.webmproject.org/encryption/webm-encryption-rfc
+ if (!encryption_key_id.empty()) {
uint8 signal_byte = data[0];
int data_offset = sizeof(signal_byte);
@@ -252,14 +264,7 @@ bool WebMClusterParser::OnBlock(int track_num, int timecode,
block_duration * timecode_multiplier_));
}
- if (track_num == audio_.track_num()) {
- return audio_.AddBuffer(buffer);
- } else if (track_num == video_.track_num()) {
- return video_.AddBuffer(buffer);
- }
-
- DVLOG(1) << "Unexpected track number " << track_num;
- return false;
+ return track->AddBuffer(buffer);
}
WebMClusterParser::Track::Track(int track_num)

Powered by Google App Engine
This is Rietveld 408576698