|  | // Copyright (c) 2012 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. | 
|  |  | 
|  | #ifndef PPAPI_CPP_AUDIO_H_ | 
|  | #define PPAPI_CPP_AUDIO_H_ | 
|  |  | 
|  | #include "ppapi/c/pp_stdint.h" | 
|  | #include "ppapi/c/ppb_audio.h" | 
|  | #include "ppapi/cpp/audio_config.h" | 
|  | #include "ppapi/cpp/resource.h" | 
|  |  | 
|  | /// @file | 
|  | /// This file defines the API to create realtime stereo audio streaming | 
|  | /// capabilities. | 
|  |  | 
|  | namespace pp { | 
|  |  | 
|  | class InstanceHandle; | 
|  |  | 
|  | /// An audio resource. Refer to the | 
|  | /// <a href="/native-client/devguide/coding/audio.html">Audio</a> | 
|  | /// chapter in the Developer's Guide for information on using this interface. | 
|  | class Audio : public Resource { | 
|  | public: | 
|  |  | 
|  | /// An empty constructor for an Audio resource. | 
|  | Audio() {} | 
|  |  | 
|  | /// A constructor that creates an Audio resource. No sound will be heard | 
|  | /// until StartPlayback() is called. The callback is called with the buffer | 
|  | /// address and given user data whenever the buffer needs to be filled. | 
|  | /// From within the callback, you should not call <code>PPB_Audio</code> | 
|  | /// functions. The callback will be called on a different thread than the one | 
|  | /// which created the interface. For performance-critical applications (such | 
|  | /// as low-latency audio), the callback should avoid blocking or calling | 
|  | /// functions that can obtain locks, such as malloc. The layout and the size | 
|  | /// of the buffer passed to the audio callback will be determined by | 
|  | /// the device configuration and is specified in the <code>AudioConfig</code> | 
|  | /// documentation. | 
|  | /// | 
|  | /// @param[in] instance The instance with which this resource will be | 
|  | /// associated. | 
|  | /// @param[in] config An <code>AudioConfig</code> containing the audio config | 
|  | /// resource. | 
|  | /// @param[in] callback A <code>PPB_Audio_Callback</code> callback function | 
|  | /// that the browser calls when it needs more samples to play. | 
|  | /// @param[in] user_data A pointer to user data used in the callback function. | 
|  | Audio(const InstanceHandle& instance, | 
|  | const AudioConfig& config, | 
|  | PPB_Audio_Callback callback, | 
|  | void* user_data); | 
|  |  | 
|  | /// A constructor that creates an Audio resource. | 
|  | /// | 
|  | /// @param[in] instance The instance with which this resource will be | 
|  | /// associated. | 
|  | /// @param[in] config An <code>AudioConfig</code> containing the audio config | 
|  | /// resource. | 
|  | /// @param[in] callback A <code>PPB_Audio_Callback_1_0</code> callback | 
|  | /// function that the browser calls when it needs more samples to play. | 
|  | /// @param[in] user_data A pointer to user data used in the callback function. | 
|  | Audio(const InstanceHandle& instance, | 
|  | const AudioConfig& config, | 
|  | PPB_Audio_Callback_1_0 callback, | 
|  | void* user_data); | 
|  |  | 
|  | /// Getter function for returning the internal <code>PPB_AudioConfig</code> | 
|  | /// struct. | 
|  | /// | 
|  | /// @return A mutable reference to the PPB_AudioConfig struct. | 
|  | AudioConfig& config() { return config_; } | 
|  |  | 
|  | /// Getter function for returning the internal <code>PPB_AudioConfig</code> | 
|  | /// struct. | 
|  | /// | 
|  | /// @return A const reference to the internal <code>PPB_AudioConfig</code> | 
|  | /// struct. | 
|  | const AudioConfig& config() const { return config_; } | 
|  |  | 
|  | /// StartPlayback() starts playback of audio. | 
|  | /// | 
|  | /// @return true if successful, otherwise false. | 
|  | bool StartPlayback(); | 
|  |  | 
|  | /// StopPlayback stops playback of audio. | 
|  | /// | 
|  | /// @return true if successful, otherwise false. | 
|  | bool StopPlayback(); | 
|  |  | 
|  | private: | 
|  | AudioConfig config_; | 
|  | bool use_1_0_interface_; | 
|  | }; | 
|  |  | 
|  | }  // namespace pp | 
|  |  | 
|  | #endif  // PPAPI_CPP_AUDIO_H_ | 
|  |  |