// 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 media.mojom;

import "media_perception/mojom/time.mojom";
import "media_perception/mojom/geometry.mojom";

[Stable, Extensible]
enum VideoCapturePixelFormat {
  UNKNOWN,
  I420,
  YV12,
  I422,
  I420A,
  I444,
  NV12,
  NV21,
  UYVY,
  YUY2,
  ARGB,
  XRGB,
  RGB24,
  MJPEG,
  YUV420P9,
  YUV420P10,
  YUV422P9,
  YUV422P10,
  YUV444P9,
  YUV444P10,
  YUV420P12,
  YUV422P12,
  YUV444P12,
  Y16,
  ABGR,
  XBGR,
  P016LE,
  XR30,
  XB30,
  BGRA,
  RGBAF16,
};

[Stable, Extensible]
enum ResolutionChangePolicy {
  FIXED_RESOLUTION,
  FIXED_ASPECT_RATIO,
  ANY_WITHIN_LIMIT,
};

[Stable, Extensible]
enum PowerLineFrequency {
  DEFAULT,
  HZ_50,
  HZ_60
};

[Stable, Extensible]
enum VideoFacingMode {
  NONE,
  USER,
  ENVIRONMENT
};

[Stable, Extensible]
enum VideoCaptureApi {
  LINUX_V4L2_SINGLE_PLANE,
  WIN_MEDIA_FOUNDATION,
  WIN_MEDIA_FOUNDATION_SENSOR,
  WIN_DIRECT_SHOW,
  MACOSX_AVFOUNDATION,
  MACOSX_DECKLINK,
  ANDROID_API1,
  ANDROID_API2_LEGACY,
  ANDROID_API2_FULL,
  ANDROID_API2_LIMITED,
  FUCHSIA_CAMERA3,
  VIRTUAL_DEVICE,
  UNKNOWN
};

[Stable, Extensible]
enum VideoCaptureTransportType {
  // For MACOSX_AVFOUNDATION Api, identifies devices that are built-in or USB.
  MACOSX_USB_OR_BUILT_IN,
  OTHER_TRANSPORT
};

[Stable, Extensible]
enum VideoCaptureBufferType {
  kSharedMemory,

  // Warning: This case is a workaround for compatibility with an older version
  // of Mojo only and will be deleted as soon as the Mojo version of ChromiumOS
  // becomes compatible with the |kSharedMemory|.
  // TODO(chfremer): Remove this when https://crbug.com/857537 is resolved.
  kSharedMemoryViaRawFileDescriptor,

  kMailboxHolder,

  kGpuMemoryBuffer
};

// Represents capture device's support for different controls.
[Stable]
struct VideoCaptureControlSupport {
  bool pan;
  bool tilt;
  bool zoom;
};

