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)#include "ppapi/cpp/audio.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/instance_handle.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module_impl.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_Audio_1_0>() {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_AUDIO_INTERFACE_1_0;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)template <> const char* interface_name<PPB_Audio_1_1>() {
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return PPB_AUDIO_INTERFACE_1_1;
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Audio::Audio(const InstanceHandle& instance,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             const AudioConfig& config,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             PPB_Audio_Callback callback,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             void* user_data)
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    : config_(config),
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      use_1_0_interface_(false) {
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (has_interface<PPB_Audio_1_1>()) {
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    PassRefFromConstructor(get_interface<PPB_Audio_1_1>()->Create(
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        instance.pp_instance(), config.pp_resource(), callback, user_data));
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)Audio::Audio(const InstanceHandle& instance,
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)             const AudioConfig& config,
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)             PPB_Audio_Callback_1_0 callback,
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)             void* user_data)
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    : config_(config),
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      use_1_0_interface_(true) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (has_interface<PPB_Audio_1_0>()) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PassRefFromConstructor(get_interface<PPB_Audio_1_0>()->Create(
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        instance.pp_instance(), config.pp_resource(), callback, user_data));
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Audio::StartPlayback() {
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (has_interface<PPB_Audio_1_1>() && !use_1_0_interface_) {
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_Audio_1_1>()->StartPlayback(
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        pp_resource()));
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (has_interface<PPB_Audio_1_0>()) {
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_Audio_1_0>()->StartPlayback(
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        pp_resource()));
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return false;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Audio::StopPlayback() {
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (has_interface<PPB_Audio_1_1>() && !use_1_0_interface_) {
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_Audio_1_1>()->StopPlayback(
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        pp_resource()));
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (has_interface<PPB_Audio_1_0>()) {
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_Audio_1_0>()->StopPlayback(
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        pp_resource()));
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return false;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace pp
73