15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This file defines the <code>PPB_DeviceRef_Dev</code> interface.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)[generate_thunk]
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)label Chrome {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  M18 = 0.1
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Defines the callback type to receive device change notifications for
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * <code>PPB_AudioInput_Dev.MonitorDeviceChange()</code> and
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * <code>PPB_VideoCapture_Dev.MonitorDeviceChange()</code>.
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param[inout] user_data The opaque pointer that the caller passed into
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * <code>MonitorDeviceChange()</code>.
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param[in] device_count How many devices in the array.
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param[in] devices An array of <code>PPB_DeviceRef_Dev</code>. Please note
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * that the ref count of the elements is not increased on behalf of the plugin.
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef void PP_MonitorDeviceChangeCallback(
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    [inout] mem_t user_data,
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    [in] uint32_t device_count,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    [in, size_is(device_count)] PP_Resource[] devices);
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Device types.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)[assert_size(4)]
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum PP_DeviceType_Dev {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_DEVICETYPE_DEV_INVALID = 0,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_DEVICETYPE_DEV_AUDIOCAPTURE = 1,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_DEVICETYPE_DEV_VIDEOCAPTURE = 2
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)interface PPB_DeviceRef_Dev {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Determines if the provided resource is a device reference.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a generic
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * resource.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return A <code>PP_Bool</code> that is <code>PP_TRUE</code> if the given
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * resource is a device reference, otherwise <code>PP_FALSE</code>.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Bool IsDeviceRef([in] PP_Resource resource);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Gets the device type.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] device_ref A <code>PP_Resource</code> corresponding to a device
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * reference.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return A <code>PP_DeviceType_Dev</code> value.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  [on_failure=PP_DEVICETYPE_DEV_INVALID]
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_DeviceType_Dev GetType([in] PP_Resource device_ref);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Gets the device name.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] device_ref A <code>PP_Resource</code> corresponding to a device
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * reference.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return A <code>PP_Var</code> of type <code>PP_VARTYPE_STRING</code>
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * containing the name of the device if successful; a <code>PP_Var</code> of
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * type <code>PP_VARTYPE_UNDEFINED</code> if failed.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Var GetName([in] PP_Resource device_ref);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
77