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,
50 [EnableIf=tizen_tbm_support]
55 enum ResolutionChangePolicy {
62 enum PowerLineFrequency {
69 enum VideoFacingMode {
76 enum VideoCaptureApi {
77 LINUX_V4L2_SINGLE_PLANE,
79 WIN_MEDIA_FOUNDATION_SENSOR,
93 enum VideoCaptureTransportType {
94 // For AVFoundation Api, identify devices that are built-in or USB.
95 APPLE_USB_OR_BUILT_IN,
100 enum VideoCaptureBufferType {
102 kSharedMemoryViaRawFileDescriptor_DEPRECATED, // DEPRECATED, DO NOT USE
107 // Represents capture device's support for different controls.
109 struct VideoCaptureControlSupport {
116 enum VideoCaptureError {
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,
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,
269 enum VideoCaptureFrameDropReason {
271 kDeviceClientFrameHasInvalidFormat,
272 kDeviceClientLibyuvConvertToI420Failed,
273 kV4L2BufferErrorFlagWasSet,
274 kV4L2InvalidNumberOfBytesInBuffer,
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,
302 struct VideoCaptureFormat {
303 gfx.mojom.Size frame_size;
305 VideoCapturePixelFormat pixel_format;
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]
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;
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;
334 // The requested maximum frame-rate, float::inifinty used to signal no limit.
335 float max_framerate_fps;
337 // The requested maximum resolution (in sense of image area).
338 // int::max used to signal no limit.
341 // Set by the consumer to request a CPU readable frame. Currently, only
342 // supported for NV12 frames obtained from the Windows Media Foundation
344 bool require_mapped_frame;
346 // DEPRECATED - DO NOT USE. Only kept for backwards compatibility.
347 [MinVersion=1] array<gfx.mojom.Size>? DEPRECATED_mapped_sizes;
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;
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
362 [MinVersion=2] bool has_frame_id = false;
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
370 struct PlaneStrides {
371 // Size must be kept in sync with media::VideoFrame::kMaxPlanes.
372 array<uint32, 4> stride_by_plane;
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.
380 struct VideoCaptureDeviceDescriptor {
384 VideoFacingMode facing_mode;
385 VideoCaptureApi capture_api;
386 VideoCaptureControlSupport control_support;
387 VideoCaptureTransportType transport_type;
390 // Bundles a VideoCaptureDeviceDescriptor with corresponding supported
393 struct VideoCaptureDeviceInfo {
394 VideoCaptureDeviceDescriptor descriptor;
395 array<VideoCaptureFormat> supported_formats;
398 enum SubCaptureTargetType {
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 {
409 kUnsupportedCaptureDevice,
411 kNonIncreasingVersion,
415 enum DeviceEnumerationResult {
418 kErrorCaptureServiceCrash