diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-05-20 09:47:09 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-06-07 11:15:42 +0000 |
commit | 189d4fd8fad9e3c776873be51938cd31a42b6177 (patch) | |
tree | 6497caeff5e383937996768766ab3bb2081a40b2 /chromium/media/capture/video/video_capture_device_client.cc | |
parent | 8bc75099d364490b22f43a7ce366b366c08f4164 (diff) | |
download | qtwebengine-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.cc | 91 |
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, |