| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "media/capture/video/video_capture_device_client.h" | 5 #include "media/capture/video/video_capture_device_client.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 | 82 |
| 83 void VideoCaptureDeviceClient::OnIncomingCapturedData( | 83 void VideoCaptureDeviceClient::OnIncomingCapturedData( |
| 84 const uint8_t* data, | 84 const uint8_t* data, |
| 85 int length, | 85 int length, |
| 86 const VideoCaptureFormat& frame_format, | 86 const VideoCaptureFormat& frame_format, |
| 87 int rotation, | 87 int rotation, |
| 88 base::TimeTicks reference_time, | 88 base::TimeTicks reference_time, |
| 89 base::TimeDelta timestamp) { | 89 base::TimeDelta timestamp) { |
| 90 TRACE_EVENT0("video", "VideoCaptureDeviceClient::OnIncomingCapturedData"); | 90 TRACE_EVENT0("video", "VideoCaptureDeviceClient::OnIncomingCapturedData"); |
| 91 DCHECK_EQ(media::PIXEL_STORAGE_CPU, frame_format.pixel_storage); | 91 DCHECK_EQ(media::PIXEL_STORAGE_CPU, frame_format.pixel_storage); |
| 92 // The input |length| can be greater than the required buffer size because of |
| 93 // paddings and/or alignments, but it cannot be smaller. |
| 94 DCHECK_GE(static_cast<size_t>(length), frame_format.ImageAllocationSize()); |
| 92 | 95 |
| 93 if (last_captured_pixel_format_ != frame_format.pixel_format) { | 96 if (last_captured_pixel_format_ != frame_format.pixel_format) { |
| 94 OnLog("Pixel format: " + | 97 OnLog("Pixel format: " + |
| 95 media::VideoPixelFormatToString(frame_format.pixel_format)); | 98 media::VideoPixelFormatToString(frame_format.pixel_format)); |
| 96 last_captured_pixel_format_ = frame_format.pixel_format; | 99 last_captured_pixel_format_ = frame_format.pixel_format; |
| 97 | 100 |
| 98 if (frame_format.pixel_format == media::PIXEL_FORMAT_MJPEG && | 101 if (frame_format.pixel_format == media::PIXEL_FORMAT_MJPEG && |
| 99 !external_jpeg_decoder_initialized_) { | 102 !external_jpeg_decoder_initialized_) { |
| 100 external_jpeg_decoder_initialized_ = true; | 103 external_jpeg_decoder_initialized_ = true; |
| 101 external_jpeg_decoder_ = jpeg_decoder_factory_callback_.Run(); | 104 external_jpeg_decoder_ = jpeg_decoder_factory_callback_.Run(); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 case media::PIXEL_FORMAT_ARGB: | 211 case media::PIXEL_FORMAT_ARGB: |
| 209 origin_colorspace = libyuv::FOURCC_ARGB; | 212 origin_colorspace = libyuv::FOURCC_ARGB; |
| 210 break; | 213 break; |
| 211 case media::PIXEL_FORMAT_MJPEG: | 214 case media::PIXEL_FORMAT_MJPEG: |
| 212 origin_colorspace = libyuv::FOURCC_MJPG; | 215 origin_colorspace = libyuv::FOURCC_MJPG; |
| 213 break; | 216 break; |
| 214 default: | 217 default: |
| 215 NOTREACHED(); | 218 NOTREACHED(); |
| 216 } | 219 } |
| 217 | 220 |
| 218 // The input |length| can be greater than the required buffer size because of | |
| 219 // paddings and/or alignments, but it cannot be smaller. | |
| 220 DCHECK_GE(static_cast<size_t>(length), frame_format.ImageAllocationSize()); | |
| 221 | |
| 222 if (external_jpeg_decoder_) { | 221 if (external_jpeg_decoder_) { |
| 223 const VideoCaptureJpegDecoder::STATUS status = | 222 const VideoCaptureJpegDecoder::STATUS status = |
| 224 external_jpeg_decoder_->GetStatus(); | 223 external_jpeg_decoder_->GetStatus(); |
| 225 if (status == VideoCaptureJpegDecoder::FAILED) { | 224 if (status == VideoCaptureJpegDecoder::FAILED) { |
| 226 external_jpeg_decoder_.reset(); | 225 external_jpeg_decoder_.reset(); |
| 227 } else if (status == VideoCaptureJpegDecoder::INIT_PASSED && | 226 } else if (status == VideoCaptureJpegDecoder::INIT_PASSED && |
| 228 frame_format.pixel_format == media::PIXEL_FORMAT_MJPEG && | 227 frame_format.pixel_format == media::PIXEL_FORMAT_MJPEG && |
| 229 rotation == 0 && !flip) { | 228 rotation == 0 && !flip) { |
| 230 external_jpeg_decoder_->DecodeCapturedData(data, length, frame_format, | 229 external_jpeg_decoder_->DecodeCapturedData(data, length, frame_format, |
| 231 reference_time, timestamp, | 230 reference_time, timestamp, |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 reinterpret_cast<uint8_t*>(buffer->data(VideoFrame::kUPlane)); | 395 reinterpret_cast<uint8_t*>(buffer->data(VideoFrame::kUPlane)); |
| 397 *v_plane_data = | 396 *v_plane_data = |
| 398 reinterpret_cast<uint8_t*>(buffer->data(VideoFrame::kVPlane)); | 397 reinterpret_cast<uint8_t*>(buffer->data(VideoFrame::kVPlane)); |
| 399 return buffer; | 398 return buffer; |
| 400 } | 399 } |
| 401 NOTREACHED(); | 400 NOTREACHED(); |
| 402 return std::unique_ptr<Buffer>(); | 401 return std::unique_ptr<Buffer>(); |
| 403 } | 402 } |
| 404 | 403 |
| 405 } // namespace media | 404 } // namespace media |
| OLD | NEW |