// Copyright 2019 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 "mojom/video_capture_types.mojom";
import "mojom/devices_changed_observer.mojom";
import "mojom/producer.mojom";
import "mojom/video_source.mojom";
import "mojom/virtual_device.mojom";

// Provides access to a set of video sources.
interface VideoSourceProvider {
  GetSourceInfos() => (array<media.mojom.VideoCaptureDeviceInfo> source_infos);

  // This essentially constrains things down to a particular source. This is
  // useful for subsequently passing the resulting |stream| to clients that
  // are supposed to get access to only a particular source.
  GetVideoSource(string source_id, VideoSource& stream);

  // Creates a new virtual capture device, which will be exposed
  // 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_receiver);

  // 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_receiver);

  // Registered observers will get notified whenever a virtual device is added
  // or removed. Note: Changes to non-virtual devices are currently being
  // monitored outside the video capture service, and therefore the service
  // does not offer such monitoring.
  RegisterVirtualDevicesChangedObserver(
      DevicesChangedObserver observer,
      bool raise_event_if_virtual_devices_already_present);

  // Closes the connection and allows clients to wait until the disconnect has
  // arrived at the service.
  Close() => ();
};
