From c8d4028a56c2baf53a33f94656c72d68c83bf46a Mon Sep 17 00:00:00 2001 From: "xhwang@chromium.org" Date: Sat, 27 Oct 2012 07:23:13 +0000 Subject: Add "type" in GenerateKeyRequest() and OnNeedKey(). The "type" information could help the CDM to parse the initialization data correctly. See for details: https://www.w3.org/Bugs/Public/show_bug.cgi?id=19096 TBR=viettrungluu@chromium.org BUG=none TEST=none Review URL: https://chromiumcodereview.appspot.com/11313016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@164522 0039d316-1c4b-4281-b951-d872f2087c98 --- media/filters/chunk_demuxer.cc | 5 +++-- media/filters/chunk_demuxer.h | 7 +++++-- media/filters/chunk_demuxer_unittest.cc | 12 ++++++++---- media/filters/pipeline_integration_test.cc | 8 +++++--- 4 files changed, 21 insertions(+), 11 deletions(-) (limited to 'media/filters') diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc index 5aa7995..c3cbbb7 100644 --- a/media/filters/chunk_demuxer.cc +++ b/media/filters/chunk_demuxer.cc @@ -1116,10 +1116,11 @@ bool ChunkDemuxer::OnVideoBuffers(const StreamParser::BufferQueue& buffers) { // TODO(acolwell): Remove bool from StreamParser::NeedKeyCB so that // this method can be removed and need_key_cb_ can be passed directly // to the parser. -bool ChunkDemuxer::OnNeedKey(scoped_array init_data, +bool ChunkDemuxer::OnNeedKey(const std::string& type, + scoped_array init_data, int init_data_size) { lock_.AssertAcquired(); - need_key_cb_.Run(init_data.Pass(), init_data_size); + need_key_cb_.Run(type, init_data.Pass(), init_data_size); return true; } diff --git a/media/filters/chunk_demuxer.h b/media/filters/chunk_demuxer.h index 3ec8160..6855b61 100644 --- a/media/filters/chunk_demuxer.h +++ b/media/filters/chunk_demuxer.h @@ -32,7 +32,8 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer { kReachedIdLimit, // Reached ID limit. We can't handle any more IDs. }; - typedef base::Callback init_data, + typedef base::Callback init_data, int init_data_size)> NeedKeyCB; // |open_cb| Run when Initialize() is called to signal that the demuxer @@ -129,7 +130,9 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer { const VideoDecoderConfig& video_config); bool OnAudioBuffers(const StreamParser::BufferQueue& buffers); bool OnVideoBuffers(const StreamParser::BufferQueue& buffers); - bool OnNeedKey(scoped_array init_data, int init_data_size); + bool OnNeedKey(const std::string& type, + scoped_array init_data, + int init_data_size); void OnNewMediaSegment(const std::string& source_id, base::TimeDelta start_timestamp); void OnEndOfMediaSegment(const std::string& source_id); diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc index eae8f69..8f4fa4e 100644 --- a/media/filters/chunk_demuxer_unittest.cc +++ b/media/filters/chunk_demuxer_unittest.cc @@ -58,6 +58,8 @@ static const char* kDefaultFirstClusterRange = "{ [0,46) }"; static const int kDefaultFirstClusterEndTimestamp = 66; static const int kDefaultSecondClusterEndTimestamp = 132; +static const char kWebMInitDataType[] = "video/webm"; + base::TimeDelta kDefaultDuration() { return base::TimeDelta::FromMilliseconds(201224); } @@ -732,9 +734,11 @@ class ChunkDemuxerTest : public testing::Test { // are not supported in mocked methods. Remove this when the issue is fixed // (http://code.google.com/p/googletest/issues/detail?id=395) or when we use // std::string instead of scoped_array (http://crbug.com/130689). - MOCK_METHOD2(NeedKeyMock, void(const uint8* init_data, int init_data_size)); - void DemuxerNeedKey(scoped_array init_data, int init_data_size) { - NeedKeyMock(init_data.get(), init_data_size); + MOCK_METHOD3(NeedKeyMock, void(const std::string& type, + const uint8* init_data, int init_data_size)); + void DemuxerNeedKey(const std::string& type, + scoped_array init_data, int init_data_size) { + NeedKeyMock(type, init_data.get(), init_data_size); } MessageLoop message_loop_; @@ -766,7 +770,7 @@ TEST_F(ChunkDemuxerTest, TestInit) { if (is_audio_encrypted || is_video_encrypted) { int need_key_count = (is_audio_encrypted ? 1 : 0) + (is_video_encrypted ? 1 : 0); - EXPECT_CALL(*this, NeedKeyMock(NotNull(), 16)) + EXPECT_CALL(*this, NeedKeyMock(kWebMInitDataType, NotNull(), 16)) .Times(Exactly(need_key_count)); } diff --git a/media/filters/pipeline_integration_test.cc b/media/filters/pipeline_integration_test.cc index ffafb0e..13e95a5 100644 --- a/media/filters/pipeline_integration_test.cc +++ b/media/filters/pipeline_integration_test.cc @@ -120,11 +120,12 @@ class MockMediaSource { AppendData(initial_append_size_); } - void DemuxerNeedKey(scoped_array init_data, int init_data_size) { + void DemuxerNeedKey(const std::string& type, + scoped_array init_data, int init_data_size) { DCHECK(init_data.get()); DCHECK_GT(init_data_size, 0); DCHECK(decryptor_client_); - decryptor_client_->NeedKey("", "", init_data.Pass(), init_data_size); + decryptor_client_->NeedKey("", "", type, init_data.Pass(), init_data_size); } private: @@ -175,6 +176,7 @@ class FakeDecryptorClient : public DecryptorClient { virtual void NeedKey(const std::string& key_system, const std::string& session_id, + const std::string& type, scoped_array init_data, int init_data_length) { current_key_system_ = key_system; @@ -186,7 +188,7 @@ class FakeDecryptorClient : public DecryptorClient { if (current_key_system_.empty()) { DCHECK(current_session_id_.empty()); EXPECT_TRUE(decryptor_.GenerateKeyRequest( - kClearKeySystem, kInitData, arraysize(kInitData))); + kClearKeySystem, type, kInitData, arraysize(kInitData))); } EXPECT_FALSE(current_key_system_.empty()); -- cgit v1.1