Chromium Code Reviews| Index: webkit/media/android/media_source_delegate.cc |
| diff --git a/webkit/media/android/media_source_delegate.cc b/webkit/media/android/media_source_delegate.cc |
| index 908a4fa16addfe1e9c70dcdd8344356b9605bf97..1f8057844e7c785bea7d92030a7f357405a5cc9e 100644 |
| --- a/webkit/media/android/media_source_delegate.cc |
| +++ b/webkit/media/android/media_source_delegate.cc |
| @@ -21,9 +21,11 @@ |
| #include "webkit/media/webmediaplayer_util.h" |
| #include "webkit/media/webmediasourceclient_impl.h" |
| +using media::DemuxerHost; |
| using media::DemuxerStream; |
| using media::MediaPlayerHostMsg_DemuxerReady_Params; |
| using media::MediaPlayerHostMsg_ReadFromDemuxerAck_Params; |
| +using media::PipelineStatusCB; |
| using WebKit::WebMediaPlayer; |
| using WebKit::WebString; |
| @@ -59,73 +61,196 @@ static void LogMediaSourceError(const scoped_refptr<media::MediaLog>& media_log, |
| media_log->AddEvent(media_log->CreateMediaSourceErrorEvent(error)); |
| } |
| -MediaSourceDelegate::MediaSourceDelegate( |
| - WebKit::WebFrame* frame, |
| - WebKit::WebMediaPlayerClient* client, |
| - WebMediaPlayerProxyAndroid* proxy, |
| - int player_id, |
| - media::MediaLog* media_log) |
| - : ALLOW_THIS_IN_INITIALIZER_LIST(weak_this_(this)), |
| - client_(client), |
| - proxy_(proxy), |
| - player_id_(player_id), |
| - media_log_(media_log), |
| - audio_params_(new MediaPlayerHostMsg_ReadFromDemuxerAck_Params), |
| - video_params_(new MediaPlayerHostMsg_ReadFromDemuxerAck_Params), |
| - seeking_(false) { |
| - if (WebKit::WebRuntimeFeatures::isEncryptedMediaEnabled()) { |
| - decryptor_.reset(new ProxyDecryptor( |
| - client, |
| - frame, |
| - BIND_TO_RENDER_LOOP(&MediaSourceDelegate::OnKeyAdded), |
| - BIND_TO_RENDER_LOOP(&MediaSourceDelegate::OnKeyError), |
| - BIND_TO_RENDER_LOOP(&MediaSourceDelegate::OnKeyMessage), |
| - BIND_TO_RENDER_LOOP(&MediaSourceDelegate::OnNeedKey))); |
| - decryptor_->SetDecryptorReadyCB( |
| - BIND_TO_RENDER_LOOP(&MediaSourceDelegate::OnDecryptorReady)); |
| +// KeyHandlingDemuxer ---------------------------------------------------------- |
| + |
| +class KeyHandlingDemuxer : public media::Demuxer { |
| + public: |
| + explicit KeyHandlingDemuxer(media::Demuxer* demuxer); |
| + virtual ~KeyHandlingDemuxer(); |
| + |
| + virtual WebKit::WebMediaPlayer::MediaKeyException GenerateKeyRequest( |
| + const WebKit::WebString& key_system, |
| + const unsigned char* init_data, |
| + unsigned init_data_length) { |
| + return WebKit::WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; |
|
Ami GONE FROM CHROMIUM
2013/04/29 22:11:09
lol more like Key_NOT_HandlingDemuxer! :)
wonsik
2013/05/01 14:15:38
Right, just interfaces and stub. I guess something
|
| + } |
| + virtual WebKit::WebMediaPlayer::MediaKeyException AddKey( |
| + const WebKit::WebString& key_system, |
| + const unsigned char* key, |
| + unsigned key_length, |
| + const unsigned char* init_data, |
| + unsigned init_data_length, |
| + const WebKit::WebString& session_id) { |
| + return WebKit::WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; |
| } |
| + virtual WebKit::WebMediaPlayer::MediaKeyException CancelKeyRequest( |
| + const WebKit::WebString& key_system, |
| + const WebKit::WebString& session_id) { |
| + return WebKit::WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; |
| + } |
| + virtual int GetDurationMs() { return -1; } |
| + |
| + // media::Demuxer implementation |
| + virtual void Initialize(DemuxerHost* host, const PipelineStatusCB& status_cb) |
| + OVERRIDE; |
| + virtual void SetPlaybackRate(float playback_rate) OVERRIDE; |
| + virtual void Seek(base::TimeDelta time, const PipelineStatusCB& status_cb) |
| + OVERRIDE; |
| + virtual void Stop(const base::Closure& callback) OVERRIDE; |
| + virtual void OnAudioRendererDisabled() OVERRIDE; |
| + virtual DemuxerStream* GetStream(DemuxerStream::Type type) OVERRIDE; |
| + virtual base::TimeDelta GetStartTime() const OVERRIDE; |
| + |
| + protected: |
| + scoped_ptr<media::Demuxer> demuxer_; |
| +}; |
| + |
| +KeyHandlingDemuxer::KeyHandlingDemuxer(media::Demuxer* demuxer) { |
| + demuxer_.reset(demuxer); |
| } |
| -MediaSourceDelegate::~MediaSourceDelegate() {} |
| +KeyHandlingDemuxer::~KeyHandlingDemuxer() {} |
| -void MediaSourceDelegate::Initialize( |
| - scoped_ptr<WebKit::WebMediaSource> media_source, |
| - const UpdateNetworkStateCB& update_network_state_cb) { |
| - DCHECK(media_source); |
| - media_source_ = media_source.Pass(); |
| - update_network_state_cb_ = update_network_state_cb; |
| - |
| - chunk_demuxer_.reset(new media::ChunkDemuxer( |
| - BIND_TO_RENDER_LOOP(&MediaSourceDelegate::OnDemuxerOpened), |
| - BIND_TO_RENDER_LOOP_2(&MediaSourceDelegate::OnNeedKey, "", ""), |
| - base::Bind(&LogMediaSourceError, media_log_))); |
| - chunk_demuxer_->Initialize(this, |
| - BIND_TO_RENDER_LOOP(&MediaSourceDelegate::OnDemuxerInitDone)); |
| +void KeyHandlingDemuxer::Initialize(DemuxerHost* host, |
| + const PipelineStatusCB& status_cb) { |
| + demuxer_->Initialize(host, status_cb); |
| } |
| -const WebKit::WebTimeRanges& MediaSourceDelegate::Buffered() { |
| - buffered_web_time_ranges_ = |
| - ConvertToWebTimeRanges(buffered_time_ranges_); |
| - return buffered_web_time_ranges_; |
| +void KeyHandlingDemuxer::SetPlaybackRate(float playback_rate) { |
| + demuxer_->SetPlaybackRate(playback_rate); |
| } |
| -size_t MediaSourceDelegate::DecodedFrameCount() const { |
| - return statistics_.video_frames_decoded; |
| +void KeyHandlingDemuxer::Seek(base::TimeDelta time, |
| + const PipelineStatusCB& status_cb) { |
| + demuxer_->Seek(time, status_cb); |
| } |
| -size_t MediaSourceDelegate::DroppedFrameCount() const { |
| - return statistics_.video_frames_dropped; |
| +void KeyHandlingDemuxer::Stop(const base::Closure& callback) { |
| + demuxer_->Stop(callback); |
| } |
| -size_t MediaSourceDelegate::AudioDecodedByteCount() const { |
| - return statistics_.audio_bytes_decoded; |
| +void KeyHandlingDemuxer::OnAudioRendererDisabled() { |
| + demuxer_->OnAudioRendererDisabled(); |
| } |
| -size_t MediaSourceDelegate::VideoDecodedByteCount() const { |
| - return statistics_.video_bytes_decoded; |
| +DemuxerStream* KeyHandlingDemuxer::GetStream( |
| + DemuxerStream::Type type) { |
| + return demuxer_->GetStream(type); |
| } |
| -WebMediaPlayer::MediaKeyException MediaSourceDelegate::GenerateKeyRequest( |
| +base::TimeDelta KeyHandlingDemuxer::GetStartTime() const { |
| + return demuxer_->GetStartTime(); |
| +} |
| + |
| +// KeyHandlingChunkDemuxer ----------------------------------------------------- |
| + |
| +namespace { |
| + |
| +class KeyHandlingChunkDemuxer : public KeyHandlingDemuxer { |
| + public: |
| + typedef base::Callback<void(const std::string& key_system)> NotifyDemuxerCB; |
| + |
| + KeyHandlingChunkDemuxer(WebKit::WebFrame* frame, |
| + WebKit::WebMediaPlayerClient* client, |
| + WebKit::WebMediaSource* media_source, |
| + scoped_refptr<media::MediaLog> media_log, |
| + NotifyDemuxerCB notify_demuxer_cb); |
| + virtual ~KeyHandlingChunkDemuxer(); |
| + |
| + // KeyHandlingDemuxer |
| + virtual WebKit::WebMediaPlayer::MediaKeyException GenerateKeyRequest( |
| + const WebKit::WebString& key_system, |
| + const unsigned char* init_data, |
| + unsigned init_data_length) OVERRIDE; |
| + virtual WebKit::WebMediaPlayer::MediaKeyException AddKey( |
| + const WebKit::WebString& key_system, |
| + const unsigned char* key, |
| + unsigned key_length, |
| + const unsigned char* init_data, |
| + unsigned init_data_length, |
| + const WebKit::WebString& session_id) OVERRIDE; |
| + virtual WebKit::WebMediaPlayer::MediaKeyException CancelKeyRequest( |
| + const WebKit::WebString& key_system, |
| + const WebKit::WebString& session_id) OVERRIDE; |
| + virtual int GetDurationMs() OVERRIDE; |
| + |
| + // media::Demuxer |
| + virtual void Seek(base::TimeDelta time, const PipelineStatusCB& status_cb) |
| + OVERRIDE; |
| + |
| + private: |
| + // Callbacks for ChunkDemuxer & Decryptor. |
| + void OnDemuxerOpened(); |
| + void OnKeyAdded(const std::string& key_system, const std::string& session_id); |
| + void OnKeyError(const std::string& key_system, |
| + const std::string& session_id, |
| + media::Decryptor::KeyError error_code, |
| + int system_code); |
| + void OnKeyMessage(const std::string& key_system, |
| + const std::string& session_id, |
| + const std::string& message, |
| + const std::string& default_url); |
| + void OnNeedKey(const std::string& key_system, |
| + const std::string& type, |
| + const std::string& session_id, |
| + scoped_ptr<uint8[]> init_data, |
| + int init_data_size); |
| + void OnDecryptorReady(media::Decryptor*); |
| + |
| + base::WeakPtrFactory<KeyHandlingChunkDemuxer> weak_this_; |
| + media::ChunkDemuxer* chunk_demuxer_; |
| + WebKit::WebMediaPlayerClient* client_; |
| + scoped_refptr<media::MediaLog> media_log_; |
| + |
| + // The decryptor that manages decryption keys and decrypts encrypted frames. |
| + scoped_ptr<ProxyDecryptor> decryptor_; |
| + |
| + // The currently selected key system. Empty string means that no key system |
| + // has been selected. |
| + WebKit::WebString current_key_system_; |
| + |
| + // Temporary for EME v0.1. In the future the init data type should be passed |
| + // through GenerateKeyRequest() directly from WebKit. |
| + std::string init_data_type_; |
| + |
| + NotifyDemuxerCB notify_demuxer_cb_; |
| + |
| + scoped_ptr<WebKit::WebMediaSource> media_source_; |
| +}; |
| + |
| +KeyHandlingChunkDemuxer::KeyHandlingChunkDemuxer( |
| + WebKit::WebFrame* frame, |
| + WebKit::WebMediaPlayerClient* client, |
| + WebKit::WebMediaSource* media_source, |
| + scoped_refptr<media::MediaLog> media_log, |
| + NotifyDemuxerCB notify_demuxer_cb) |
| + : KeyHandlingDemuxer(NULL), |
| + weak_this_(this), |
| + client_(client), |
| + media_log_(media_log), |
| + notify_demuxer_cb_(notify_demuxer_cb) { |
| + chunk_demuxer_ = new media::ChunkDemuxer( |
| + BIND_TO_RENDER_LOOP(&KeyHandlingChunkDemuxer::OnDemuxerOpened), |
| + BIND_TO_RENDER_LOOP_2(&KeyHandlingChunkDemuxer::OnNeedKey, "", ""), |
| + base::Bind(&LogMediaSourceError, media_log)); |
| + demuxer_.reset(chunk_demuxer_); |
| + media_source_.reset(media_source); |
| + if (WebKit::WebRuntimeFeatures::isEncryptedMediaEnabled()) { |
| + decryptor_.reset(new ProxyDecryptor( |
| + client, |
| + frame, |
| + BIND_TO_RENDER_LOOP(&KeyHandlingChunkDemuxer::OnKeyAdded), |
| + BIND_TO_RENDER_LOOP(&KeyHandlingChunkDemuxer::OnKeyError), |
| + BIND_TO_RENDER_LOOP(&KeyHandlingChunkDemuxer::OnKeyMessage), |
| + BIND_TO_RENDER_LOOP(&KeyHandlingChunkDemuxer::OnNeedKey))); |
| + decryptor_->SetDecryptorReadyCB( |
| + BIND_TO_RENDER_LOOP(&KeyHandlingChunkDemuxer::OnDecryptorReady)); |
| + } |
| +} |
| + |
| +KeyHandlingChunkDemuxer::~KeyHandlingChunkDemuxer() {} |
| + |
| +WebMediaPlayer::MediaKeyException KeyHandlingChunkDemuxer::GenerateKeyRequest( |
| const WebString& key_system, |
| const unsigned char* init_data, |
| size_t init_data_length) { |
| @@ -155,7 +280,7 @@ WebMediaPlayer::MediaKeyException MediaSourceDelegate::GenerateKeyRequest( |
| return WebMediaPlayer::MediaKeyExceptionNoError; |
| } |
| -WebMediaPlayer::MediaKeyException MediaSourceDelegate::AddKey( |
| +WebMediaPlayer::MediaKeyException KeyHandlingChunkDemuxer::AddKey( |
| const WebString& key_system, |
| const unsigned char* key, |
| size_t key_length, |
| @@ -181,7 +306,7 @@ WebMediaPlayer::MediaKeyException MediaSourceDelegate::AddKey( |
| return WebMediaPlayer::MediaKeyExceptionNoError; |
| } |
| -WebMediaPlayer::MediaKeyException MediaSourceDelegate::CancelKeyRequest( |
| +WebMediaPlayer::MediaKeyException KeyHandlingChunkDemuxer::CancelKeyRequest( |
| const WebString& key_system, |
| const WebString& session_id) { |
| if (!IsSupportedKeySystem(key_system)) |
| @@ -194,13 +319,172 @@ WebMediaPlayer::MediaKeyException MediaSourceDelegate::CancelKeyRequest( |
| return WebMediaPlayer::MediaKeyExceptionNoError; |
| } |
| +int KeyHandlingChunkDemuxer::GetDurationMs() { |
| + return chunk_demuxer_->GetDuration() * 1000; |
| +} |
| + |
| +void KeyHandlingChunkDemuxer::Seek(base::TimeDelta time, |
| + const PipelineStatusCB& status_cb) { |
| + chunk_demuxer_->StartWaitingForSeek(); |
| + chunk_demuxer_->Seek(time, status_cb); |
| +} |
| + |
| +void KeyHandlingChunkDemuxer::OnKeyError(const std::string& key_system, |
| + const std::string& session_id, |
| + media::Decryptor::KeyError error_code, |
| + int system_code) { |
| + client_->keyError( |
| + WebString::fromUTF8(key_system), |
| + WebString::fromUTF8(session_id), |
| + static_cast<WebKit::WebMediaPlayerClient::MediaKeyErrorCode>(error_code), |
| + system_code); |
| +} |
| + |
| +void KeyHandlingChunkDemuxer::OnKeyMessage(const std::string& key_system, |
| + const std::string& session_id, |
| + const std::string& message, |
| + const std::string& default_url) { |
| + const GURL default_url_gurl(default_url); |
| + DLOG_IF(WARNING, !default_url.empty() && !default_url_gurl.is_valid()) |
| + << "Invalid URL in default_url: " << default_url; |
| + |
| + client_->keyMessage(WebString::fromUTF8(key_system), |
| + WebString::fromUTF8(session_id), |
| + reinterpret_cast<const uint8*>(message.data()), |
| + message.size(), |
| + default_url_gurl); |
| +} |
| + |
| +void KeyHandlingChunkDemuxer::OnKeyAdded(const std::string& key_system, |
| + const std::string& session_id) { |
| + notify_demuxer_cb_.Run(key_system); |
| + client_->keyAdded(WebString::fromUTF8(key_system), |
| + WebString::fromUTF8(session_id)); |
| +} |
| + |
| +void KeyHandlingChunkDemuxer::OnNeedKey(const std::string& key_system, |
| + const std::string& session_id, |
| + const std::string& type, |
| + scoped_ptr<uint8[]> init_data, |
| + int init_data_size) { |
| + // Do not fire NeedKey event if encrypted media is not enabled. |
| + if (!decryptor_) |
| + return; |
| + |
| + CHECK(init_data_size >= 0); |
| + DCHECK(init_data_type_.empty() || type.empty() || type == init_data_type_); |
| + if (init_data_type_.empty()) |
| + init_data_type_ = type; |
| + |
| + client_->keyNeeded(WebString::fromUTF8(key_system), |
| + WebString::fromUTF8(session_id), |
| + init_data.get(), |
| + init_data_size); |
| +} |
| + |
| +void KeyHandlingChunkDemuxer::OnDecryptorReady(media::Decryptor* decryptor) {} |
| + |
| +void KeyHandlingChunkDemuxer::OnDemuxerOpened() { |
| + media_source_->open(new WebMediaSourceClientImpl( |
| + chunk_demuxer_, base::Bind(&LogMediaSourceError, media_log_))); |
| +} |
| + |
| +} // anonymous namespace |
| + |
| +// MediaSourceDelegate --------------------------------------------------------- |
| + |
| +MediaSourceDelegate::MediaSourceDelegate( |
| + WebMediaPlayerProxyAndroid* proxy, |
| + int player_id, |
| + const UpdateNetworkStateCB& update_network_state_cb) |
| + : weak_this_(this), |
| + proxy_(proxy), |
| + player_id_(player_id), |
| + update_network_state_cb_(update_network_state_cb), |
| + audio_params_(new MediaPlayerHostMsg_ReadFromDemuxerAck_Params), |
| + video_params_(new MediaPlayerHostMsg_ReadFromDemuxerAck_Params), |
| + seeking_(false), |
| + low_latency_mode_(false) { |
| +} |
| + |
| +MediaSourceDelegate::~MediaSourceDelegate() {} |
| + |
| +void MediaSourceDelegate::InitializeMediaSource( |
| + WebKit::WebFrame * frame, |
| + WebKit::WebMediaPlayerClient * client, |
| + WebKit::WebMediaSource* media_source, |
| + media::MediaLog * media_log) { |
| + DCHECK(media_source); |
| + demuxer_.reset(new KeyHandlingChunkDemuxer( |
| + frame, |
| + client, |
| + media_source, |
| + scoped_refptr<media::MediaLog>(media_log), |
| + BIND_TO_RENDER_LOOP(&MediaSourceDelegate::NotifyDemuxerReady))); |
| + demuxer_->Initialize(this, |
| + BIND_TO_RENDER_LOOP(&MediaSourceDelegate::OnDemuxerInitDone)); |
| +} |
| + |
| +void MediaSourceDelegate::InitializeMediaStream(media::Demuxer* demuxer) { |
| + DCHECK(demuxer); |
| + low_latency_mode_ = true; |
| + demuxer_.reset(new KeyHandlingDemuxer(demuxer)); |
| + demuxer_->Initialize(this, |
| + BIND_TO_RENDER_LOOP(&MediaSourceDelegate::OnDemuxerInitDone)); |
| +} |
| + |
| +const WebKit::WebTimeRanges& MediaSourceDelegate::Buffered() { |
| + buffered_web_time_ranges_ = |
| + ConvertToWebTimeRanges(buffered_time_ranges_); |
| + return buffered_web_time_ranges_; |
| +} |
| + |
| +unsigned MediaSourceDelegate::DecodedFrameCount() const { |
| + return statistics_.video_frames_decoded; |
| +} |
| + |
| +unsigned MediaSourceDelegate::DroppedFrameCount() const { |
| + return statistics_.video_frames_dropped; |
| +} |
| + |
| +unsigned MediaSourceDelegate::AudioDecodedByteCount() const { |
| + return statistics_.audio_bytes_decoded;; |
| +} |
| + |
| +unsigned MediaSourceDelegate::VideoDecodedByteCount() const { |
| + return statistics_.video_bytes_decoded; |
| +} |
| + |
| +WebMediaPlayer::MediaKeyException MediaSourceDelegate::GenerateKeyRequest( |
| + const WebString& key_system, |
| + const unsigned char* init_data, |
| + unsigned init_data_length) { |
| + return demuxer_->GenerateKeyRequest(key_system, init_data, init_data_length); |
| +} |
| + |
| +WebMediaPlayer::MediaKeyException MediaSourceDelegate::AddKey( |
| + const WebString& key_system, |
| + const unsigned char* key, |
| + unsigned key_length, |
| + const unsigned char* init_data, |
| + unsigned init_data_length, |
| + const WebString& session_id) { |
| + return demuxer_->AddKey( |
| + key_system, key, key_length, init_data, init_data_length, session_id); |
| +} |
| + |
| +WebMediaPlayer::MediaKeyException MediaSourceDelegate::CancelKeyRequest( |
| + const WebString& key_system, |
| + const WebString& session_id) { |
| + return demuxer_->CancelKeyRequest(key_system, session_id); |
| +} |
| + |
| void MediaSourceDelegate::Seek(base::TimeDelta time) { |
| seeking_ = true; |
| - DCHECK(chunk_demuxer_); |
| - if (!chunk_demuxer_) |
| + DCHECK(demuxer_); |
| + if (!demuxer_) |
| return; |
| - chunk_demuxer_->StartWaitingForSeek(); |
| - chunk_demuxer_->Seek(time, |
| + demuxer_->Seek(time, |
| BIND_TO_RENDER_LOOP(&MediaSourceDelegate::OnDemuxerError)); |
| } |
| @@ -228,11 +512,16 @@ void MediaSourceDelegate::OnReadFromDemuxer(media::DemuxerStream::Type type, |
| seeking_ = false; |
| DCHECK(type == DemuxerStream::AUDIO || type == DemuxerStream::VIDEO); |
| + |
| + // When in low latency mode, don't wait to accumulate multiple packets per IPC |
| + // communication. |
| + int access_unit_size = low_latency_mode_ ? 1 : kAccessUnitSize; |
| + |
| MediaPlayerHostMsg_ReadFromDemuxerAck_Params* params = |
| type == DemuxerStream::AUDIO ? audio_params_.get() : video_params_.get(); |
| params->type = type; |
| - params->access_units.resize(kAccessUnitSize); |
| - DemuxerStream* stream = chunk_demuxer_->GetStream(type); |
| + params->access_units.resize(access_unit_size); |
| + DemuxerStream* stream = demuxer_->GetStream(type); |
| DCHECK(stream != NULL); |
| ReadFromDemuxerStream(stream, params, 0); |
| } |
| @@ -350,7 +639,7 @@ void MediaSourceDelegate::OnDemuxerInitDone( |
| void MediaSourceDelegate::NotifyDemuxerReady( |
| const std::string& key_system) { |
| MediaPlayerHostMsg_DemuxerReady_Params params; |
| - DemuxerStream* audio_stream = chunk_demuxer_->GetStream(DemuxerStream::AUDIO); |
| + DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
| if (audio_stream) { |
| const media::AudioDecoderConfig& config = |
| audio_stream->audio_decoder_config(); |
| @@ -360,7 +649,7 @@ void MediaSourceDelegate::NotifyDemuxerReady( |
| params.audio_sampling_rate = config.samples_per_second(); |
| params.is_audio_encrypted = config.is_encrypted(); |
| } |
| - DemuxerStream* video_stream = chunk_demuxer_->GetStream(DemuxerStream::VIDEO); |
| + DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
| if (video_stream) { |
| const media::VideoDecoderConfig& config = |
| video_stream->video_decoder_config(); |
| @@ -368,8 +657,7 @@ void MediaSourceDelegate::NotifyDemuxerReady( |
| params.video_size = config.natural_size(); |
| params.is_video_encrypted = config.is_encrypted(); |
| } |
| - double duration_ms = chunk_demuxer_->GetDuration() * 1000; |
| - DCHECK(duration_ms >= 0); |
| + double duration_ms = demuxer_->GetDurationMs(); |
| if (duration_ms > std::numeric_limits<int>::max()) |
| duration_ms = std::numeric_limits<int>::max(); |
|
Ami GONE FROM CHROMIUM
2013/04/29 22:11:09
This seems pretty fishy.
wonsik
2013/05/01 14:15:38
Oops. Moved to the right place.
|
| params.duration_ms = duration_ms; |
| @@ -381,64 +669,4 @@ void MediaSourceDelegate::NotifyDemuxerReady( |
| proxy_->DemuxerReady(player_id_, params); |
| } |
| -void MediaSourceDelegate::OnDemuxerOpened() { |
| - media_source_->open(new WebMediaSourceClientImpl( |
| - chunk_demuxer_.get(), base::Bind(&LogMediaSourceError, media_log_))); |
| -} |
| - |
| -void MediaSourceDelegate::OnKeyError(const std::string& key_system, |
| - const std::string& session_id, |
| - media::Decryptor::KeyError error_code, |
| - int system_code) { |
| - client_->keyError( |
| - WebString::fromUTF8(key_system), |
| - WebString::fromUTF8(session_id), |
| - static_cast<WebKit::WebMediaPlayerClient::MediaKeyErrorCode>(error_code), |
| - system_code); |
| -} |
| - |
| -void MediaSourceDelegate::OnKeyMessage(const std::string& key_system, |
| - const std::string& session_id, |
| - const std::string& message, |
| - const std::string& default_url) { |
| - const GURL default_url_gurl(default_url); |
| - DLOG_IF(WARNING, !default_url.empty() && !default_url_gurl.is_valid()) |
| - << "Invalid URL in default_url: " << default_url; |
| - |
| - client_->keyMessage(WebString::fromUTF8(key_system), |
| - WebString::fromUTF8(session_id), |
| - reinterpret_cast<const uint8*>(message.data()), |
| - message.size(), |
| - default_url_gurl); |
| -} |
| - |
| -void MediaSourceDelegate::OnKeyAdded(const std::string& key_system, |
| - const std::string& session_id) { |
| - NotifyDemuxerReady(key_system); |
| - client_->keyAdded(WebString::fromUTF8(key_system), |
| - WebString::fromUTF8(session_id)); |
| -} |
| - |
| -void MediaSourceDelegate::OnNeedKey(const std::string& key_system, |
| - const std::string& session_id, |
| - const std::string& type, |
| - scoped_ptr<uint8[]> init_data, |
| - int init_data_size) { |
| - // Do not fire NeedKey event if encrypted media is not enabled. |
| - if (!decryptor_) |
| - return; |
| - |
| - CHECK(init_data_size >= 0); |
| - DCHECK(init_data_type_.empty() || type.empty() || type == init_data_type_); |
| - if (init_data_type_.empty()) |
| - init_data_type_ = type; |
| - |
| - client_->keyNeeded(WebString::fromUTF8(key_system), |
| - WebString::fromUTF8(session_id), |
| - init_data.get(), |
| - init_data_size); |
| -} |
| - |
| -void MediaSourceDelegate::OnDecryptorReady(media::Decryptor* decryptor) {} |
| - |
| } // namespace webkit_media |