Index: webkit/renderer/media/android/media_source_delegate.cc |
diff --git a/webkit/renderer/media/android/media_source_delegate.cc b/webkit/renderer/media/android/media_source_delegate.cc |
index ada609c293b811a55491c6a289b3d5d1ab8b7d58..f428b124727aaaf3b148a5e5148d8f199d34e29b 100644 |
--- a/webkit/renderer/media/android/media_source_delegate.cc |
+++ b/webkit/renderer/media/android/media_source_delegate.cc |
@@ -69,6 +69,7 @@ MediaSourceDelegate::MediaSourceDelegate(WebMediaPlayerProxyAndroid* proxy, |
audio_params_(new MediaPlayerHostMsg_ReadFromDemuxerAck_Params), |
video_params_(new MediaPlayerHostMsg_ReadFromDemuxerAck_Params), |
seeking_(false), |
+ key_added_(false), |
access_unit_size_(0) { |
} |
@@ -331,7 +332,8 @@ void MediaSourceDelegate::OnDemuxerInitDone( |
OnDemuxerError(status); |
return; |
} |
- NotifyDemuxerReady(""); |
+ if (CanNotifyDemuxerReady()) |
+ NotifyDemuxerReady(""); |
} |
void MediaSourceDelegate::OnDemuxerStopDone() { |
@@ -341,12 +343,34 @@ void MediaSourceDelegate::OnDemuxerStopDone() { |
} |
void MediaSourceDelegate::OnMediaConfigRequest() { |
- NotifyDemuxerReady(""); |
+ if (CanNotifyDemuxerReady()) |
+ NotifyDemuxerReady(""); |
} |
-void MediaSourceDelegate::NotifyDemuxerReady(const std::string& key_system) { |
- if (!demuxer_) |
+void MediaSourceDelegate::NotifyKeyAdded(const std::string& key_system) { |
+ // TODO(kjyoun): Enhance logic to detect when to call NotifyDemuxerReady() |
+ // For now, we calls it when the first key is added. |
+ if (key_added_) |
return; |
+ key_added_ = true; |
+ if (CanNotifyDemuxerReady()) |
+ NotifyDemuxerReady(key_system); |
+} |
+ |
+bool MediaSourceDelegate::CanNotifyDemuxerReady() { |
+ if (key_added_) |
+ return true; |
+ DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
+ if (audio_stream && audio_stream->audio_decoder_config().is_encrypted()) |
+ return false; |
+ DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
+ if (video_stream && video_stream->video_decoder_config().is_encrypted()) |
+ return false; |
+ return true; |
+} |
+ |
+void MediaSourceDelegate::NotifyDemuxerReady(const std::string& key_system) { |
+ DCHECK(demuxer_); |
MediaPlayerHostMsg_DemuxerReady_Params params; |
DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
if (audio_stream) { |
@@ -373,9 +397,7 @@ void MediaSourceDelegate::NotifyDemuxerReady(const std::string& key_system) { |
params.duration_ms = GetDurationMs(); |
params.key_system = key_system; |
- bool ready_to_send = (!params.is_audio_encrypted && |
- !params.is_video_encrypted) || !key_system.empty(); |
- if (proxy_ && ready_to_send) |
+ if (proxy_) |
proxy_->DemuxerReady(player_id_, params); |
} |