Home | History | Annotate | Download | only in thunk
      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 
     14 namespace ppapi {
     15 namespace thunk {
     16 
     17 namespace {
     18 
     19 PP_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 
     33 PP_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 
     47 PP_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 
     53 PP_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 
     61 PP_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 
     69 PP_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 
     77 const PPB_Audio_1_0 g_ppb_audio_thunk_1_0 = {
     78   &Create_1_0,
     79   &IsAudio,
     80   &GetCurrentConfig,
     81   &StartPlayback,
     82   &StopPlayback
     83 };
     84 
     85 const 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 
     95 const PPB_Audio_1_0* GetPPB_Audio_1_0_Thunk() {
     96   return &g_ppb_audio_thunk_1_0;
     97 }
     98 
     99 const 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