1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "ppapi/c/pp_errors.h" 6#include "ppapi/c/ppb_audio.h" 7#include "ppapi/shared_impl/tracked_callback.h" 8#include "ppapi/thunk/enter.h" 9#include "ppapi/thunk/ppb_audio_api.h" 10#include "ppapi/thunk/ppb_instance_api.h" 11#include "ppapi/thunk/resource_creation_api.h" 12#include "ppapi/thunk/thunk.h" 13 14namespace ppapi { 15namespace thunk { 16 17namespace { 18 19PP_Resource Create_1_0(PP_Instance instance, 20 PP_Resource config, 21 PPB_Audio_Callback_1_0 audio_callback, 22 void* user_data) { 23 VLOG(4) << "PPB_Audio::Create()"; 24 EnterResourceCreation enter(instance); 25 if (enter.failed()) 26 return 0; 27 return enter.functions()->CreateAudio1_0(instance, 28 config, 29 audio_callback, 30 user_data); 31} 32 33PP_Resource Create(PP_Instance instance, 34 PP_Resource config, 35 PPB_Audio_Callback audio_callback, 36 void* user_data) { 37 VLOG(4) << "PPB_Audio::Create()"; 38 EnterResourceCreation enter(instance); 39 if (enter.failed()) 40 return 0; 41 return enter.functions()->CreateAudio(instance, 42 config, 43 audio_callback, 44 user_data); 45} 46 47PP_Bool IsAudio(PP_Resource resource) { 48 VLOG(4) << "PPB_Audio::IsAudio()"; 49 EnterResource<PPB_Audio_API> enter(resource, false); 50 return PP_FromBool(enter.succeeded()); 51} 52 53PP_Resource GetCurrentConfig(PP_Resource audio) { 54 VLOG(4) << "PPB_Audio::GetCurrentConfig()"; 55 EnterResource<PPB_Audio_API> enter(audio, true); 56 if (enter.failed()) 57 return 0; 58 return enter.object()->GetCurrentConfig(); 59} 60 61PP_Bool StartPlayback(PP_Resource audio) { 62 VLOG(4) << "PPB_Audio::StartPlayback()"; 63 EnterResource<PPB_Audio_API> enter(audio, true); 64 if (enter.failed()) 65 return PP_FALSE; 66 return enter.object()->StartPlayback(); 67} 68 69PP_Bool StopPlayback(PP_Resource audio) { 70 VLOG(4) << "PPB_Audio::StopPlayback()"; 71 EnterResource<PPB_Audio_API> enter(audio, true); 72 if (enter.failed()) 73 return PP_FALSE; 74 return enter.object()->StopPlayback(); 75} 76 77const PPB_Audio_1_0 g_ppb_audio_thunk_1_0 = { 78 &Create_1_0, 79 &IsAudio, 80 &GetCurrentConfig, 81 &StartPlayback, 82 &StopPlayback 83}; 84 85const PPB_Audio_1_1 g_ppb_audio_thunk_1_1 = { 86 &Create, 87 &IsAudio, 88 &GetCurrentConfig, 89 &StartPlayback, 90 &StopPlayback 91}; 92 93} // namespace 94 95const PPB_Audio_1_0* GetPPB_Audio_1_0_Thunk() { 96 return &g_ppb_audio_thunk_1_0; 97} 98 99const PPB_Audio_1_1* GetPPB_Audio_1_1_Thunk() { 100 return &g_ppb_audio_thunk_1_1; 101} 102 103} // namespace thunk 104} // namespace ppapi 105