[Stable, Extensible]
enum VideoCaptureError {
  kNone,
  kVideoCaptureControllerInvalidOrUnsupportedVideoCaptureParametersRequested,
  kVideoCaptureControllerIsAlreadyInErrorState,
  kVideoCaptureManagerDeviceConnectionLost,
  kFrameSinkVideoCaptureDeviceAleradyEndedOnFatalError,
  kFrameSinkVideoCaptureDeviceEncounteredFatalError,
  kV4L2FailedToOpenV4L2DeviceDriverFile,
  kV4L2ThisIsNotAV4L2VideoCaptureDevice,
  kV4L2FailedToFindASupportedCameraFormat,
  kV4L2FailedToSetVideoCaptureFormat,
  kV4L2UnsupportedPixelFormat,
  kV4L2FailedToSetCameraFramerate,
  kV4L2ErrorRequestingMmapBuffers,
  kV4L2AllocateBufferFailed,
  kV4L2VidiocStreamonFailed,
  kV4L2VidiocStreamoffFailed,
  kV4L2FailedToVidiocReqbufsWithCount0,
  kV4L2PollFailed,
  kV4L2MultipleContinuousTimeoutsWhileReadPolling,
  kV4L2FailedToDequeueCaptureBuffer,
  kV4L2FailedToEnqueueCaptureBuffer,
  kSingleClientVideoCaptureHostLostConnectionToDevice,
  kSingleClientVideoCaptureDeviceLaunchAborted,
  kDesktopCaptureDeviceWebrtcDesktopCapturerHasFailed,
  kFileVideoCaptureDeviceCouldNotOpenVideoFile,
  kDeviceCaptureLinuxFailedToCreateVideoCaptureDelegate,
  kErrorFakeDeviceIntentionallyEmittingErrorEvent,
  kDeviceClientTooManyFramesDroppedY16,
  kDeviceMediaToMojoAdapterEncounteredUnsupportedBufferType,
  kVideoCaptureManagerProcessDeviceStartQueueDeviceInfoNotFound,
  kInProcessDeviceLauncherFailedToCreateDeviceInstance,
  kServiceDeviceLauncherLostConnectionToDeviceFactoryDuringDeviceStart,
  kServiceDeviceLauncherServiceRespondedWithDeviceNotFound,
  kServiceDeviceLauncherConnectionLostWhileWaitingForCallback,
  kIntentionalErrorRaisedByUnitTest,
  kCrosHalV3FailedToStartDeviceThread,
  kCrosHalV3DeviceDelegateMojoConnectionError,
  kCrosHalV3DeviceDelegateFailedToGetCameraInfo,
  kCrosHalV3DeviceDelegateMissingSensorOrientationInfo,
  kCrosHalV3DeviceDelegateFailedToOpenCameraDevice,
  kCrosHalV3DeviceDelegateFailedToInitializeCameraDevice,
  kCrosHalV3DeviceDelegateFailedToConfigureStreams,
  kCrosHalV3DeviceDelegateWrongNumberOfStreamsConfigured,
  kCrosHalV3DeviceDelegateFailedToGetDefaultRequestSettings,
  kCrosHalV3BufferManagerHalRequestedTooManyBuffers,
  kCrosHalV3BufferManagerFailedToCreateGpuMemoryBuffer,
  kCrosHalV3BufferManagerFailedToMapGpuMemoryBuffer,
  kCrosHalV3BufferManagerUnsupportedVideoPixelFormat,
  kCrosHalV3BufferManagerFailedToDupFd,
  kCrosHalV3BufferManagerFailedToWrapGpuMemoryHandle,
  kCrosHalV3BufferManagerFailedToRegisterBuffer,
  kCrosHalV3BufferManagerProcessCaptureRequestFailed,
  kCrosHalV3BufferManagerInvalidPendingResultId,
  kCrosHalV3BufferManagerReceivedDuplicatedPartialMetadata,
  kCrosHalV3BufferManagerIncorrectNumberOfOutputBuffersReceived,
  kCrosHalV3BufferManagerInvalidTypeOfOutputBuffersReceived,
  kCrosHalV3BufferManagerReceivedMultipleResultBuffersForFrame,
  kCrosHalV3BufferManagerUnknownStreamInCamera3NotifyMsg,
  kCrosHalV3BufferManagerReceivedInvalidShutterTime,
  kCrosHalV3BufferManagerFatalDeviceError,
  kCrosHalV3BufferManagerReceivedFrameIsOutOfOrder,
  kCrosHalV3BufferManagerFailedToUnwrapReleaseFenceFd,
  kCrosHalV3BufferManagerSyncWaitOnReleaseFenceTimedOut,
  kCrosHalV3BufferManagerInvalidJpegBlob,
  kAndroidFailedToAllocate,
  kAndroidFailedToStartCapture,
  kAndroidFailedToStopCapture,
  kAndroidApi1CameraErrorCallbackReceived,
  kAndroidApi2CameraDeviceErrorReceived,
  kAndroidApi2CaptureSessionConfigureFailed,
  kAndroidApi2ImageReaderUnexpectedImageFormat,
  kAndroidApi2ImageReaderSizeDidNotMatchImageSize,
  kAndroidApi2ErrorRestartingPreview,
  kAndroidScreenCaptureUnsupportedFormat,
  kAndroidScreenCaptureFailedToStartCaptureMachine,
  kAndroidScreenCaptureTheUserDeniedScreenCapture,
  kAndroidScreenCaptureFailedToStartScreenCapture,
  kWinDirectShowCantGetCaptureFormatSettings,
  kWinDirectShowFailedToGetNumberOfCapabilities,
  kWinDirectShowFailedToGetCaptureDeviceCapabilities,
  kWinDirectShowFailedToSetCaptureDeviceOutputFormat,
  kWinDirectShowFailedToConnectTheCaptureGraph,
  kWinDirectShowFailedToPauseTheCaptureDevice,
  kWinDirectShowFailedToStartTheCaptureDevice,
  kWinDirectShowFailedToStopTheCaptureGraph,
  kWinMediaFoundationEngineIsNull,
  kWinMediaFoundationEngineGetSourceFailed ,
  kWinMediaFoundationFillPhotoCapabilitiesFailed ,
  kWinMediaFoundationFillVideoCapabilitiesFailed,
  kWinMediaFoundationNoVideoCapabilityFound,
  kWinMediaFoundationGetAvailableDeviceMediaTypeFailed,
  kWinMediaFoundationSetCurrentDeviceMediaTypeFailed,
  kWinMediaFoundationEngineGetSinkFailed,
  kWinMediaFoundationSinkQueryCapturePreviewInterfaceFailed,
  kWinMediaFoundationSinkRemoveAllStreamsFailed,
  kWinMediaFoundationCreateSinkVideoMediaTypeFailed,
  kWinMediaFoundationConvertToVideoSinkMediaTypeFailed,
  kWinMediaFoundationSinkAddStreamFailed,
  kWinMediaFoundationSinkSetSampleCallbackFailed,
  kWinMediaFoundationEngineStartPreviewFailed,
  kWinMediaFoundationGetMediaEventStatusFailed,
  kMacSetCaptureDeviceFailed,
  kMacCouldNotStartCaptureDevice,
  kMacReceivedFrameWithUnexpectedResolution,
  kMacUpdateCaptureResolutionFailed,
  kMacDeckLinkDeviceIdNotFoundInTheSystem,
  kMacDeckLinkErrorQueryingInputInterface,
  kMacDeckLinkErrorCreatingDisplayModeIterator,
  kMacDeckLinkCouldNotFindADisplayMode,
  kMacDeckLinkCouldNotSelectTheVideoFormatWeLike,
  kMacDeckLinkCouldNotStartCapturing,
  kMacDeckLinkUnsupportedPixelFormat,
  kMacAvFoundationReceivedAVCaptureSessionRuntimeErrorNotification,
  kAndroidApi2ErrorConfiguringCamera,
  kCrosHalV3DeviceDelegateFailedToFlush,
  kFuchsiaCameraDeviceDisconnected,
  kFuchsiaCameraStreamDisconnected,
  kFuchsiaSysmemDidNotSetImageFormat,
  kFuchsiaSysmemInvalidBufferIndex,
  kFuchsiaSysmemInvalidBufferSize,
  kFuchsiaUnsupportedPixelFormat,
  kFuchsiaFailedToMapSysmemBuffer,
  kCrosHalV3DeviceContextDuplicatedClient,
  kDesktopCaptureDeviceMacFailedStreamCreate,
  kDesktopCaptureDeviceMacFailedStreamStart,
  kCrosHalV3BufferManagerFailedToReserveBuffers,
};

