OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "ppapi/proxy/ppb_video_capture_proxy.h" | 5 #include "ppapi/proxy/ppb_video_capture_proxy.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 IPC_END_MESSAGE_MAP() | 366 IPC_END_MESSAGE_MAP() |
367 // TODO(brettw) handle bad messages! | 367 // TODO(brettw) handle bad messages! |
368 return handled; | 368 return handled; |
369 } | 369 } |
370 | 370 |
371 void PPP_VideoCapture_Proxy::OnMsgOnDeviceInfo( | 371 void PPP_VideoCapture_Proxy::OnMsgOnDeviceInfo( |
372 const HostResource& host_resource, | 372 const HostResource& host_resource, |
373 const PP_VideoCaptureDeviceInfo_Dev& info, | 373 const PP_VideoCaptureDeviceInfo_Dev& info, |
374 const std::vector<PPPVideoCapture_Buffer>& buffers) { | 374 const std::vector<PPPVideoCapture_Buffer>& buffers) { |
375 EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource); | 375 EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource); |
376 if (enter.failed() || !ppp_video_capture_impl_) | 376 PluginResourceTracker* tracker = PluginResourceTracker::GetInstance(); |
| 377 PP_Resource resource = tracker->PluginResourceForHostResource(host_resource); |
| 378 if (!resource || !ppp_video_capture_impl_ || enter.failed()) |
377 return; | 379 return; |
378 | 380 |
379 PluginResourceTracker* tracker = | |
380 PluginGlobals::Get()->plugin_resource_tracker(); | |
381 scoped_array<PP_Resource> resources(new PP_Resource[buffers.size()]); | 381 scoped_array<PP_Resource> resources(new PP_Resource[buffers.size()]); |
382 for (size_t i = 0; i < buffers.size(); ++i) { | 382 for (size_t i = 0; i < buffers.size(); ++i) { |
383 // We assume that the browser created a new set of resources. | 383 // We assume that the browser created a new set of resources. |
384 DCHECK(!tracker->PluginResourceForHostResource(buffers[i].resource)); | 384 DCHECK(!tracker->PluginResourceForHostResource(buffers[i].resource)); |
385 resources[i] = PPB_Buffer_Proxy::AddProxyResource(buffers[i].resource, | 385 resources[i] = PPB_Buffer_Proxy::AddProxyResource(buffers[i].resource, |
386 buffers[i].handle, | 386 buffers[i].handle, |
387 buffers[i].size); | 387 buffers[i].size); |
388 } | 388 } |
389 | 389 static_cast<VideoCapture*>(enter.object())->SetBufferCount(buffers.size()); |
390 VideoCapture* capture = static_cast<VideoCapture*>(enter.object()); | |
391 capture->SetBufferCount(buffers.size()); | |
392 ppp_video_capture_impl_->OnDeviceInfo( | 390 ppp_video_capture_impl_->OnDeviceInfo( |
393 host_resource.instance(), | 391 host_resource.instance(), |
394 capture->pp_resource(), | 392 resource, |
395 &info, | 393 &info, |
396 buffers.size(), | 394 buffers.size(), |
397 resources.get()); | 395 resources.get()); |
398 for (size_t i = 0; i < buffers.size(); ++i) | 396 for (size_t i = 0; i < buffers.size(); ++i) |
399 tracker->ReleaseResource(resources[i]); | 397 tracker->ReleaseResource(resources[i]); |
400 } | 398 } |
401 | 399 |
402 void PPP_VideoCapture_Proxy::OnMsgOnStatus(const HostResource& host_resource, | 400 void PPP_VideoCapture_Proxy::OnMsgOnStatus(const HostResource& host_resource, |
403 uint32_t status) { | 401 uint32_t status) { |
404 EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource); | 402 EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource); |
405 if (enter.failed() || !ppp_video_capture_impl_) | 403 PluginResourceTracker* tracker = PluginResourceTracker::GetInstance(); |
| 404 PP_Resource resource = tracker->PluginResourceForHostResource(host_resource); |
| 405 if (!resource || !ppp_video_capture_impl_ || enter.failed()) |
406 return; | 406 return; |
407 | 407 |
408 VideoCapture* capture = static_cast<VideoCapture*>(enter.object()); | 408 if (!static_cast<VideoCapture*>(enter.object())->OnStatus(status)) |
409 if (!capture->OnStatus(status)) | |
410 return; | 409 return; |
411 ppp_video_capture_impl_->OnStatus( | 410 ppp_video_capture_impl_->OnStatus( |
412 host_resource.instance(), capture->pp_resource(), status); | 411 host_resource.instance(), resource, status); |
413 } | 412 } |
414 | 413 |
415 void PPP_VideoCapture_Proxy::OnMsgOnError(const HostResource& host_resource, | 414 void PPP_VideoCapture_Proxy::OnMsgOnError(const HostResource& host_resource, |
416 uint32_t error_code) { | 415 uint32_t error_code) { |
417 EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource); | 416 EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource); |
418 if (enter.failed() || !ppp_video_capture_impl_) | 417 PluginResourceTracker* tracker = PluginResourceTracker::GetInstance(); |
| 418 PP_Resource resource = tracker->PluginResourceForHostResource(host_resource); |
| 419 if (!resource || !ppp_video_capture_impl_ || enter.failed()) |
419 return; | 420 return; |
420 | 421 static_cast<VideoCapture*>(enter.object())->set_status( |
421 VideoCapture* capture = static_cast<VideoCapture*>(enter.object()); | 422 PP_VIDEO_CAPTURE_STATUS_STOPPED); |
422 capture->set_status(PP_VIDEO_CAPTURE_STATUS_STOPPED); | |
423 ppp_video_capture_impl_->OnError( | 423 ppp_video_capture_impl_->OnError( |
424 host_resource.instance(), capture->pp_resource(), error_code); | 424 host_resource.instance(), resource, error_code); |
425 } | 425 } |
426 | 426 |
427 void PPP_VideoCapture_Proxy::OnMsgOnBufferReady( | 427 void PPP_VideoCapture_Proxy::OnMsgOnBufferReady( |
428 const HostResource& host_resource, uint32_t buffer) { | 428 const HostResource& host_resource, uint32_t buffer) { |
429 EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource); | 429 EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource); |
430 if (enter.failed() || !ppp_video_capture_impl_) | 430 PluginResourceTracker* tracker = PluginResourceTracker::GetInstance(); |
| 431 PP_Resource resource = tracker->PluginResourceForHostResource(host_resource); |
| 432 if (!resource || !ppp_video_capture_impl_ || enter.failed()) |
431 return; | 433 return; |
432 | 434 static_cast<VideoCapture*>(enter.object())->SetBufferInUse(buffer); |
433 VideoCapture* capture = static_cast<VideoCapture*>(enter.object()); | |
434 capture->SetBufferInUse(buffer); | |
435 ppp_video_capture_impl_->OnBufferReady( | 435 ppp_video_capture_impl_->OnBufferReady( |
436 host_resource.instance(), capture->pp_resource(), buffer); | 436 host_resource.instance(), resource, buffer); |
437 } | 437 } |
438 | 438 |
439 } // namespace proxy | 439 } // namespace proxy |
440 } // namespace ppapi | 440 } // namespace ppapi |
OLD | NEW |