123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- // Copyright 2021 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 crosapi.mojom;
- import "media/capture/mojom/image_capture.mojom";
- import "media/capture/mojom/video_capture_types.mojom";
- import "mojo/public/mojom/base/shared_memory.mojom";
- import "mojo/public/mojom/base/time.mojom";
- import "mojo/public/mojom/base/unguessable_token.mojom";
- import "ui/gfx/geometry/mojom/geometry.mojom";
- import "ui/gfx/mojom/native_handle_types.mojom";
- // This API is used to forward requests/respond of video_capture::DeviceFactory
- // and video_capture::Device from Lacros (Client) to the actual implementation
- // in Ash-Chrome.
- // In addition, to avoid affecting too much on non-Chrome OS components and
- // depends on components which will cause cyclic dependency, we used some
- // similar but simplified version of structures rather than directly depends on
- // the structures in other components.
- // Similar to |gfx.mojom.NativePixmapHandle| but does not contain fields which
- // are not available on Chrome OS.
- // Next min field ID: 2
- [Stable]
- struct NativePixmapHandle {
- array<gfx.mojom.NativePixmapPlane> planes@0;
- uint64 modifier@1;
- };
- // Similar to |gfx.mojom.GpuMemoryBufferPlatformHandle| but does not contain
- // fields which are not available on Chrome OS.
- // Next min field ID: 2
- [Stable]
- union GpuMemoryBufferPlatformHandle {
- mojo_base.mojom.UnsafeSharedMemoryRegion shared_memory_handle@0;
- NativePixmapHandle native_pixmap_handle@1;
- };
- // Similar to |gfx.mojom.GpuMemoryBufferHandle| but does not depend on
- // |gfx.mojom.GpuMemoryBufferPlatformHandle|.
- // Next min field ID: 4
- [Stable]
- struct GpuMemoryBufferHandle {
- int32 id@0;
- uint32 offset@1;
- uint32 stride@2;
- GpuMemoryBufferPlatformHandle? platform_handle@3;
- };
- // Similar to |media.mojom.VideoBufferHandle| but does not contain fields which
- // are not used in Chrome OS implementation.
- // Next min field ID: 3
- [Stable, Uuid="0259e126-6da3-4cbb-8774-da1a7bf7f2f8"]
- union VideoBufferHandle {
- handle<shared_buffer> shared_buffer_handle@0;
- GpuMemoryBufferHandle gpu_memory_buffer_handle@1;
- // TODO(https://crbug.com/1261313): Until unions truly support versioning, we
- // don't have a way to check this/it ends up ignored. Currently this is only
- // set by code in ash to be read by lacros, which is strictly guaranteed to be
- // flowing from an older version to a newer version, so this is fine. It can
- // be proxied by checking if VideoCaptureDevice supports RequestRefreshFrame,
- // which was added at the same time.
- [MinVersion=1]
- mojo_base.mojom.ReadOnlySharedMemoryRegion read_only_shmem_region@2;
- };
- [Stable, Extensible]
- enum DeviceAccessResultCode {
- NOT_INITIALIZED,
- SUCCESS,
- ERROR_DEVICE_NOT_FOUND
- };
- // Identical to |media.mojom.VideoRotation|.
- [Stable, Extensible]
- enum VideoRotation {
- kVideoRotation0,
- kVideoRotation90,
- kVideoRotation180,
- kVideoRotation270,
- };
- // Similar to |media.mojom.VideoFrameInfo| but without some fields which does
- // not implement on Chrome OS. In addition, since most of the fields in
- // |metadata| field is not used in Chrome OS implementation, we also simplify
- // the structure by only containing |rotation| and |reference_time|.
- // Next min field ID: 6
- [Stable]
- struct VideoFrameInfo {
- mojo_base.mojom.TimeDelta timestamp@0;
- media.mojom.VideoCapturePixelFormat pixel_format@1;
- gfx.mojom.Size coded_size@2;
- gfx.mojom.Rect visible_rect@3;
- // The following fields are the fields we may use for constructing
- // media::VideoFrameMetadata.
- VideoRotation rotation@4;
- mojo_base.mojom.TimeTicks reference_time@5;
- };
- // Similar to |video_capture.mojom.ReadyFrameInBuffer| but does not depend on
- // |media.mojom.VideoFrameInfo| and
- // |video_capture.mojom.ScopedAccessPermission|.
- // Next min field ID: 4
- [Stable]
- struct ReadyFrameInBuffer {
- int32 buffer_id@0;
- int32 frame_feedback_id@1;
- pending_remote<ScopedAccessPermission> access_permission@2;
- VideoFrameInfo frame_info@3;
- };
- // Identical to |video_capture.mojom.ScopedAccessPermission|.
- // Next min method ID: 0
- [Stable, Uuid="bf0f3239-26d2-45f8-9875-490563f5af97"]
- interface ScopedAccessPermission {};
- // Similar to |video_capture.mojom.VideoFrameHandler| but depends on simplified
- // structures.
- // Next min method ID: 11
- [Stable, Uuid="590ab36a-9162-4c9d-8429-1753108825ea"]
- interface VideoFrameHandler {
- OnNewBuffer@0(int32 buffer_id, VideoBufferHandle buffer_handle);
- OnFrameReadyInBuffer@1(ReadyFrameInBuffer buffer,
- array<ReadyFrameInBuffer> scaled_buffers);
- OnBufferRetired@2(int32 buffer_id);
- OnError@3(media.mojom.VideoCaptureError error);
- OnFrameDropped@4(media.mojom.VideoCaptureFrameDropReason reason);
- [MinVersion=2]
- OnNewCropVersion@10(uint32 crop_version);
- [MinVersion=1]
- OnFrameWithEmptyRegionCapture@9();
- OnLog@5(string message);
- OnStarted@6();
- OnStartedUsingGpuDecode@7();
- OnStopped@8();
- };
- // Similar to |video_capture.mojom.Device| but depends on simplified structures.
- // Next min method ID: 8
- [Stable, Uuid="f50f1672-d512-451e-9c70-998ed45ab596"]
- interface VideoCaptureDevice {
- // It is assumed that it will be called only once.
- Start@0(media.mojom.VideoCaptureParams requested_settings,
- pending_remote<VideoFrameHandler> handler);
- MaybeSuspend@1();
- Resume@2();
- GetPhotoState@3() => (media.mojom.PhotoState? capabilities);
- SetPhotoOptions@4(media.mojom.PhotoSettings settings) => (bool success);
- TakePhoto@5() => (media.mojom.Blob? blob);
- ProcessFeedback@6(media.mojom.VideoCaptureFeedback feedback);
- [MinVersion = 1]
- RequestRefreshFrame@7();
- };
- // Similar to |video_capture.mojom.DeviceFactory| but depends on simplified
- // structures.
- // Next min method ID: 2
- [Stable, Uuid="b79ed8be-cf39-4d0d-a819-2d299022124a"]
- interface VideoCaptureDeviceFactory {
- GetDeviceInfos@0()
- => (array<media.mojom.VideoCaptureDeviceInfo> device_infos);
- CreateDevice@1(string device_id,
- pending_receiver<VideoCaptureDevice> device_receiver)
- => (DeviceAccessResultCode result_code);
- };
|