summaryrefslogtreecommitdiff
path: root/chromium/media/capture/video/video_capture_device_client.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-05-20 09:47:09 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-06-07 11:15:42 +0000
commit189d4fd8fad9e3c776873be51938cd31a42b6177 (patch)
tree6497caeff5e383937996768766ab3bb2081a40b2 /chromium/media/capture/video/video_capture_device_client.cc
parent8bc75099d364490b22f43a7ce366b366c08f4164 (diff)
downloadqtwebengine-chromium-189d4fd8fad9e3c776873be51938cd31a42b6177.tar.gz
BASELINE: Update Chromium to 90.0.4430.221
Change-Id: Iff4d9d18d2fcf1a576f3b1f453010f744a232920 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/media/capture/video/video_capture_device_client.cc')
-rw-r--r--chromium/media/capture/video/video_capture_device_client.cc91
1 files changed, 54 insertions, 37 deletions
diff --git a/chromium/media/capture/video/video_capture_device_client.cc b/chromium/media/capture/video/video_capture_device_client.cc
index d11eece6e42..cbe37e1b753 100644
--- a/chromium/media/capture/video/video_capture_device_client.cc
+++ b/chromium/media/capture/video/video_capture_device_client.cc
@@ -24,9 +24,9 @@
#include "media/capture/video_capture_types.h"
#include "third_party/libyuv/include/libyuv.h"
-#if BUILDFLAG(IS_ASH)
+#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "media/capture/video/chromeos/video_capture_jpeg_decoder.h"
-#endif // BUILDFLAG(IS_ASH)
+#endif // BUILDFLAG(IS_CHROMEOS_ASH)
namespace {
@@ -163,7 +163,7 @@ class BufferPoolBufferHandleProvider
const int buffer_id_;
};
-#if BUILDFLAG(IS_ASH)
+#if BUILDFLAG(IS_CHROMEOS_ASH)
VideoCaptureDeviceClient::VideoCaptureDeviceClient(
VideoCaptureBufferType target_buffer_type,
std::unique_ptr<VideoFrameReceiver> receiver,
@@ -188,7 +188,7 @@ VideoCaptureDeviceClient::VideoCaptureDeviceClient(
receiver_(std::move(receiver)),
buffer_pool_(std::move(buffer_pool)),
last_captured_pixel_format_(PIXEL_FORMAT_UNKNOWN) {}
-#endif // BUILDFLAG(IS_ASH)
+#endif // BUILDFLAG(IS_CHROMEOS_ASH)
VideoCaptureDeviceClient::~VideoCaptureDeviceClient() {
for (int buffer_id : buffer_ids_known_by_receiver_)
@@ -226,7 +226,7 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData(
OnLog("Pixel format: " + VideoPixelFormatToString(format.pixel_format));
last_captured_pixel_format_ = format.pixel_format;
-#if BUILDFLAG(IS_ASH)
+#if BUILDFLAG(IS_CHROMEOS_ASH)
if (format.pixel_format == PIXEL_FORMAT_MJPEG &&
optional_jpeg_decoder_factory_callback_) {
external_jpeg_decoder_ =
@@ -234,7 +234,7 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData(
DCHECK(external_jpeg_decoder_);
external_jpeg_decoder_->Initialize();
}
-#endif // BUILDFLAG(IS_ASH)
+#endif // BUILDFLAG(IS_CHROMEOS_ASH)
}
if (!format.IsValid()) {
@@ -353,7 +353,7 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData(
// paddings and/or alignments, but it cannot be smaller.
DCHECK_GE(static_cast<size_t>(length), format.ImageAllocationSize());
-#if BUILDFLAG(IS_ASH)
+#if BUILDFLAG(IS_CHROMEOS_ASH)
if (external_jpeg_decoder_) {
const VideoCaptureJpegDecoder::STATUS status =
external_jpeg_decoder_->GetStatus();
@@ -369,7 +369,7 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData(
return;
}
}
-#endif // BUILDFLAG(IS_ASH)
+#endif // BUILDFLAG(IS_CHROMEOS_ASH)
// libyuv::ConvertToI420 use Rec601 to convert RGB to YUV.
if (libyuv::ConvertToI420(
@@ -465,16 +465,31 @@ void VideoCaptureDeviceClient::OnIncomingCapturedGfxBuffer(
}
void VideoCaptureDeviceClient::OnIncomingCapturedExternalBuffer(
- gfx::GpuMemoryBufferHandle handle,
- const VideoCaptureFormat& format,
- const gfx::ColorSpace& color_space,
+ CapturedExternalVideoBuffer buffer,
+ std::vector<CapturedExternalVideoBuffer> scaled_buffers,
+ base::TimeTicks reference_time,
+ base::TimeDelta timestamp) {
+ auto ready_frame = CreateReadyFrameFromExternalBuffer(
+ std::move(buffer), reference_time, timestamp);
+ std::vector<ReadyFrameInBuffer> scaled_ready_frames;
+ scaled_ready_frames.reserve(scaled_buffers.size());
+ for (auto& scaled_buffer : scaled_buffers) {
+ scaled_ready_frames.push_back(CreateReadyFrameFromExternalBuffer(
+ std::move(scaled_buffer), reference_time, timestamp));
+ }
+ receiver_->OnFrameReadyInBuffer(std::move(ready_frame),
+ std::move(scaled_ready_frames));
+}
+
+ReadyFrameInBuffer VideoCaptureDeviceClient::CreateReadyFrameFromExternalBuffer(
+ CapturedExternalVideoBuffer buffer,
base::TimeTicks reference_time,
base::TimeDelta timestamp) {
// Reserve an ID for this buffer that will not conflict with any of the IDs
// used by |buffer_pool_|.
int buffer_id_to_drop = VideoCaptureBufferPool::kInvalidId;
- int buffer_id =
- buffer_pool_->ReserveIdForExternalBuffer(handle, &buffer_id_to_drop);
+ int buffer_id = buffer_pool_->ReserveIdForExternalBuffer(buffer.handle,
+ &buffer_id_to_drop);
// If a buffer to retire was specified, retire one.
if (buffer_id_to_drop != VideoCaptureBufferPool::kInvalidId) {
@@ -491,30 +506,30 @@ void VideoCaptureDeviceClient::OnIncomingCapturedExternalBuffer(
if (!base::Contains(buffer_ids_known_by_receiver_, buffer_id)) {
media::mojom::VideoBufferHandlePtr buffer_handle =
media::mojom::VideoBufferHandle::New();
- buffer_handle->set_gpu_memory_buffer_handle(std::move(handle));
+ buffer_handle->set_gpu_memory_buffer_handle(std::move(buffer.handle));
receiver_->OnNewBuffer(buffer_id, std::move(buffer_handle));
buffer_ids_known_by_receiver_.push_back(buffer_id);
}
- // Tell |receiver_| that the frame has been received.
- {
- mojom::VideoFrameInfoPtr info = mojom::VideoFrameInfo::New();
- info->timestamp = timestamp;
- info->pixel_format = format.pixel_format;
- info->color_space = color_space;
- info->coded_size = format.frame_size;
- info->visible_rect = gfx::Rect(format.frame_size);
- info->metadata.frame_rate = format.frame_rate;
- info->metadata.reference_time = reference_time;
-
- buffer_pool_->HoldForConsumers(buffer_id, 1);
- buffer_pool_->RelinquishProducerReservation(buffer_id);
- receiver_->OnFrameReadyInBuffer(
- buffer_id, 0 /* frame_feedback_id */,
- std::make_unique<ScopedBufferPoolReservation<ConsumerReleaseTraits>>(
- buffer_pool_, buffer_id),
- std::move(info));
- }
+ // Construct the ready frame, to be passed on to the |receiver_| by the caller
+ // of this method.
+ mojom::VideoFrameInfoPtr info = mojom::VideoFrameInfo::New();
+ info->timestamp = timestamp;
+ info->pixel_format = buffer.format.pixel_format;
+ info->color_space = buffer.color_space;
+ info->coded_size = buffer.format.frame_size;
+ info->visible_rect = gfx::Rect(buffer.format.frame_size);
+ info->metadata.frame_rate = buffer.format.frame_rate;
+ info->metadata.reference_time = reference_time;
+
+ buffer_pool_->HoldForConsumers(buffer_id, 1);
+ buffer_pool_->RelinquishProducerReservation(buffer_id);
+
+ return ReadyFrameInBuffer(
+ buffer_id, 0 /* frame_feedback_id */,
+ std::make_unique<ScopedBufferPoolReservation<ConsumerReleaseTraits>>(
+ buffer_pool_, buffer_id),
+ std::move(info));
}
VideoCaptureDevice::Client::ReserveResult
@@ -614,10 +629,12 @@ void VideoCaptureDeviceClient::OnIncomingCapturedBufferExt(
buffer_pool_->HoldForConsumers(buffer.id, 1);
receiver_->OnFrameReadyInBuffer(
- buffer.id, buffer.frame_feedback_id,
- std::make_unique<ScopedBufferPoolReservation<ConsumerReleaseTraits>>(
- buffer_pool_, buffer.id),
- std::move(info));
+ ReadyFrameInBuffer(
+ buffer.id, buffer.frame_feedback_id,
+ std::make_unique<ScopedBufferPoolReservation<ConsumerReleaseTraits>>(
+ buffer_pool_, buffer.id),
+ std::move(info)),
+ {});
}
void VideoCaptureDeviceClient::OnError(VideoCaptureError error,