blob: 85e82ebbec05b6b3285e6e3171fef0a6cd9bcbe7 [file] [log] [blame]
// 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 blink.mojom;
import "media/capture/mojom/video_capture_types.mojom";
import "media/mojo/interfaces/audio_parameters.mojom";
enum MediaDeviceType {
MEDIA_AUDIO_INPUT,
MEDIA_VIDEO_INPUT,
MEDIA_AUDIO_OUTPUT,
NUM_MEDIA_DEVICE_TYPES
};
// 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 MediaDeviceInfo {
string device_id;
string label;
string group_id;
};
struct VideoInputDeviceCapabilities {
string device_id;
string group_id;
array<media.mojom.VideoCaptureFormat> formats;
FacingMode facing_mode;
};
struct AudioInputDeviceCapabilities {
string device_id;
string group_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 {
// Enumerates media devices and capabilities. The reply contains the
// |enumeration| and |video_input_device_capabilities| arrays. The
// |enumeration| array always has NUM_MEDIA_DEVICE_TYPES elements indexed by
// device type as defined in MediaDeviceType. Each element of |enumeration| is
// an array with as many elements as devices of the corresponding type exist
// in the system, or zero if the device types was not requested. Similarly,
// the number of elements in |video_input_device_capabilities| is equal to the
// number of video input devices in the system, or zero if not requested.
EnumerateDevices(bool request_audio_input,
bool request_video_input,
bool request_audio_output,
bool request_video_input_capabilities)
=> (array<array<MediaDeviceInfo>> enumeration,
array<VideoInputDeviceCapabilities> video_input_device_capabilities);
// 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<VideoInputDeviceCapabilities> 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<media.mojom.VideoCaptureFormat> 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<media.mojom.VideoCaptureFormat> 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<AudioInputDeviceCapabilities> audio_input_device_capabilities);
// Subscribes |listener| to device-change notifications for the calling
// frame/security origin. |listener| will receive notifications only for
// device types decided by the boolean fields. Closing the pipe will cancel
// the subscription.
AddMediaDevicesListener(bool subscribe_audio_input,
bool subscribe_video_input,
bool subscribe_audio_output,
MediaDevicesListener listener);
};
// 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|.
// |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,
array<MediaDeviceInfo> device_infos);
};