[Stable, Extensible]
enum VideoCaptureFrameDropReason {
  kNone,
  kDeviceClientFrameHasInvalidFormat,
  kDeviceClientLibyuvConvertToI420Failed,
  kV4L2BufferErrorFlagWasSet,
  kV4L2InvalidNumberOfBytesInBuffer,
  kAndroidThrottling,
  kAndroidGetByteArrayElementsFailed,
  kAndroidApi1UnexpectedDataLength,
  kAndroidApi2AcquiredImageIsNull,
  kWinDirectShowUnexpectedSampleLength,
  kWinDirectShowFailedToGetMemoryPointerFromMediaSample,
  kWinMediaFoundationReceivedSampleIsNull,
  kWinMediaFoundationLockingBufferDelieveredNullptr,
  kWinMediaFoundationGetBufferByIndexReturnedNull,
  kBufferPoolMaxBufferCountExceeded,
  kBufferPoolBufferAllocationFailed,
  kVideoCaptureImplNotInStartedState,
  kVideoCaptureImplFailedToWrapDataAsMediaVideoFrame,
  kVideoTrackAdapterHasNoResolutionAdapters,
  kResolutionAdapterFrameIsNotValid,
  kResolutionAdapterWrappingFrameForCroppingFailed,
  kResolutionAdapterTimestampTooCloseToPrevious,
  kResolutionAdapterFrameRateIsHigherThanRequested,
  kResolutionAdapterHasNoCallbacks,
  kVideoTrackFrameDelivererNotEnabledReplacingWithBlackFrame,
  kRendererSinkFrameDelivererIsNotStarted
};

