| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "webkit/media/webmediaplayer_proxy.h" | 5 #include "webkit/media/webmediaplayer_proxy.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/message_loop_proxy.h" | 9 #include "base/message_loop_proxy.h" |
| 10 #include "media/base/pipeline_status.h" | 10 #include "media/base/pipeline_status.h" |
| 11 #include "media/filters/chunk_demuxer.h" | |
| 12 #include "media/filters/video_renderer_base.h" | 11 #include "media/filters/video_renderer_base.h" |
| 13 #include "webkit/media/webmediaplayer_impl.h" | 12 #include "webkit/media/webmediaplayer_impl.h" |
| 14 | 13 |
| 15 using media::PipelineStatus; | 14 using media::PipelineStatus; |
| 16 | 15 |
| 17 namespace webkit_media { | 16 namespace webkit_media { |
| 18 | 17 |
| 19 // Limits the maximum outstanding repaints posted on render thread. | 18 // Limits the maximum outstanding repaints posted on render thread. |
| 20 // This number of 50 is a guess, it does not take too much memory on the task | 19 // This number of 50 is a guess, it does not take too much memory on the task |
| 21 // queue but gives up a pretty good latency on repaint. | 20 // queue but gives up a pretty good latency on repaint. |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 if (frame_provider_) | 100 if (frame_provider_) |
| 102 frame_provider_->GetCurrentFrame(frame_out); | 101 frame_provider_->GetCurrentFrame(frame_out); |
| 103 } | 102 } |
| 104 | 103 |
| 105 void WebMediaPlayerProxy::PutCurrentFrame( | 104 void WebMediaPlayerProxy::PutCurrentFrame( |
| 106 scoped_refptr<media::VideoFrame> frame) { | 105 scoped_refptr<media::VideoFrame> frame) { |
| 107 if (frame_provider_) | 106 if (frame_provider_) |
| 108 frame_provider_->PutCurrentFrame(frame); | 107 frame_provider_->PutCurrentFrame(frame); |
| 109 } | 108 } |
| 110 | 109 |
| 111 void WebMediaPlayerProxy::DemuxerOpened(media::ChunkDemuxer* demuxer) { | |
| 112 render_loop_->PostTask(FROM_HERE, base::Bind( | |
| 113 &WebMediaPlayerProxy::DemuxerOpenedTask, this, | |
| 114 scoped_refptr<media::ChunkDemuxer>(demuxer))); | |
| 115 } | |
| 116 | |
| 117 void WebMediaPlayerProxy::DemuxerClosed() { | |
| 118 render_loop_->PostTask(FROM_HERE, base::Bind( | |
| 119 &WebMediaPlayerProxy::DemuxerClosedTask, this)); | |
| 120 } | |
| 121 | |
| 122 void WebMediaPlayerProxy::DemuxerNeedKey(scoped_array<uint8> init_data, | |
| 123 int init_data_size) { | |
| 124 render_loop_->PostTask(FROM_HERE, base::Bind( | |
| 125 &WebMediaPlayerProxy::NeedKeyTask, this, "", "", | |
| 126 base::Passed(&init_data), init_data_size)); | |
| 127 } | |
| 128 | |
| 129 void WebMediaPlayerProxy::DemuxerStartWaitingForSeek() { | |
| 130 if (chunk_demuxer_.get()) | |
| 131 chunk_demuxer_->StartWaitingForSeek(); | |
| 132 } | |
| 133 | |
| 134 void WebMediaPlayerProxy::DemuxerCancelPendingSeek() { | |
| 135 if (chunk_demuxer_.get()) | |
| 136 chunk_demuxer_->CancelPendingSeek(); | |
| 137 } | |
| 138 | |
| 139 media::ChunkDemuxer::Status WebMediaPlayerProxy::DemuxerAddId( | |
| 140 const std::string& id, | |
| 141 const std::string& type, | |
| 142 std::vector<std::string>& codecs) { | |
| 143 return chunk_demuxer_->AddId(id, type, codecs); | |
| 144 } | |
| 145 | |
| 146 bool WebMediaPlayerProxy::DemuxerSetTimestampOffset( | |
| 147 const std::string& id, base::TimeDelta offset) { | |
| 148 return chunk_demuxer_->SetTimestampOffset(id, offset); | |
| 149 } | |
| 150 | |
| 151 void WebMediaPlayerProxy::DemuxerRemoveId(const std::string& id) { | |
| 152 chunk_demuxer_->RemoveId(id); | |
| 153 } | |
| 154 | |
| 155 media::Ranges<base::TimeDelta> WebMediaPlayerProxy::DemuxerBufferedRange( | |
| 156 const std::string& id) { | |
| 157 return chunk_demuxer_->GetBufferedRanges(id); | |
| 158 } | |
| 159 | |
| 160 bool WebMediaPlayerProxy::DemuxerAppend(const std::string& id, | |
| 161 const uint8* data, | |
| 162 size_t length) { | |
| 163 return chunk_demuxer_->AppendData(id, data, length); | |
| 164 } | |
| 165 | |
| 166 void WebMediaPlayerProxy::DemuxerAbort(const std::string& id) { | |
| 167 chunk_demuxer_->Abort(id); | |
| 168 } | |
| 169 | |
| 170 void WebMediaPlayerProxy::DemuxerSetDuration(base::TimeDelta duration) { | |
| 171 chunk_demuxer_->SetDuration(duration); | |
| 172 } | |
| 173 | |
| 174 void WebMediaPlayerProxy::DemuxerEndOfStream(media::PipelineStatus status) { | |
| 175 chunk_demuxer_->EndOfStream(status); | |
| 176 } | |
| 177 | |
| 178 void WebMediaPlayerProxy::DemuxerShutdown() { | |
| 179 if (chunk_demuxer_.get()) | |
| 180 chunk_demuxer_->Shutdown(); | |
| 181 } | |
| 182 | |
| 183 void WebMediaPlayerProxy::DemuxerOpenedTask( | |
| 184 const scoped_refptr<media::ChunkDemuxer>& demuxer) { | |
| 185 DCHECK(render_loop_->BelongsToCurrentThread()); | |
| 186 chunk_demuxer_ = demuxer; | |
| 187 if (webmediaplayer_) | |
| 188 webmediaplayer_->OnDemuxerOpened(); | |
| 189 } | |
| 190 | |
| 191 void WebMediaPlayerProxy::DemuxerClosedTask() { | |
| 192 chunk_demuxer_ = NULL; | |
| 193 } | |
| 194 | 110 |
| 195 void WebMediaPlayerProxy::KeyAdded(const std::string& key_system, | 111 void WebMediaPlayerProxy::KeyAdded(const std::string& key_system, |
| 196 const std::string& session_id) { | 112 const std::string& session_id) { |
| 197 render_loop_->PostTask(FROM_HERE, base::Bind( | 113 render_loop_->PostTask(FROM_HERE, base::Bind( |
| 198 &WebMediaPlayerProxy::KeyAddedTask, this, key_system, session_id)); | 114 &WebMediaPlayerProxy::KeyAddedTask, this, key_system, session_id)); |
| 199 } | 115 } |
| 200 | 116 |
| 201 void WebMediaPlayerProxy::KeyError(const std::string& key_system, | 117 void WebMediaPlayerProxy::KeyError(const std::string& key_system, |
| 202 const std::string& session_id, | 118 const std::string& session_id, |
| 203 media::Decryptor::KeyError error_code, | 119 media::Decryptor::KeyError error_code, |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 const std::string& session_id, | 174 const std::string& session_id, |
| 259 scoped_array<uint8> init_data, | 175 scoped_array<uint8> init_data, |
| 260 int init_data_size) { | 176 int init_data_size) { |
| 261 DCHECK(render_loop_->BelongsToCurrentThread()); | 177 DCHECK(render_loop_->BelongsToCurrentThread()); |
| 262 if (webmediaplayer_) | 178 if (webmediaplayer_) |
| 263 webmediaplayer_->OnNeedKey(key_system, session_id, | 179 webmediaplayer_->OnNeedKey(key_system, session_id, |
| 264 init_data.Pass(), init_data_size); | 180 init_data.Pass(), init_data_size); |
| 265 } | 181 } |
| 266 | 182 |
| 267 } // namespace webkit_media | 183 } // namespace webkit_media |
| OLD | NEW |