diff options
author | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 01:04:33 +0000 |
---|---|---|
committer | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 01:04:33 +0000 |
commit | 37141711d11b09cef8405c4c2384549dad316fe9 (patch) | |
tree | 82c6e743cb9b011d5e600069ebb42e4098b1ec81 /media/webm/webm_tracks_parser.cc | |
parent | 8f92ac14a5a83d336f97317a7292394f187d5c16 (diff) | |
download | chromium_src-37141711d11b09cef8405c4c2384549dad316fe9.zip chromium_src-37141711d11b09cef8405c4c2384549dad316fe9.tar.gz chromium_src-37141711d11b09cef8405c4c2384549dad316fe9.tar.bz2 |
Support encrypted audio stream in demuxer.
BUG=123421
TEST=updated media_unittest
Review URL: https://chromiumcodereview.appspot.com/11088047
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@161465 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/webm/webm_tracks_parser.cc')
-rw-r--r-- | media/webm/webm_tracks_parser.cc | 42 |
1 files changed, 19 insertions, 23 deletions
diff --git a/media/webm/webm_tracks_parser.cc b/media/webm/webm_tracks_parser.cc index bf039bf..7232285 100644 --- a/media/webm/webm_tracks_parser.cc +++ b/media/webm/webm_tracks_parser.cc @@ -25,15 +25,6 @@ WebMTracksParser::WebMTracksParser() WebMTracksParser::~WebMTracksParser() {} -const std::string& WebMTracksParser::video_encryption_key_id() const { - if (!video_content_encodings_client_.get()) - return EmptyString(); - - DCHECK(!video_content_encodings_client_->content_encodings().empty()); - return video_content_encodings_client_->content_encodings()[0]-> - encryption_key_id(); -} - int WebMTracksParser::Parse(const uint8* buf, int size) { track_type_ =-1; track_num_ = -1; @@ -50,7 +41,6 @@ int WebMTracksParser::Parse(const uint8* buf, int size) { return parser.IsParsingComplete() ? result : 0; } - WebMParserClient* WebMTracksParser::OnListStart(int id) { if (id == kWebMIdContentEncodings) { DCHECK(!track_content_encodings_client_.get()); @@ -81,23 +71,29 @@ bool WebMTracksParser::OnListEnd(int id) { return false; } - if (track_type_ == kWebMTrackTypeVideo) { - video_track_num_ = track_num_; - if (track_content_encodings_client_.get()) { - video_content_encodings_client_ = - track_content_encodings_client_.Pass(); - } - } else if (track_type_ == kWebMTrackTypeAudio) { - audio_track_num_ = track_num_; - if (track_content_encodings_client_.get()) { - audio_content_encodings_client_ = - track_content_encodings_client_.Pass(); - } - } else { + if (track_type_ != kWebMTrackTypeAudio && + track_type_ != kWebMTrackTypeVideo) { DVLOG(1) << "Unexpected TrackType " << track_type_; return false; } + std::string encryption_key_id; + if (track_content_encodings_client_.get()) { + DCHECK(!track_content_encodings_client_->content_encodings().empty()); + // If we have multiple ContentEncoding in one track. Always choose the + // key id in the first ContentEncoding as the key id of the track. + encryption_key_id = track_content_encodings_client_-> + content_encodings()[0]->encryption_key_id(); + } + + if (track_type_ == kWebMTrackTypeAudio) { + audio_track_num_ = track_num_; + audio_encryption_key_id_ = encryption_key_id; + } else if (track_type_ == kWebMTrackTypeVideo) { + video_track_num_ = track_num_; + video_encryption_key_id_ = encryption_key_id; + } + track_type_ = -1; track_num_ = -1; track_content_encodings_client_.reset(); |