[Stable]
struct VideoCaptureFormat {
  gfx.mojom.Size frame_size;
  float frame_rate;
  VideoCapturePixelFormat pixel_format;
};

[Stable]
struct VideoCaptureParams {
  VideoCaptureFormat requested_format;
  VideoCaptureBufferType buffer_type;
  ResolutionChangePolicy resolution_change_policy;
  PowerLineFrequency power_line_frequency;
  bool enable_face_detection;
};

// |resource_utilization| reports that the frame incurred some fractional
// utilization of the downstream pipeline's per-frame processing capacity.
// See code comments in media::base::VideoFrameMetadata for a discussion of
// how utilization is interpreted. The capturer uses this information to
// auto-adjust the capture resolution based on performance variances in the
// live system environment.
// -1.0 means no value present.
//
// |max_framerate_fps| reports requested maximum frame-rate
// float::inifinty used to signal no limit.
//
// |max_pixels| reports requested maximum resolution (in sense of image area).
// int::max used to signal no limit.
//
// |require_mapped_frame| reports that the consumer needs a cpu readable frame.
// TODO(https://crbug.com/1191986): When |kWebRtcUseModernFrameAdapter| is
// shipped to 100%, |require_mapped_frame| can be removed in favor of checking
// if |mapped_sizes| is non-empty.
//
// |mapped_sizes| reports which sizes the video frame got mapped by the consumer
// for CPU access. Only reported when |kWebRtcUseModernFrameAdapter| is enabled.
[Stable, RenamedFrom="media.mojom.VideoFrameFeedback"]
struct VideoCaptureFeedback {
  double resource_utilization;

  float max_framerate_fps;

  int32 max_pixels;

  bool require_mapped_frame;

  [MinVersion=1] array<gfx.mojom.Size>? mapped_sizes;
};

// Contains one stride value per image plane. Stride means the number of bytes
// per row. If the image format uses fewer than kMaxPlanes planes, the values
// for higher plane indices are ignored. For example, for a YUV format, plane
// index 0 corresponds to the Y plane, index 1 to the U plane, and index 2 to
// the V plane.
struct PlaneStrides {
  // Size must be kept in sync with media::VideoFrame::kMaxPlanes.
  array<uint32, 4> stride_by_plane;
};

// Represents information about a capture device.
// |device_id| represents a unique id of a physical device. Since the same
// physical device may be accessible through different APIs |capture_api|
// disambiguates the API.
[Stable]
struct VideoCaptureDeviceDescriptor {
  string display_name;
  string device_id;
  string model_id;
  VideoFacingMode facing_mode;
  VideoCaptureApi capture_api;
  VideoCaptureControlSupport control_support;
  VideoCaptureTransportType transport_type;
};

// Bundles a VideoCaptureDeviceDescriptor with corresponding supported
// video formats.
[Stable]
struct VideoCaptureDeviceInfo {
  VideoCaptureDeviceDescriptor descriptor;
  array<VideoCaptureFormat> supported_formats;
};
