OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/renderer/pepper_plugin_delegate_impl.h" | 5 #include "chrome/renderer/pepper_plugin_delegate_impl.h" |
6 | 6 |
7 #include "app/surface/transport_dib.h" | 7 #include "app/surface/transport_dib.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/scoped_ptr.h" | 9 #include "base/scoped_ptr.h" |
10 #include "chrome/common/render_messages.h" | 10 #include "chrome/common/render_messages.h" |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 // Make sure we don't call shutdown more than once. | 150 // Make sure we don't call shutdown more than once. |
151 if (!stream_id_) { | 151 if (!stream_id_) { |
152 return; | 152 return; |
153 } | 153 } |
154 filter_->Send(new ViewHostMsg_CloseAudioStream(0, stream_id_)); | 154 filter_->Send(new ViewHostMsg_CloseAudioStream(0, stream_id_)); |
155 filter_->RemoveDelegate(stream_id_); | 155 filter_->RemoveDelegate(stream_id_); |
156 stream_id_ = 0; | 156 stream_id_ = 0; |
157 client_ = NULL; | 157 client_ = NULL; |
158 } | 158 } |
159 | 159 |
| 160 // Implements the VideoDecoder. |
| 161 class PlatformVideoDecoderImpl |
| 162 : public pepper::PluginDelegate::PlatformVideoDecoder { |
| 163 public: |
| 164 PlatformVideoDecoderImpl() |
| 165 : input_buffer_size_(0), |
| 166 next_dib_id_(0), |
| 167 dib_(NULL) { |
| 168 memset(&flush_callback_, 0, sizeof(flush_callback_)); |
| 169 } |
| 170 |
| 171 virtual bool Init(const PP_VideoDecoderConfig& decoder_config) { |
| 172 decoder_config_ = decoder_config; |
| 173 input_buffer_size_ = 1024 << 4; |
| 174 |
| 175 // Allocate the transport DIB. |
| 176 TransportDIB* dib = TransportDIB::Create(input_buffer_size_, |
| 177 next_dib_id_++); |
| 178 if (!dib) |
| 179 return false; |
| 180 |
| 181 // TODO(wjia): Create video decoder in GPU process. |
| 182 |
| 183 return true; |
| 184 } |
| 185 |
| 186 virtual bool Decode(PP_VideoCompressedDataBuffer& input_buffer) { |
| 187 // TODO(wjia): Implement me! |
| 188 NOTIMPLEMENTED(); |
| 189 |
| 190 input_buffers_.push(&input_buffer); |
| 191 |
| 192 // Copy input data to dib_ and send it to GPU video decoder. |
| 193 |
| 194 return false; |
| 195 } |
| 196 |
| 197 virtual int32_t Flush(PP_CompletionCallback& callback) { |
| 198 // TODO(wjia): Implement me! |
| 199 NOTIMPLEMENTED(); |
| 200 |
| 201 // Do nothing if there is a flush pending. |
| 202 if (flush_callback_.func) |
| 203 return PP_ERROR_BADARGUMENT; |
| 204 |
| 205 flush_callback_ = callback; |
| 206 |
| 207 // Call GPU video decoder to flush. |
| 208 |
| 209 return PP_ERROR_WOULDBLOCK; |
| 210 } |
| 211 |
| 212 virtual bool ReturnUncompressedDataBuffer( |
| 213 PP_VideoUncompressedDataBuffer& buffer) { |
| 214 // TODO(wjia): Implement me! |
| 215 NOTIMPLEMENTED(); |
| 216 |
| 217 // Deliver the buffer to GPU video decoder. |
| 218 |
| 219 return false; |
| 220 } |
| 221 |
| 222 void OnFlushDone() { |
| 223 if (!flush_callback_.func) |
| 224 return; |
| 225 |
| 226 flush_callback_.func(flush_callback_.user_data, PP_OK); |
| 227 flush_callback_.func = NULL; |
| 228 } |
| 229 |
| 230 virtual intptr_t GetSharedMemoryHandle() const { |
| 231 return reinterpret_cast<intptr_t>(dib_.get()); |
| 232 } |
| 233 |
| 234 private: |
| 235 size_t input_buffer_size_; |
| 236 int next_dib_id_; |
| 237 scoped_ptr<TransportDIB> dib_; |
| 238 PP_VideoDecoderConfig decoder_config_; |
| 239 std::queue<PP_VideoCompressedDataBuffer*> input_buffers_; |
| 240 PP_CompletionCallback flush_callback_; |
| 241 |
| 242 DISALLOW_COPY_AND_ASSIGN(PlatformVideoDecoderImpl); |
| 243 }; |
| 244 |
160 } // namespace | 245 } // namespace |
161 | 246 |
162 PepperPluginDelegateImpl::PepperPluginDelegateImpl(RenderView* render_view) | 247 PepperPluginDelegateImpl::PepperPluginDelegateImpl(RenderView* render_view) |
163 : render_view_(render_view) { | 248 : render_view_(render_view) { |
164 } | 249 } |
165 | 250 |
166 void PepperPluginDelegateImpl::ViewInitiatedPaint() { | 251 void PepperPluginDelegateImpl::ViewInitiatedPaint() { |
167 // Notify all of our instances that we started painting. This is used for | 252 // Notify all of our instances that we started painting. This is used for |
168 // internal bookkeeping only, so we know that the set can not change under | 253 // internal bookkeeping only, so we know that the set can not change under |
169 // us. | 254 // us. |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 #else | 326 #else |
242 static int next_dib_id = 0; | 327 static int next_dib_id = 0; |
243 TransportDIB* dib = TransportDIB::Create(buffer_size, next_dib_id++); | 328 TransportDIB* dib = TransportDIB::Create(buffer_size, next_dib_id++); |
244 if (!dib) | 329 if (!dib) |
245 return NULL; | 330 return NULL; |
246 #endif | 331 #endif |
247 | 332 |
248 return new PlatformImage2DImpl(width, height, dib); | 333 return new PlatformImage2DImpl(width, height, dib); |
249 } | 334 } |
250 | 335 |
| 336 pepper::PluginDelegate::PlatformVideoDecoder* |
| 337 PepperPluginDelegateImpl::CreateVideoDecoder( |
| 338 const PP_VideoDecoderConfig& decoder_config) { |
| 339 scoped_ptr<PlatformVideoDecoderImpl> decoder(new PlatformVideoDecoderImpl()); |
| 340 |
| 341 if (!decoder->Init(decoder_config)) |
| 342 return NULL; |
| 343 |
| 344 return decoder.release(); |
| 345 } |
| 346 |
251 void PepperPluginDelegateImpl::DidChangeNumberOfFindResults(int identifier, | 347 void PepperPluginDelegateImpl::DidChangeNumberOfFindResults(int identifier, |
252 int total, | 348 int total, |
253 bool final_result) { | 349 bool final_result) { |
254 if (total == 0) { | 350 if (total == 0) { |
255 render_view_->ReportNoFindInPageResults(identifier); | 351 render_view_->ReportNoFindInPageResults(identifier); |
256 } else { | 352 } else { |
257 render_view_->reportFindInPageMatchCount(identifier, total, final_result); | 353 render_view_->reportFindInPageMatchCount(identifier, total, final_result); |
258 } | 354 } |
259 } | 355 } |
260 | 356 |
(...skipping 13 matching lines...) Expand all Loading... |
274 } else { | 370 } else { |
275 return NULL; | 371 return NULL; |
276 } | 372 } |
277 } | 373 } |
278 | 374 |
279 bool PepperPluginDelegateImpl::RunFileChooser( | 375 bool PepperPluginDelegateImpl::RunFileChooser( |
280 const WebKit::WebFileChooserParams& params, | 376 const WebKit::WebFileChooserParams& params, |
281 WebKit::WebFileChooserCompletion* chooser_completion) { | 377 WebKit::WebFileChooserCompletion* chooser_completion) { |
282 return render_view_->runFileChooser(params, chooser_completion); | 378 return render_view_->runFileChooser(params, chooser_completion); |
283 } | 379 } |
OLD | NEW |