// Copyright 2016 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. module video_capture.mojom; import "media/capture/mojom/video_capture_types.mojom"; import "services/video_capture/public/mojom/device.mojom"; import "services/video_capture/public/mojom/producer.mojom"; import "services/video_capture/public/mojom/virtual_device.mojom"; enum DeviceAccessResultCode { NOT_INITIALIZED, SUCCESS, ERROR_DEVICE_NOT_FOUND }; // Enables access to a set of video capture devices. // Typical operation is to first call GetDeviceInfos() to obtain // information about available devices. The |device_id| of the infos can // subsequently be used to create an instance of // video_capture.mojom.Device using CreateDevice(). // The factory guarantees that no two device infos it returns use the // same |device_id|. interface DeviceFactory { GetDeviceInfos() => (array device_infos); // Provides exclusive access to the device identified by |device_id|. // The access is valid until either the message pipe associated with // |device_request| is closed by the client, or a subsequent call to // CreateDevice() is made. When a subsequent call is made while the // |device_request| from a previous call has not yet been closed, the service // "revokes" that previous |device_request| (by closing the connection) and // the exclusive access goes to the new |device_request|. // Note: This design avoids the issue of it not being clear how soon after a // |device_request| has been (asynchronously) discarded a subsequent call to // CreateDevice() would succeed if it were to deny access while still // in use. CreateDevice(string device_id, Device& device_request) => (DeviceAccessResultCode result_code); // Creates a new virtual capture device, which will be exposed by the device // factory using the given |device_info|. The returned |virtual_device| is to // be used by the caller to subsequently push video frames. These frames will // appear to clients of the device as if they were produced by the device. // If |send_buffer_handles_to_producer_as_raw_file_descriptors| is set to // true, buffers requested via // |SharedMemoryVirtualDevice.RequestFrameBuffer()| will be shared with // |producer| as |VideoBufferHandle.shared_memory_via_raw_file_descriptor|, // and otherwise as |VideoBufferHandle.shared_buffer_handle|. // The virtual device is removed either when the caller releases // |virtual_device| or the given |producer| is closed. AddSharedMemoryVirtualDevice( media.mojom.VideoCaptureDeviceInfo device_info, Producer producer, bool send_buffer_handles_to_producer_as_raw_file_descriptors, SharedMemoryVirtualDevice& virtual_device); // Similar to AddSharedMemoryVirtualDevice() but for virtual devices that // are fed with textures (via MailboxHolders) allocated by the caller instead // of shared memory buffers provided by the service on demand. AddTextureVirtualDevice( media.mojom.VideoCaptureDeviceInfo device_info, TextureVirtualDevice& virtual_device); };