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.
7 import "ui/gfx/geometry/mojom/geometry.mojom";
10 enum VideoCapturePixelFormat {
44 [MinVersion=1] YUV420AP10,
45 [MinVersion=1] YUV422AP10,
46 [MinVersion=1] YUV444AP10,
49 [EnableIf=tizen_tbm_support]
54 enum ResolutionChangePolicy {
61 enum PowerLineFrequency {
68 enum VideoFacingMode {
75 enum VideoCaptureApi {
76 LINUX_V4L2_SINGLE_PLANE,
78 WIN_MEDIA_FOUNDATION_SENSOR,
92 enum VideoCaptureTransportType {
93 // For AVFoundation Api, identify devices that are built-in or USB.
94 APPLE_USB_OR_BUILT_IN,
99 enum VideoCaptureBufferType {
101 kSharedMemoryViaRawFileDescriptor_DEPRECATED, // DEPRECATED, DO NOT USE
106 // Represents capture device's support for different controls.
108 struct VideoCaptureControlSupport {
115 enum VideoCaptureError {
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,
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,
268 enum VideoCaptureFrameDropReason {
270 kDeviceClientFrameHasInvalidFormat,
271 kDeviceClientLibyuvConvertToI420Failed,
272 kV4L2BufferErrorFlagWasSet,
273 kV4L2InvalidNumberOfBytesInBuffer,
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,
301 struct VideoCaptureFormat {
302 gfx.mojom.Size frame_size;
304 VideoCapturePixelFormat pixel_format;
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]
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;
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;
333 // The requested maximum frame-rate, float::inifinty used to signal no limit.
334 float max_framerate_fps;
336 // The requested maximum resolution (in sense of image area).
337 // int::max used to signal no limit.
340 // Set by the consumer to request a CPU readable frame. Currently, only
341 // supported for NV12 frames obtained from the Windows Media Foundation
343 bool require_mapped_frame;
345 // DEPRECATED - DO NOT USE. Only kept for backwards compatibility.
346 [MinVersion=1] array<gfx.mojom.Size>? DEPRECATED_mapped_sizes;
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;
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
361 [MinVersion=2] bool has_frame_id = false;
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
369 struct PlaneStrides {
370 // Size must be kept in sync with media::VideoFrame::kMaxPlanes.
371 array<uint32, 4> stride_by_plane;
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.
379 struct VideoCaptureDeviceDescriptor {
383 VideoFacingMode facing_mode;
384 VideoCaptureApi capture_api;
385 VideoCaptureControlSupport control_support;
386 VideoCaptureTransportType transport_type;
389 // Bundles a VideoCaptureDeviceDescriptor with corresponding supported
392 struct VideoCaptureDeviceInfo {
393 VideoCaptureDeviceDescriptor descriptor;
394 array<VideoCaptureFormat> supported_formats;
397 enum SubCaptureTargetType {
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 {
408 kUnsupportedCaptureDevice,
410 kNonIncreasingVersion,
414 enum DeviceEnumerationResult {
417 kErrorCaptureServiceCrash