diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-08-24 12:15:48 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-08-28 13:30:04 +0000 |
commit | b014812705fc80bff0a5c120dfcef88f349816dc (patch) | |
tree | 25a2e2d9fa285f1add86aa333389a839f81a39ae /chromium/services/video_capture/texture_virtual_device_mojo_adapter.cc | |
parent | 9f4560b1027ae06fdb497023cdcaf91b8511fa74 (diff) | |
download | qtwebengine-chromium-b014812705fc80bff0a5c120dfcef88f349816dc.tar.gz |
BASELINE: Update Chromium to 68.0.3440.125
Change-Id: I23f19369e01f688e496f5bf179abb521ad73874f
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/services/video_capture/texture_virtual_device_mojo_adapter.cc')
-rw-r--r-- | chromium/services/video_capture/texture_virtual_device_mojo_adapter.cc | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/chromium/services/video_capture/texture_virtual_device_mojo_adapter.cc b/chromium/services/video_capture/texture_virtual_device_mojo_adapter.cc new file mode 100644 index 00000000000..884d561e419 --- /dev/null +++ b/chromium/services/video_capture/texture_virtual_device_mojo_adapter.cc @@ -0,0 +1,136 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "services/video_capture/texture_virtual_device_mojo_adapter.h" + +#include "base/logging.h" +#include "base/memory/ptr_util.h" +#include "media/base/bind_to_current_loop.h" +#include "mojo/public/cpp/bindings/callback_helpers.h" +#include "mojo/public/cpp/bindings/strong_binding.h" +#include "services/video_capture/public/mojom/constants.mojom.h" + +namespace video_capture { + +TextureVirtualDeviceMojoAdapter::TextureVirtualDeviceMojoAdapter( + std::unique_ptr<service_manager::ServiceContextRef> service_ref) + : service_ref_(std::move(service_ref)) {} + +TextureVirtualDeviceMojoAdapter::~TextureVirtualDeviceMojoAdapter() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} + +void TextureVirtualDeviceMojoAdapter::SetReceiverDisconnectedCallback( + base::OnceClosure callback) { + optional_receiver_disconnected_callback_ = std::move(callback); +} + +void TextureVirtualDeviceMojoAdapter::OnNewMailboxHolderBufferHandle( + int32_t buffer_id, + media::mojom::MailboxBufferHandleSetPtr mailbox_handles) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // Keep track of the buffer handles in order to be able to forward them to + // the Receiver when it connects. This includes cases where a new Receiver + // connects after a previous one has disconnected. + known_buffer_handles_.insert( + std::make_pair(buffer_id, mailbox_handles->Clone())); + + if (!receiver_.is_bound()) + return; + media::mojom::VideoBufferHandlePtr buffer_handle = + media::mojom::VideoBufferHandle::New(); + buffer_handle->set_mailbox_handles(std::move(mailbox_handles)); + receiver_->OnNewBuffer(buffer_id, std::move(buffer_handle)); +} + +void TextureVirtualDeviceMojoAdapter::OnFrameReadyInBuffer( + int32_t buffer_id, + mojom::ScopedAccessPermissionPtr access_permission, + media::mojom::VideoFrameInfoPtr frame_info) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!receiver_.is_bound()) + return; + receiver_->OnFrameReadyInBuffer(buffer_id, 0 /* frame_feedback_id */, + std::move(access_permission), + std::move(frame_info)); +} + +void TextureVirtualDeviceMojoAdapter::OnBufferRetired(int buffer_id) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + known_buffer_handles_.erase(buffer_id); + if (!receiver_.is_bound()) + return; + receiver_->OnBufferRetired(buffer_id); +} + +void TextureVirtualDeviceMojoAdapter::Start( + const media::VideoCaptureParams& requested_settings, + mojom::ReceiverPtr receiver) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + receiver.set_connection_error_handler(base::BindOnce( + &TextureVirtualDeviceMojoAdapter::OnReceiverConnectionErrorOrClose, + base::Unretained(this))); + receiver_ = std::move(receiver); + receiver_->OnStarted(); + + // Notify receiver of known buffer handles */ + for (auto& entry : known_buffer_handles_) { + media::mojom::VideoBufferHandlePtr buffer_handle = + media::mojom::VideoBufferHandle::New(); + buffer_handle->set_mailbox_handles(entry.second->Clone()); + receiver_->OnNewBuffer(entry.first, std::move(buffer_handle)); + } +} + +void TextureVirtualDeviceMojoAdapter::OnReceiverReportingUtilization( + int32_t frame_feedback_id, + double utilization) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} + +void TextureVirtualDeviceMojoAdapter::RequestRefreshFrame() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} + +void TextureVirtualDeviceMojoAdapter::MaybeSuspend() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} + +void TextureVirtualDeviceMojoAdapter::Resume() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} + +void TextureVirtualDeviceMojoAdapter::GetPhotoState( + GetPhotoStateCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + std::move(callback).Run(nullptr); +} + +void TextureVirtualDeviceMojoAdapter::SetPhotoOptions( + media::mojom::PhotoSettingsPtr settings, + SetPhotoOptionsCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} + +void TextureVirtualDeviceMojoAdapter::TakePhoto(TakePhotoCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} + +void TextureVirtualDeviceMojoAdapter::Stop() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!receiver_.is_bound()) + return; + // Unsubscribe from connection error callbacks. + receiver_.set_connection_error_handler(base::OnceClosure()); + receiver_.reset(); +} + +void TextureVirtualDeviceMojoAdapter::OnReceiverConnectionErrorOrClose() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + Stop(); + if (optional_receiver_disconnected_callback_) + std::move(optional_receiver_disconnected_callback_).Run(); +} + +} // namespace video_capture |