Chromium Code Reviews| 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) |