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..1319fe9198b0877a56cf45eff3d07ed2831d2888 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), |
+ can_start_decrypt_(false), |
access_unit_size_(0) { |
} |
@@ -331,7 +332,7 @@ void MediaSourceDelegate::OnDemuxerInitDone( |
OnDemuxerError(status); |
return; |
} |
- NotifyDemuxerReady(""); |
+ NotifyDemuxerReady(); |
xhwang
2013/06/20 17:30:50
It appears that we NotifyDemuxerReady() multiple t
kjyoun
2013/06/21 00:05:39
Done.
|
} |
void MediaSourceDelegate::OnDemuxerStopDone() { |
@@ -341,11 +342,35 @@ void MediaSourceDelegate::OnDemuxerStopDone() { |
} |
void MediaSourceDelegate::OnMediaConfigRequest() { |
- NotifyDemuxerReady(""); |
+ NotifyDemuxerReady(); |
+} |
+ |
+void MediaSourceDelegate::NotifyKeyAdded( |
+ const std::string& key_system, |
+ const std::string& session_id) { |
+ // TODO(kjyoun): Change this logic to call NotifyDemuxerReady() when |
+ // keys for both of audio and video are loaded, if both are encrypted. |
+ // Currently, we notifies when the first key is loaded. |
+ if (!can_start_decrypt_) { |
+ can_start_decrypt_ = true; |
+ NotifyDemuxerReady(key_system); |
+ } |
+} |
+ |
+bool MediaSourceDelegate::CanNotifyDemuxerReady() { |
+ if (can_start_decrypt_) |
+ 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) { |
- if (!demuxer_) |
+ if (!demuxer_ || !CanNotifyDemuxerReady()) |
xhwang
2013/06/20 17:30:50
I prefer DCHECK to "if". Can |demuxer| be NULL her
kjyoun
2013/06/21 00:05:39
Done.
|
return; |
MediaPlayerHostMsg_DemuxerReady_Params params; |
DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
@@ -373,9 +398,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); |
} |