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