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)
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* From dev/ppb_audio_input_dev.idl modified Thu Dec 12 15:35:39 2013. */
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_C_DEV_PPB_AUDIO_INPUT_DEV_H_
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_C_DEV_PPB_AUDIO_INPUT_DEV_H_
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/dev/ppb_device_ref_dev.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_array_output.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_bool.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_completion_callback.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_instance.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_macros.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_resource.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_stdint.h"
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/c/pp_time.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define PPB_AUDIO_INPUT_DEV_INTERFACE_0_3 "PPB_AudioInput(Dev);0.3"
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define PPB_AUDIO_INPUT_DEV_INTERFACE_0_4 "PPB_AudioInput(Dev);0.4"
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define PPB_AUDIO_INPUT_DEV_INTERFACE PPB_AUDIO_INPUT_DEV_INTERFACE_0_4
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @file
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This file defines the <code>PPB_AudioInput_Dev</code> interface, which
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * provides realtime audio input capture.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @addtogroup Typedefs
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @{
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * <code>PPB_AudioInput_Callback</code> defines the type of an audio callback
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * function used to provide the audio buffer with data. This callback will be
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called on a separate thread from the creation thread.
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param[in] sample_buffer A buffer providing audio input data.
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param[in] buffer_size_in_bytes The size of the buffer in bytes.
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param[in] latency The time that has elapsed since the data was recorded.
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param[inout] user_data An opaque pointer that was passed into
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * <code>PPB_AudioInput_Dev.Open()</code>.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*PPB_AudioInput_Callback)(const void* sample_buffer,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        uint32_t buffer_size_in_bytes,
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                        PP_TimeDelta latency,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        void* user_data);
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef void (*PPB_AudioInput_Callback_0_3)(const void* sample_buffer,
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                            uint32_t buffer_size_in_bytes,
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                            void* user_data);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @addtogroup Interfaces
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @{
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The <code>PPB_AudioInput_Dev</code> interface contains pointers to several
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * functions for handling audio input resources.
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * TODO(brettw) before moving out of dev, we need to resolve the issue of
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * the mismatch between the current audio config interface and this one.
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * In particular, the params for input assume stereo, but this class takes
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * everything as mono. We either need to not use an audio config resource, or
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * add mono support.
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * In addition, RecommendSampleFrameCount is completely wrong for audio input.
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * RecommendSampleFrameCount returns the frame count for the current
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * low-latency output device, which is likely inappropriate for a random input
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * device. We may want to move the "recommend" functions to the input or output
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * classes rather than the config.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct PPB_AudioInput_Dev_0_4 {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Creates an audio input resource.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] instance A <code>PP_Instance</code> identifying one instance of
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * a module.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return A <code>PP_Resource</code> corresponding to an audio input resource
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * if successful, 0 if failed.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Resource (*Create)(PP_Instance instance);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Determines if the given resource is an audio input resource.
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> containing a resource.
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return A <code>PP_Bool</code> containing <code>PP_TRUE</code> if the given
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * resource is an audio input resource, otherwise <code>PP_FALSE</code>.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Bool (*IsAudioInput)(PP_Resource resource);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Enumerates audio input devices.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] audio_input A <code>PP_Resource</code> corresponding to an audio
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * input resource.
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @param[in] output An output array which will receive
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * <code>PPB_DeviceRef_Dev</code> resources on success. Please note that the
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * ref count of those resources has already been increased by 1 for the
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * caller.
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to run on
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * completion.
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return An error code from <code>pp_errors.h</code>.
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*EnumerateDevices)(PP_Resource audio_input,
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              struct PP_ArrayOutput output,
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              struct PP_CompletionCallback callback);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * Requests device change notifications.
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   *
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @param[in] audio_input A <code>PP_Resource</code> corresponding to an audio
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * input resource.
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @param[in] callback The callback to receive notifications. If not NULL, it
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * will be called once for the currently available devices, and then every
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * time the list of available devices changes. All calls will happen on the
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * same thread as the one on which MonitorDeviceChange() is called. It will
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * receive notifications until <code>audio_input</code> is destroyed or
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * <code>MonitorDeviceChange()</code> is called to set a new callback for
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * <code>audio_input</code>. You can pass NULL to cancel sending
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * notifications.
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @param[inout] user_data An opaque pointer that will be passed to
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * <code>callback</code>.
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   *
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @return An error code from <code>pp_errors.h</code>.
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   */
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int32_t (*MonitorDeviceChange)(PP_Resource audio_input,
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 PP_MonitorDeviceChangeCallback callback,
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 void* user_data);
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /**
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Opens an audio input device. No sound will be captured until
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * StartCapture() is called.
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] audio_input A <code>PP_Resource</code> corresponding to an audio
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * input resource.
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] device_ref Identifies an audio input device. It could be one of
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * the resource in the array returned by EnumerateDevices(), or 0 which means
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * the default device.
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] config A <code>PPB_AudioConfig</code> audio configuration
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * resource.
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] audio_input_callback A <code>PPB_AudioInput_Callback</code>
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * function that will be called when data is available.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[inout] user_data An opaque pointer that will be passed into
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>audio_input_callback</code>.
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to run when this
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * open operation is completed.
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return An error code from <code>pp_errors.h</code>.
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*Open)(PP_Resource audio_input,
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  PP_Resource device_ref,
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  PP_Resource config,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  PPB_AudioInput_Callback audio_input_callback,
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  void* user_data,
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  struct PP_CompletionCallback callback);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Returns an audio config resource for the given audio input resource.
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] audio_input A <code>PP_Resource</code> corresponding to an audio
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * input resource.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return A <code>PP_Resource</code> containing the audio config resource if
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * successful.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Resource (*GetCurrentConfig)(PP_Resource audio_input);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Starts the capture of the audio input resource and begins periodically
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * calling the callback.
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] audio_input A <code>PP_Resource</code> corresponding to an audio
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * input resource.
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return A <code>PP_Bool</code> containing <code>PP_TRUE</code> if
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * successful, otherwise <code>PP_FALSE</code>.
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Also returns <code>PP_TRUE</code> (and is a no-op) if called while capture
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * is already started.
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Bool (*StartCapture)(PP_Resource audio_input);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Stops the capture of the audio input resource.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] audio_input A PP_Resource containing the audio input resource.
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return A <code>PP_Bool</code> containing <code>PP_TRUE</code> if
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * successful, otherwise <code>PP_FALSE</code>.
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Also returns <code>PP_TRUE</code> (and is a no-op) if called while capture
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * is already stopped. If a buffer is being captured, StopCapture will block
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * until the call completes.
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Bool (*StopCapture)(PP_Resource audio_input);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Closes the audio input device, and stops capturing if necessary. It is
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * not valid to call Open() again after a call to this method.
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * If an audio input resource is destroyed while a device is still open, then
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * it will be implicitly closed, so you are not required to call this method.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] audio_input A <code>PP_Resource</code> corresponding to an audio
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * input resource.
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void (*Close)(PP_Resource audio_input);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochtypedef struct PPB_AudioInput_Dev_0_4 PPB_AudioInput_Dev;
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct PPB_AudioInput_Dev_0_3 {
214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PP_Resource (*Create)(PP_Instance instance);
215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PP_Bool (*IsAudioInput)(PP_Resource resource);
216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int32_t (*EnumerateDevices)(PP_Resource audio_input,
217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              struct PP_ArrayOutput output,
218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              struct PP_CompletionCallback callback);
219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int32_t (*MonitorDeviceChange)(PP_Resource audio_input,
220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                 PP_MonitorDeviceChangeCallback callback,
221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                 void* user_data);
222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int32_t (*Open)(PP_Resource audio_input,
223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                  PP_Resource device_ref,
224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                  PP_Resource config,
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  PPB_AudioInput_Callback_0_3 audio_input_callback,
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  void* user_data,
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  struct PP_CompletionCallback callback);
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PP_Resource (*GetCurrentConfig)(PP_Resource audio_input);
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PP_Bool (*StartCapture)(PP_Resource audio_input);
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PP_Bool (*StopCapture)(PP_Resource audio_input);
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void (*Close)(PP_Resource audio_input);
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @}
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  /* PPAPI_C_DEV_PPB_AUDIO_INPUT_DEV_H_ */
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
239