| Index: media/capture/video/video_capture_device_client.cc
|
| diff --git a/media/capture/video/video_capture_device_client.cc b/media/capture/video/video_capture_device_client.cc
|
| index 729c02edc9ed76e7da9eb4f91f5074c86123f2f9..0587c4135413eae6493b06c4951f143b6c3bcf59 100644
|
| --- a/media/capture/video/video_capture_device_client.cc
|
| +++ b/media/capture/video/video_capture_device_client.cc
|
| @@ -103,6 +103,7 @@ VideoCaptureDeviceClient::VideoCaptureDeviceClient(
|
| : receiver_(std::move(receiver)),
|
| jpeg_decoder_factory_callback_(jpeg_decoder_factory),
|
| external_jpeg_decoder_initialized_(false),
|
| + using_external_jpeg_decoder_(false),
|
| buffer_pool_(std::move(buffer_pool)),
|
| last_captured_pixel_format_(media::PIXEL_FORMAT_UNKNOWN) {}
|
|
|
| @@ -281,11 +282,13 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData(
|
| } else if (status == VideoCaptureJpegDecoder::INIT_PASSED &&
|
| format.pixel_format == media::PIXEL_FORMAT_MJPEG &&
|
| rotation == 0 && !flip) {
|
| + OnUsingExternalJpegDecoder();
|
| external_jpeg_decoder_->DecodeCapturedData(
|
| data, length, format, reference_time, timestamp, std::move(buffer));
|
| return;
|
| }
|
| }
|
| + OnNotUsingExternalJpegDecoder();
|
|
|
| if (libyuv::ConvertToI420(
|
| data, length, y_plane_data, yplane_stride, u_plane_data,
|
| @@ -336,9 +339,8 @@ VideoCaptureDeviceClient::ReserveOutputBuffer(
|
|
|
| if (!base::ContainsValue(buffer_ids_known_by_receiver_, buffer_id)) {
|
| receiver_->OnNewBufferHandle(
|
| - buffer_id,
|
| - base::MakeUnique<BufferPoolBufferHandleProvider>(buffer_pool_,
|
| - buffer_id));
|
| + buffer_id, base::MakeUnique<BufferPoolBufferHandleProvider>(
|
| + buffer_pool_, buffer_id));
|
| buffer_ids_known_by_receiver_.push_back(buffer_id);
|
| }
|
|
|
| @@ -426,6 +428,20 @@ double VideoCaptureDeviceClient::GetBufferPoolUtilization() const {
|
| return buffer_pool_->GetBufferPoolUtilization();
|
| }
|
|
|
| +void VideoCaptureDeviceClient::OnUsingExternalJpegDecoder() {
|
| + if (using_external_jpeg_decoder_)
|
| + return;
|
| + using_external_jpeg_decoder_ = true;
|
| + receiver_->OnStartedUsingGpuDecode();
|
| +}
|
| +
|
| +void VideoCaptureDeviceClient::OnNotUsingExternalJpegDecoder() {
|
| + if (!using_external_jpeg_decoder_)
|
| + return;
|
| + using_external_jpeg_decoder_ = false;
|
| + receiver_->OnStoppedUsingGpuDecode();
|
| +}
|
| +
|
| void VideoCaptureDeviceClient::InitializeI420PlanePointers(
|
| const gfx::Size& dimensions,
|
| uint8_t* const data,
|
|
|