// 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 "media_perception/mojom/image_capture.mojom";
import "media_perception/mojom/video_capture_types.mojom";
import "media_perception/mojom/video_frame_handler.mojom";

enum CreatePushSubscriptionResultCode {
  kCreatedWithRequestedSettings,
  kCreatedWithDifferentSettings,
  kFailed,
};

// In a PushVideoStreamSubscription, the provider pushes frames to the
// subscriber at a rate determined by the provider. Using this interface, the
// subscriber can make adjustments/modification to the subscription.
interface PushVideoStreamSubscription {
  // For newly created subscriptions, the provider waits for this activation
  // call before starting to push frames to |subscriber|. This allows the
  // creator of the subscription to close or discard it before any frames are
  // pushed to |subscriber| in case the obtained settings are unacceptable.
  Activate();

  // When suspended, the subscriber will no longer receive any calls to
  // OnFrameReadyInBuffer() and OnFrameDropped(), but will still receive any
  // other calls, e.g. OnNewBuffer() and OnBufferRetired().
  // Callers may wait for the empty callback event to get notified when it is
  // guaranteed that no more frames will be pushed.
  Suspend() => ();

  Resume();

  GetPhotoState()
      => (media.mojom.PhotoState? capabilities);
  // Sets controls such as focus/zoom/white balance etc.
  // Note, depending on the implementation, some of these settings may or may
  // not affect the live video stream while others may only take effect during
  // TakePhoto().
  // Note, these settings affect the device globally, i.e. they may affect
  // other subscribers if there are any.
  SetPhotoOptions(media.mojom.PhotoSettings settings)
      => (bool success);
  TakePhoto()
      => (media.mojom.Blob? blob);

  // Closes the subscription. The callback indicates when the closing is
  // complete. After closing is complete, the subscriber will no longer receive
  // any calls from the subscription.
  // Note, that creating a new subscription for the same video source before
  // waiting for closing of existing subscriptions to complete may lead to the
  // source still being considered in-use. When that happens, any new settings
  // requested for the new subscription will be ignored unless
  // |force_reopen_with_new_settings| is set to true.
  Close() => ();

  // |feedback| contains consumer feedback like resource utilization,
  // maximum requested frame-rate and resolution.
  ProcessFeedback(media.mojom.VideoCaptureFeedback feedback);
};

// Provides shared access to a specific video source to potentially multiple
// subscribers.
interface VideoSource {
  // Creates a subscription to the video source that will push video frames to
  // |subscriber| once it is activated. If this is the first subscriber, or if
  // |force_reopen_with_new_settings| is set to true, the service will attempt
  // to open the source such that it delivers frame in a format close to
  // |requested_settings|, but it does not give any guarantee that
  // |requested_settings| will actually be matched. The actual format of each
  // frame being delivered to |subscriber| is specified in the parameter
  // |frame_info| for each invocation of method OnFrameReadyInBuffer(). The
  // service does not guarantee that this format stays the same throughout the
  // lifetime of a subscription.
  // If the VideoSource is already in use by other subscribers and
  // |force_reopen_with_new_settings| is set to false, the underlying video
  // source will not be reopened, and |settings_source_was_opened_with| will
  // indicate what settings were requested by the subscriber that last caused
  // the underlying source to be opened or reopened.
  // If |force_reopen_with_new_settings| is set to true and |requested_settings|
  // is different from the settings that have been used to open the source, the
  // source will be reopened trying to match |requested_settings|. This will
  // potentially briefly interrupt the video stream received by other
  // subscribers.
  CreatePushSubscription(
      pending_remote<VideoFrameHandler> subscriber,
      media.mojom.VideoCaptureParams requested_settings,
      bool force_reopen_with_new_settings,
      pending_receiver<PushVideoStreamSubscription> subscription)
      => (CreatePushSubscriptionResultCode result_code,
          media.mojom.VideoCaptureParams settings_source_was_opened_with);
};
