| 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 "content/browser/renderer_host/media/video_capture_controller.h" | 5 #include "content/browser/renderer_host/media/video_capture_controller.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 const base::WeakPtr<VideoCaptureController>& controller, | 105 const base::WeakPtr<VideoCaptureController>& controller, |
| 106 const scoped_refptr<VideoCaptureBufferPool>& buffer_pool); | 106 const scoped_refptr<VideoCaptureBufferPool>& buffer_pool); |
| 107 virtual ~VideoCaptureDeviceClient(); | 107 virtual ~VideoCaptureDeviceClient(); |
| 108 | 108 |
| 109 // VideoCaptureDevice::Client implementation. | 109 // VideoCaptureDevice::Client implementation. |
| 110 virtual scoped_refptr<Buffer> ReserveOutputBuffer( | 110 virtual scoped_refptr<Buffer> ReserveOutputBuffer( |
| 111 media::VideoFrame::Format format, | 111 media::VideoFrame::Format format, |
| 112 const gfx::Size& size) OVERRIDE; | 112 const gfx::Size& size) OVERRIDE; |
| 113 virtual void OnIncomingCapturedFrame(const uint8* data, | 113 virtual void OnIncomingCapturedFrame(const uint8* data, |
| 114 int length, | 114 int length, |
| 115 base::Time timestamp, | 115 base::TimeTicks timestamp, |
| 116 int rotation, | 116 int rotation, |
| 117 const VideoCaptureFormat& frame_format) | 117 const VideoCaptureFormat& frame_format) |
| 118 OVERRIDE; | 118 OVERRIDE; |
| 119 virtual void OnIncomingCapturedBuffer(const scoped_refptr<Buffer>& buffer, | 119 virtual void OnIncomingCapturedBuffer(const scoped_refptr<Buffer>& buffer, |
| 120 media::VideoFrame::Format format, | 120 media::VideoFrame::Format format, |
| 121 const gfx::Size& dimensions, | 121 const gfx::Size& dimensions, |
| 122 base::Time timestamp, | 122 base::TimeTicks timestamp, |
| 123 int frame_rate) OVERRIDE; | 123 int frame_rate) OVERRIDE; |
| 124 virtual void OnError() OVERRIDE; | 124 virtual void OnError() OVERRIDE; |
| 125 | 125 |
| 126 private: | 126 private: |
| 127 scoped_refptr<Buffer> DoReserveOutputBuffer(media::VideoFrame::Format format, | 127 scoped_refptr<Buffer> DoReserveOutputBuffer(media::VideoFrame::Format format, |
| 128 const gfx::Size& dimensions); | 128 const gfx::Size& dimensions); |
| 129 | 129 |
| 130 // The controller to which we post events. | 130 // The controller to which we post events. |
| 131 const base::WeakPtr<VideoCaptureController> controller_; | 131 const base::WeakPtr<VideoCaptureController> controller_; |
| 132 | 132 |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> | 260 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> |
| 261 VideoCaptureController::VideoCaptureDeviceClient::ReserveOutputBuffer( | 261 VideoCaptureController::VideoCaptureDeviceClient::ReserveOutputBuffer( |
| 262 media::VideoFrame::Format format, | 262 media::VideoFrame::Format format, |
| 263 const gfx::Size& size) { | 263 const gfx::Size& size) { |
| 264 return DoReserveOutputBuffer(format, size); | 264 return DoReserveOutputBuffer(format, size); |
| 265 } | 265 } |
| 266 | 266 |
| 267 void VideoCaptureController::VideoCaptureDeviceClient::OnIncomingCapturedFrame( | 267 void VideoCaptureController::VideoCaptureDeviceClient::OnIncomingCapturedFrame( |
| 268 const uint8* data, | 268 const uint8* data, |
| 269 int length, | 269 int length, |
| 270 base::Time timestamp, | 270 base::TimeTicks timestamp, |
| 271 int rotation, | 271 int rotation, |
| 272 const VideoCaptureFormat& frame_format) { | 272 const VideoCaptureFormat& frame_format) { |
| 273 TRACE_EVENT0("video", "VideoCaptureController::OnIncomingCapturedFrame"); | 273 TRACE_EVENT0("video", "VideoCaptureController::OnIncomingCapturedFrame"); |
| 274 | 274 |
| 275 if (!frame_format.IsValid()) | 275 if (!frame_format.IsValid()) |
| 276 return; | 276 return; |
| 277 | 277 |
| 278 // Chopped pixels in width/height in case video capture device has odd | 278 // Chopped pixels in width/height in case video capture device has odd |
| 279 // numbers for width/height. | 279 // numbers for width/height. |
| 280 int chopped_width = 0; | 280 int chopped_width = 0; |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 buffer, | 403 buffer, |
| 404 dimensions, | 404 dimensions, |
| 405 frame_format.frame_rate, | 405 frame_format.frame_rate, |
| 406 timestamp)); | 406 timestamp)); |
| 407 } | 407 } |
| 408 | 408 |
| 409 void VideoCaptureController::VideoCaptureDeviceClient::OnIncomingCapturedBuffer( | 409 void VideoCaptureController::VideoCaptureDeviceClient::OnIncomingCapturedBuffer( |
| 410 const scoped_refptr<Buffer>& buffer, | 410 const scoped_refptr<Buffer>& buffer, |
| 411 media::VideoFrame::Format format, | 411 media::VideoFrame::Format format, |
| 412 const gfx::Size& dimensions, | 412 const gfx::Size& dimensions, |
| 413 base::Time timestamp, | 413 base::TimeTicks timestamp, |
| 414 int frame_rate) { | 414 int frame_rate) { |
| 415 // The capture pipeline expects I420 for now. | 415 // The capture pipeline expects I420 for now. |
| 416 DCHECK_EQ(format, media::VideoFrame::I420) | 416 DCHECK_EQ(format, media::VideoFrame::I420) |
| 417 << "Non-I420 output buffer returned"; | 417 << "Non-I420 output buffer returned"; |
| 418 | 418 |
| 419 BrowserThread::PostTask( | 419 BrowserThread::PostTask( |
| 420 BrowserThread::IO, | 420 BrowserThread::IO, |
| 421 FROM_HERE, | 421 FROM_HERE, |
| 422 base::Bind( | 422 base::Bind( |
| 423 &VideoCaptureController::DoIncomingCapturedI420BufferOnIOThread, | 423 &VideoCaptureController::DoIncomingCapturedI420BufferOnIOThread, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 | 469 |
| 470 VideoCaptureController::~VideoCaptureController() { | 470 VideoCaptureController::~VideoCaptureController() { |
| 471 STLDeleteContainerPointers(controller_clients_.begin(), | 471 STLDeleteContainerPointers(controller_clients_.begin(), |
| 472 controller_clients_.end()); | 472 controller_clients_.end()); |
| 473 } | 473 } |
| 474 | 474 |
| 475 void VideoCaptureController::DoIncomingCapturedI420BufferOnIOThread( | 475 void VideoCaptureController::DoIncomingCapturedI420BufferOnIOThread( |
| 476 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer, | 476 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer, |
| 477 const gfx::Size& dimensions, | 477 const gfx::Size& dimensions, |
| 478 int frame_rate, | 478 int frame_rate, |
| 479 base::Time timestamp) { | 479 base::TimeTicks timestamp) { |
| 480 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 480 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 481 DCHECK_NE(buffer->id(), VideoCaptureBufferPool::kInvalidId); | 481 DCHECK_NE(buffer->id(), VideoCaptureBufferPool::kInvalidId); |
| 482 | 482 |
| 483 VideoCaptureFormat frame_format( | 483 VideoCaptureFormat frame_format( |
| 484 dimensions, frame_rate, media::PIXEL_FORMAT_I420); | 484 dimensions, frame_rate, media::PIXEL_FORMAT_I420); |
| 485 | 485 |
| 486 int count = 0; | 486 int count = 0; |
| 487 if (state_ == VIDEO_CAPTURE_STATE_STARTED) { | 487 if (state_ == VIDEO_CAPTURE_STATE_STARTED) { |
| 488 for (ControllerClients::iterator client_it = controller_clients_.begin(); | 488 for (ControllerClients::iterator client_it = controller_clients_.begin(); |
| 489 client_it != controller_clients_.end(); ++client_it) { | 489 client_it != controller_clients_.end(); ++client_it) { |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 } | 570 } |
| 571 return NULL; | 571 return NULL; |
| 572 } | 572 } |
| 573 | 573 |
| 574 int VideoCaptureController::GetClientCount() { | 574 int VideoCaptureController::GetClientCount() { |
| 575 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 575 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 576 return controller_clients_.size(); | 576 return controller_clients_.size(); |
| 577 } | 577 } |
| 578 | 578 |
| 579 } // namespace content | 579 } // namespace content |
| OLD | NEW |