830c7a10095ac2784a27d51fa68459397a552f50
[platform/framework/web/chromium-efl.git] / media / capture / mojom / video_capture_types.mojom
1 // Copyright 2016 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 module media.mojom;
6
7 import "ui/gfx/geometry/mojom/geometry.mojom";
8
9 [Stable, Extensible]
10 enum VideoCapturePixelFormat {
11   UNKNOWN,
12   I420,
13   YV12,
14   I422,
15   I420A,
16   I444,
17   NV12,
18   NV21,
19   UYVY,
20   YUY2,
21   ARGB,
22   XRGB,
23   RGB24,
24   MJPEG,
25   YUV420P9,
26   YUV420P10,
27   YUV422P9,
28   YUV422P10,
29   YUV444P9,
30   YUV444P10,
31   YUV420P12,
32   YUV422P12,
33   YUV444P12,
34   Y16,
35   ABGR,
36   XBGR,
37   P016LE,
38   XR30,
39   XB30,
40   BGRA,
41   RGBAF16,
42   [MinVersion=1] I422A,
43   [MinVersion=1] I444A,
44   [MinVersion=1] YUV420AP10,
45   [MinVersion=1] YUV422AP10,
46   [MinVersion=1] YUV444AP10,
47   [MinVersion=2] NV12A,
48
49   [EnableIf=tizen_tbm_support]
50   TBM_SURFACE,
51 };
52
53 [Stable, Extensible]
54 enum ResolutionChangePolicy {
55   FIXED_RESOLUTION,
56   FIXED_ASPECT_RATIO,
57   ANY_WITHIN_LIMIT,
58 };
59
60 [Stable, Extensible]
61 enum PowerLineFrequency {
62   DEFAULT,
63   HZ_50,
64   HZ_60
65 };
66
67 [Stable, Extensible]
68 enum VideoFacingMode {
69   NONE,
70   USER,
71   ENVIRONMENT
72 };
73
74 [Stable, Extensible]
75 enum VideoCaptureApi {
76   LINUX_V4L2_SINGLE_PLANE,
77   WIN_MEDIA_FOUNDATION,
78   WIN_MEDIA_FOUNDATION_SENSOR,
79   WIN_DIRECT_SHOW,
80   MACOSX_AVFOUNDATION,
81   MACOSX_DECKLINK,
82   ANDROID_API1,
83   ANDROID_API2_LEGACY,
84   ANDROID_API2_FULL,
85   ANDROID_API2_LIMITED,
86   FUCHSIA_CAMERA3,
87   VIRTUAL_DEVICE,
88   UNKNOWN
89 };
90
91 [Stable, Extensible]
92 enum VideoCaptureTransportType {
93 // For AVFoundation Api, identify devices that are built-in or USB.
94   APPLE_USB_OR_BUILT_IN,
95   OTHER_TRANSPORT
96 };
97
98 [Stable, Extensible]
99 enum VideoCaptureBufferType {
100   kSharedMemory,
101   kSharedMemoryViaRawFileDescriptor_DEPRECATED,  // DEPRECATED, DO NOT USE
102   kMailboxHolder,
103   kGpuMemoryBuffer
104 };
105
106 // Represents capture device's support for different controls.
107 [Stable]
108 struct VideoCaptureControlSupport {
109   bool pan;
110   bool tilt;
111   bool zoom;
112 };
113
114 [Stable, Extensible]
115 enum VideoCaptureError {
116   kNone,
117   kVideoCaptureControllerInvalidOrUnsupportedVideoCaptureParametersRequested,
118   kVideoCaptureControllerIsAlreadyInErrorState,
119   kVideoCaptureManagerDeviceConnectionLost,
120   kFrameSinkVideoCaptureDeviceAlreadyEndedOnFatalError,
121   kFrameSinkVideoCaptureDeviceEncounteredFatalError,
122   kV4L2FailedToOpenV4L2DeviceDriverFile,
123   kV4L2ThisIsNotAV4L2VideoCaptureDevice,
124   kV4L2FailedToFindASupportedCameraFormat,
125   kV4L2FailedToSetVideoCaptureFormat,
126   kV4L2UnsupportedPixelFormat,
127   kV4L2FailedToSetCameraFramerate,
128   kV4L2ErrorRequestingMmapBuffers,
129   kV4L2AllocateBufferFailed,
130   kV4L2VidiocStreamonFailed,
131   kV4L2VidiocStreamoffFailed,
132   kV4L2FailedToVidiocReqbufsWithCount0,
133   kV4L2PollFailed,
134   kV4L2MultipleContinuousTimeoutsWhileReadPolling,
135   kV4L2FailedToDequeueCaptureBuffer,
136   kV4L2FailedToEnqueueCaptureBuffer,
137   kSingleClientVideoCaptureHostLostConnectionToDevice,
138   kSingleClientVideoCaptureDeviceLaunchAborted,
139   kDesktopCaptureDeviceWebrtcDesktopCapturerHasFailed,
140   kFileVideoCaptureDeviceCouldNotOpenVideoFile,
141   kDeviceCaptureLinuxFailedToCreateVideoCaptureDelegate,
142   kErrorFakeDeviceIntentionallyEmittingErrorEvent,
143   kDeviceClientTooManyFramesDroppedY16,
144   kDeviceMediaToMojoAdapterEncounteredUnsupportedBufferType,
145   kVideoCaptureManagerProcessDeviceStartQueueDeviceInfoNotFound,
146   kInProcessDeviceLauncherFailedToCreateDeviceInstance,
147   kServiceDeviceLauncherLostConnectionToDeviceFactoryDuringDeviceStart,
148   kServiceDeviceLauncherServiceRespondedWithDeviceNotFound,
149   kServiceDeviceLauncherConnectionLostWhileWaitingForCallback,
150   kIntentionalErrorRaisedByUnitTest,
151   kCrosHalV3FailedToStartDeviceThread,
152   kCrosHalV3DeviceDelegateMojoConnectionError,
153   kCrosHalV3DeviceDelegateFailedToGetCameraInfo,
154   kCrosHalV3DeviceDelegateMissingSensorOrientationInfo,
155   kCrosHalV3DeviceDelegateFailedToOpenCameraDevice,
156   kCrosHalV3DeviceDelegateFailedToInitializeCameraDevice,
157   kCrosHalV3DeviceDelegateFailedToConfigureStreams,
158   kCrosHalV3DeviceDelegateWrongNumberOfStreamsConfigured,
159   kCrosHalV3DeviceDelegateFailedToGetDefaultRequestSettings,
160   kCrosHalV3BufferManagerHalRequestedTooManyBuffers,
161   kCrosHalV3BufferManagerFailedToCreateGpuMemoryBuffer,
162   kCrosHalV3BufferManagerFailedToMapGpuMemoryBuffer,
163   kCrosHalV3BufferManagerUnsupportedVideoPixelFormat,
164   kCrosHalV3BufferManagerFailedToDupFd,
165   kCrosHalV3BufferManagerFailedToWrapGpuMemoryHandle,
166   kCrosHalV3BufferManagerFailedToRegisterBuffer,
167   kCrosHalV3BufferManagerProcessCaptureRequestFailed,
168   kCrosHalV3BufferManagerInvalidPendingResultId,
169   kCrosHalV3BufferManagerReceivedDuplicatedPartialMetadata,
170   kCrosHalV3BufferManagerIncorrectNumberOfOutputBuffersReceived,
171   kCrosHalV3BufferManagerInvalidTypeOfOutputBuffersReceived,
172   kCrosHalV3BufferManagerReceivedMultipleResultBuffersForFrame,
173   kCrosHalV3BufferManagerUnknownStreamInCamera3NotifyMsg,
174   kCrosHalV3BufferManagerReceivedInvalidShutterTime,
175   kCrosHalV3BufferManagerFatalDeviceError,
176   kCrosHalV3BufferManagerReceivedFrameIsOutOfOrder,
177   kCrosHalV3BufferManagerFailedToUnwrapReleaseFenceFd,
178   kCrosHalV3BufferManagerSyncWaitOnReleaseFenceTimedOut,
179   kCrosHalV3BufferManagerInvalidJpegBlob,
180   kAndroidFailedToAllocate,
181   kAndroidFailedToStartCapture,
182   kAndroidFailedToStopCapture,
183   kAndroidApi1CameraErrorCallbackReceived,
184   kAndroidApi2CameraDeviceErrorReceived,
185   kAndroidApi2CaptureSessionConfigureFailed,
186   kAndroidApi2ImageReaderUnexpectedImageFormat,
187   kAndroidApi2ImageReaderSizeDidNotMatchImageSize,
188   kAndroidApi2ErrorRestartingPreview,
189   kAndroidScreenCaptureUnsupportedFormat,
190   kAndroidScreenCaptureFailedToStartCaptureMachine,
191   kAndroidScreenCaptureTheUserDeniedScreenCapture,
192   kAndroidScreenCaptureFailedToStartScreenCapture,
193   kWinDirectShowCantGetCaptureFormatSettings,
194   kWinDirectShowFailedToGetNumberOfCapabilities,
195   kWinDirectShowFailedToGetCaptureDeviceCapabilities,
196   kWinDirectShowFailedToSetCaptureDeviceOutputFormat,
197   kWinDirectShowFailedToConnectTheCaptureGraph,
198   kWinDirectShowFailedToPauseTheCaptureDevice,
199   kWinDirectShowFailedToStartTheCaptureDevice,
200   kWinDirectShowFailedToStopTheCaptureGraph,
201   kWinMediaFoundationEngineIsNull,
202   kWinMediaFoundationEngineGetSourceFailed ,
203   kWinMediaFoundationFillPhotoCapabilitiesFailed ,
204   kWinMediaFoundationFillVideoCapabilitiesFailed,
205   kWinMediaFoundationNoVideoCapabilityFound,
206   kWinMediaFoundationGetAvailableDeviceMediaTypeFailed,
207   kWinMediaFoundationSetCurrentDeviceMediaTypeFailed,
208   kWinMediaFoundationEngineGetSinkFailed,
209   kWinMediaFoundationSinkQueryCapturePreviewInterfaceFailed,
210   kWinMediaFoundationSinkRemoveAllStreamsFailed,
211   kWinMediaFoundationCreateSinkVideoMediaTypeFailed,
212   kWinMediaFoundationConvertToVideoSinkMediaTypeFailed,
213   kWinMediaFoundationSinkAddStreamFailed,
214   kWinMediaFoundationSinkSetSampleCallbackFailed,
215   kWinMediaFoundationEngineStartPreviewFailed,
216   kWinMediaFoundationGetMediaEventStatusFailed,
217   kMacSetCaptureDeviceFailed,
218   kMacCouldNotStartCaptureDevice,
219   kMacReceivedFrameWithUnexpectedResolution,
220   kMacUpdateCaptureResolutionFailed,
221   kMacDeckLinkDeviceIdNotFoundInTheSystem,
222   kMacDeckLinkErrorQueryingInputInterface,
223   kMacDeckLinkErrorCreatingDisplayModeIterator,
224   kMacDeckLinkCouldNotFindADisplayMode,
225   kMacDeckLinkCouldNotSelectTheVideoFormatWeLike,
226   kMacDeckLinkCouldNotStartCapturing,
227   kMacDeckLinkUnsupportedPixelFormat,
228   kMacAvFoundationReceivedAVCaptureSessionRuntimeErrorNotification,
229   kAndroidApi2ErrorConfiguringCamera,
230   kCrosHalV3DeviceDelegateFailedToFlush,
231   kFuchsiaCameraDeviceDisconnected,
232   kFuchsiaCameraStreamDisconnected,
233   kFuchsiaSysmemDidNotSetImageFormat,
234   kFuchsiaSysmemInvalidBufferIndex,
235   kFuchsiaSysmemInvalidBufferSize,
236   kFuchsiaUnsupportedPixelFormat,
237   kFuchsiaFailedToMapSysmemBuffer,
238   kCrosHalV3DeviceContextDuplicatedClient,
239   kDesktopCaptureDeviceMacFailedStreamCreate,
240   kDesktopCaptureDeviceMacFailedStreamStart,
241   kCrosHalV3BufferManagerFailedToReserveBuffers,
242   [MinVersion=1] kWinMediaFoundationSystemPermissionDenied,
243   [MinVersion=2] kVideoCaptureImplTimedOutOnStart,
244   [MinVersion=3] kLacrosVideoCaptureDeviceProxyAlreadyEndedOnFatalError,
245   [MinVersion=3] kLacrosVideoCaptureDeviceProxyEncounteredFatalError,
246   [MinVersion=4] kScreenCaptureKitFailedGetShareableContent,
247   [MinVersion=4] kScreenCaptureKitFailedAddStreamOutput,
248   [MinVersion=4] kScreenCaptureKitFailedStartCapture,
249   [MinVersion=4] kScreenCaptureKitFailedStopCapture,
250   [MinVersion=4] kScreenCaptureKitStreamError,
251   [MinVersion=4] kScreenCaptureKitFailedToFindSCDisplay,
252   [MinVersion=5] kVideoCaptureControllerInvalid,
253   [MinVersion=5] kVideoCaptureDeviceFactoryChromeOSCreateDeviceFailed,
254   [MinVersion=5] kVideoCaptureControllerUnsupportedPixelFormat,
255   [MinVersion=5] kVideoCaptureDeviceAlreadyReleased,
256   [MinVersion=5] kVideoCaptureSystemDeviceIdNotFound,
257   [MinVersion=5] kVideoCaptureDeviceFactoryWinUnknownError,
258   [MinVersion=5] kWinMediaFoundationDeviceInitializationFailed,
259   [MinVersion=5] kWinMediaFoundationSourceCreationFailed,
260   [MinVersion=5] kWinDirectShowDeviceFilterCreationFailed,
261   [MinVersion=5] kWinDirectShowDeviceInitializationFailed,
262   [MinVersion=6] kVideoCaptureDeviceFactorySecondCreateDenied,
263   [MinVersion=7] kScreenCaptureKitResetStreamError,
264   [MinVersion=8] kWinMediaFoundationCameraBusy,
265 };
266
267 [Stable, Extensible]
268 enum VideoCaptureFrameDropReason {
269   kNone,
270   kDeviceClientFrameHasInvalidFormat,
271   kDeviceClientLibyuvConvertToI420Failed,
272   kV4L2BufferErrorFlagWasSet,
273   kV4L2InvalidNumberOfBytesInBuffer,
274   kAndroidThrottling,
275   kAndroidGetByteArrayElementsFailed,
276   kAndroidApi1UnexpectedDataLength,
277   kAndroidApi2AcquiredImageIsNull,
278   kWinDirectShowUnexpectedSampleLength,
279   kWinDirectShowFailedToGetMemoryPointerFromMediaSample,
280   kWinMediaFoundationReceivedSampleIsNull,
281   kWinMediaFoundationLockingBufferDelieveredNullptr,
282   kWinMediaFoundationGetBufferByIndexReturnedNull,
283   kBufferPoolMaxBufferCountExceeded,
284   kBufferPoolBufferAllocationFailed,
285   kVideoCaptureImplNotInStartedState,
286   kVideoCaptureImplFailedToWrapDataAsMediaVideoFrame,
287   kVideoTrackAdapterHasNoResolutionAdapters,
288   kResolutionAdapterFrameIsNotValid,
289   kResolutionAdapterWrappingFrameForCroppingFailed,
290   kResolutionAdapterTimestampTooCloseToPrevious_DEPRECATED,
291   kResolutionAdapterFrameRateIsHigherThanRequested,
292   kResolutionAdapterHasNoCallbacks,
293   kVideoTrackFrameDelivererNotEnabledReplacingWithBlackFrame,
294   kRendererSinkFrameDelivererIsNotStarted,
295   [MinVersion=1] kCropVersionNotCurrent_DEPRECATED,
296   [MinVersion=5] kGpuMemoryBufferMapFailed,
297   [MinVersion=12] kSubCaptureTargetVersionNotCurrent,
298 };
299
300 [Stable]
301 struct VideoCaptureFormat {
302   gfx.mojom.Size frame_size;
303   float frame_rate;
304   VideoCapturePixelFormat pixel_format;
305 };
306
307 [Stable]
308 struct VideoCaptureParams {
309   VideoCaptureFormat requested_format;
310   VideoCaptureBufferType buffer_type;
311   ResolutionChangePolicy resolution_change_policy;
312   PowerLineFrequency power_line_frequency;
313   bool enable_face_detection;
314   [EnableIf=tizen_multimedia]
315   bool lazy_start;
316
317   // TODO(https://crbug.com/1412589): remove this once HiDPI is enabled for
318   // all video capture sessions.
319   [MinVersion=1] bool is_high_dpi_enabled;
320 };
321
322 [Stable, RenamedFrom="media.mojom.VideoFrameFeedback"]
323 struct VideoCaptureFeedback {
324   // Reports that the frame incurred some fractional utilization of the
325   // downstream pipeline's per-frame processing capacity.
326   // See code comments in media::base::VideoFrameMetadata for a discussion of
327   // how utilization is interpreted. The capturer uses this information to
328   // auto-adjust the capture resolution based on performance variances in the
329   // live system environment.
330   // -1.0 means no value present.
331   double resource_utilization;
332
333   // The requested maximum frame-rate, float::inifinty used to signal no limit.
334   float max_framerate_fps;
335
336   // The requested maximum resolution (in sense of image area).
337   // int::max used to signal no limit.
338   int32 max_pixels;
339
340   // Set by the consumer to request a CPU readable frame.  Currently, only
341   // supported for NV12 frames obtained from the Windows Media Foundation
342   // camera capturer.
343   bool require_mapped_frame;
344
345   // DEPRECATED - DO NOT USE.  Only kept for backwards compatibility.
346   [MinVersion=1] array<gfx.mojom.Size>? DEPRECATED_mapped_sizes;
347
348   // The frame that this feedback is associated with. Some consumers do not
349   // break down their analysis on a per-frame basis; while some may expect to
350   // hear any reports with a particular frame, so they can build a "timeline" of
351   // performance (e.g. to know if they have recovered). This struct is often
352   // funneled through multiple layers, so this frame_id may only be used by an
353   // intermediate layer to help route the feedback accordingly.
354   // This should usually be set to the same value as the |frame_feedback_id|
355   // received with the frame (often from a received `ReadyFrameInBuffer`).
356   [MinVersion=2] int32 frame_id = 0;
357
358   // Indicates whether or not the value in |frame_id| is valid.
359   // TODO(https://crbug.com/657632): Remove this and replace frame_id with an
360   // optional type.
361   [MinVersion=2] bool has_frame_id = false;
362 };
363
364 // Contains one stride value per image plane. Stride means the number of bytes
365 // per row. If the image format uses fewer than kMaxPlanes planes, the values
366 // for higher plane indices are ignored. For example, for a YUV format, plane
367 // index 0 corresponds to the Y plane, index 1 to the U plane, and index 2 to
368 // the V plane.
369 struct PlaneStrides {
370   // Size must be kept in sync with media::VideoFrame::kMaxPlanes.
371   array<uint32, 4> stride_by_plane;
372 };
373
374 // Represents information about a capture device.
375 // |device_id| represents a unique id of a physical device. Since the same
376 // physical device may be accessible through different APIs |capture_api|
377 // disambiguates the API.
378 [Stable]
379 struct VideoCaptureDeviceDescriptor {
380   string display_name;
381   string device_id;
382   string model_id;
383   VideoFacingMode facing_mode;
384   VideoCaptureApi capture_api;
385   VideoCaptureControlSupport control_support;
386   VideoCaptureTransportType transport_type;
387 };
388
389 // Bundles a VideoCaptureDeviceDescriptor with corresponding supported
390 // video formats.
391 [Stable]
392 struct VideoCaptureDeviceInfo {
393   VideoCaptureDeviceDescriptor descriptor;
394   array<VideoCaptureFormat> supported_formats;
395 };
396
397 enum SubCaptureTargetType {
398   kCropTarget,
399   kRestrictionTarget
400 };
401
402 // The result of an attempt by the client to start/stop cropping,
403 // restricting or otherwise applying a sub-capture target.
404 // TODO(crbug.com/1264849): Remove kNotImplemented.
405 enum ApplySubCaptureTargetResult {
406   kSuccess,
407   kErrorGeneric,
408   kUnsupportedCaptureDevice,
409   kNotImplemented,
410   kNonIncreasingVersion,
411   kInvalidTarget,
412 };
413
414 enum DeviceEnumerationResult {
415   kSuccess,
416   kUnknownError,
417   kErrorCaptureServiceCrash
418 };