// Copyright 2016 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 mojom; import "media/capture/mojo/video_capture_types.mojom"; import "media/mojo/interfaces/audio_parameters.mojom"; [Native] enum MediaDeviceType; [Native] struct MediaDeviceInfo; // The values for this enum match the ones defined in // https://w3c.github.io/mediacapture-main/#def-constraint-facingMode // with the addition of NONE, which would map to the empty string in // JavaScript. enum FacingMode { NONE, USER, ENVIRONMENT, LEFT, RIGHT }; struct VideoInputDeviceCapabilities { string device_id; array formats; FacingMode facing_mode; }; struct AudioInputDeviceCapabilities { string device_id; media.mojom.AudioParameters parameters; }; // This object lives in the browser and is responsible for processing device // enumeration requests and managing subscriptions for device-change // notifications. interface MediaDevicesDispatcherHost { // The reply always contains NUM_MEDIA_DEVICE_TYPES elements. // The result is indexed by device type as defined in // content/common/media/media_devices.h. EnumerateDevices(bool request_audio_input, bool request_video_input, bool request_audio_output) => (array> enumeration); // Returns a list of video devices and their capabilities. // If there is a user-preferred device, it is the first in the result. // The result of this function is intended for the implementation details // of algorithms such as settings selection for getUserMedia. // Do not expose the data contained in the result of this function to // JavaScript. GetVideoInputCapabilities() => (array video_input_device_capabilities); // Returns a list of all video formats supported by a given device, regardless // of whether the device is being used or not. If the given |device_id| is // invalid, the result is empty. GetAllVideoInputDeviceFormats(string device_id) => (array formats); // Returns a list of video formats currently available for a given device. // When the device is in use, it is expected that the result will contain only // one entry. When the device is not in use, the result should be the same as // for GetAllVideoInputDeviceFormats. If the given |device_id| is not valid, // the result is empty. GetAvailableVideoInputDeviceFormats(string device_id) => (array formats); // Returns a list of audio input devices and their capabilities. // If there is a user-preferred device, it is the first in the result. // Otherwise, the system-default device is the first in the result. // The result of this function is intended for the implementation details // of algorithms such as settings selection for getUserMedia. // Do not expose the data contained in the result of this function to // JavaScript. GetAudioInputCapabilities() => (array audio_input_device_capabilities); // Creates a subscription for device-change notifications for the calling // frame/security origin. It is the responsibility of the caller to send // |subscription_id| values that are unique per device type. // Requests to create a subscription with an ID that already exists for type // |type| are invalid and result in a renderer crash. SubscribeDeviceChangeNotifications(MediaDeviceType type, uint32 subscription_id); // Removes a subscription to device-change notifications for the calling // frame. The caller is responsible for sending |subscription_id| values that // that refer to existing subscriptions for type |type|. Requests to remove // a nonexisting subscription with are invalid and result in a renderer crash. UnsubscribeDeviceChangeNotifications(MediaDeviceType type, uint32 subscription_id); }; // This object lives in the renderer process and is used by the browser process // to pass device-change notifications to the renderer. interface MediaDevicesListener { // Called to notify a change in the set of devices of type |type| for // subscription |subscription_id|. |device_infos| contains the new list of // devices of type |type|, with device and group IDs obfuscated according to // the subscription's security origin. OnDevicesChanged(MediaDeviceType type, uint32 subscription_id, array device_infos); };