123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- // 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 "mojo/public/mojom/base/time.mojom";
- import "ui/gfx/geometry/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,
- [MinVersion=1] I422A,
- [MinVersion=1] I444A,
- [MinVersion=1] YUV420AP10,
- [MinVersion=1] YUV422AP10,
- [MinVersion=1] YUV444AP10,
- };
- [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,
- kFrameSinkVideoCaptureDeviceAlreadyEndedOnFatalError,
- 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,
- [MinVersion=1] kWinMediaFoundationSystemPermissionDenied,
- [MinVersion=2] kVideoCaptureImplTimedOutOnStart,
- [MinVersion=3] kLacrosVideoCaptureDeviceProxyAlreadyEndedOnFatalError,
- [MinVersion=3] kLacrosVideoCaptureDeviceProxyEncounteredFatalError,
- [MinVersion=4] kScreenCaptureKitFailedGetShareableContent,
- [MinVersion=4] kScreenCaptureKitFailedAddStreamOutput,
- [MinVersion=4] kScreenCaptureKitFailedStartCapture,
- [MinVersion=4] kScreenCaptureKitFailedStopCapture,
- [MinVersion=4] kScreenCaptureKitStreamError,
- [MinVersion=4] kScreenCaptureKitFailedToFindSCDisplay,
- };
- [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;
- };
- [Stable, RenamedFrom="media.mojom.VideoFrameFeedback"]
- struct VideoCaptureFeedback {
- // 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.
- double resource_utilization;
- // The requested maximum frame-rate, float::inifinty used to signal no limit.
- float max_framerate_fps;
- // The requested maximum resolution (in sense of image area).
- // int::max used to signal no limit.
- int32 max_pixels;
- // 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.
- bool require_mapped_frame;
- // Reports which sizes the video frame got mapped by the consumer for CPU
- // access. Only reported when |kWebRtcUseModernFrameAdapter| is enabled.
- [MinVersion=1] array<gfx.mojom.Size>? mapped_sizes;
- // The frame that this feedback is associated with. Some consumers do not
- // break down their analysis on a per-frame basis; while some may expect to
- // hear any reports with a particular frame, so they can build a "timeline" of
- // performance (e.g. to know if they have recovered). This struct is often
- // funneled through multiple layers, so this frame_id may only be used by an
- // intermediate layer to help route the feedback accordingly.
- // This should usually be set to the same value as the |frame_feedback_id|
- // received with the frame (often from a received `ReadyFrameInBuffer`).
- [MinVersion=2] int32 frame_id = 0;
- // Indicates whether or not the value in |frame_id| is valid.
- // TODO(https://crbug.com/657632): Remove this and replace frame_id with an
- // optional type.
- [MinVersion=2] bool has_frame_id = false;
- };
- // 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;
- };
- // The result of an attempt by the client to start/stop cropping.
- // TODO(crbug.com/1247761): Remove kNotImplemented.
- enum CropRequestResult {
- kSuccess,
- kErrorGeneric,
- kUnsupportedCaptureDevice,
- kNotImplemented,
- kNonIncreasingCropVersion,
- kInvalidCropTarget,
- };
|