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 <stdint.h>
6 
7 #include "ppapi/shared_impl/ppb_audio_config_shared.h"
8 #include "ppapi/thunk/enter.h"
9 #include "ppapi/thunk/ppb_audio_config_api.h"
10 #include "ppapi/thunk/resource_creation_api.h"
11 #include "ppapi/thunk/thunk.h"
12 
13 namespace ppapi {
14 namespace thunk {
15 
16 namespace {
17 
CreateStereo16bit(PP_Instance instance,PP_AudioSampleRate sample_rate,uint32_t sample_frame_count)18 PP_Resource CreateStereo16bit(PP_Instance instance,
19                               PP_AudioSampleRate sample_rate,
20                               uint32_t sample_frame_count) {
21   VLOG(4) << "PPB_AudioConfig::CreateStereo16Bit()";
22   EnterResourceCreation enter(instance);
23   if (enter.failed())
24     return 0;
25   return enter.functions()->CreateAudioConfig(instance, sample_rate,
26                                               sample_frame_count);
27 }
28 
RecommendSampleFrameCount_1_0(PP_AudioSampleRate sample_rate,uint32_t requested_sample_frame_count)29 uint32_t RecommendSampleFrameCount_1_0(PP_AudioSampleRate sample_rate,
30                                        uint32_t requested_sample_frame_count) {
31   VLOG(4) << "PPB_AudioConfig::RecommendSampleFrameCount()";
32   return PPB_AudioConfig_Shared::RecommendSampleFrameCount_1_0(sample_rate,
33       requested_sample_frame_count);
34 }
35 
RecommendSampleFrameCount_1_1(PP_Instance instance,PP_AudioSampleRate sample_rate,uint32_t requested_sample_frame_count)36 uint32_t RecommendSampleFrameCount_1_1(PP_Instance instance,
37                                        PP_AudioSampleRate sample_rate,
38                                        uint32_t requested_sample_frame_count) {
39   VLOG(4) << "PPB_AudioConfig::RecommendSampleFrameCount()";
40   EnterInstance enter(instance);
41   if (enter.failed())
42     return 0;
43   return PPB_AudioConfig_Shared::RecommendSampleFrameCount_1_1(instance,
44       sample_rate, requested_sample_frame_count);
45 }
46 
47 
IsAudioConfig(PP_Resource resource)48 PP_Bool IsAudioConfig(PP_Resource resource) {
49   VLOG(4) << "PPB_AudioConfig::IsAudioConfig()";
50   EnterResource<PPB_AudioConfig_API> enter(resource, false);
51   return PP_FromBool(enter.succeeded());
52 }
53 
GetSampleRate(PP_Resource config_id)54 PP_AudioSampleRate GetSampleRate(PP_Resource config_id) {
55   VLOG(4) << "PPB_AudioConfig::GetSampleRate()";
56   EnterResource<PPB_AudioConfig_API> enter(config_id, true);
57   if (enter.failed())
58     return PP_AUDIOSAMPLERATE_NONE;
59   return enter.object()->GetSampleRate();
60 }
61 
GetSampleFrameCount(PP_Resource config_id)62 uint32_t GetSampleFrameCount(PP_Resource config_id) {
63   VLOG(4) << "PPB_AudioConfig::GetSampleFrameCount()";
64   EnterResource<PPB_AudioConfig_API> enter(config_id, true);
65   if (enter.failed())
66     return 0;
67   return enter.object()->GetSampleFrameCount();
68 }
69 
RecommendSampleRate(PP_Instance instance)70 PP_AudioSampleRate RecommendSampleRate(PP_Instance instance) {
71   VLOG(4) << "PPB_AudioConfig::RecommendSampleRate()";
72   EnterInstance enter(instance);
73   if (enter.failed())
74     return PP_AUDIOSAMPLERATE_NONE;
75   return PPB_AudioConfig_Shared::RecommendSampleRate(instance);
76 }
77 
78 const PPB_AudioConfig_1_0 g_ppb_audio_config_thunk_1_0 = {
79   &CreateStereo16bit,
80   &RecommendSampleFrameCount_1_0,
81   &IsAudioConfig,
82   &GetSampleRate,
83   &GetSampleFrameCount
84 };
85 
86 const PPB_AudioConfig_1_1 g_ppb_audio_config_thunk_1_1 = {
87   &CreateStereo16bit,
88   &RecommendSampleFrameCount_1_1,
89   &IsAudioConfig,
90   &GetSampleRate,
91   &GetSampleFrameCount,
92   &RecommendSampleRate
93 };
94 
95 
96 }  // namespace
97 
GetPPB_AudioConfig_1_0_Thunk()98 const PPB_AudioConfig_1_0* GetPPB_AudioConfig_1_0_Thunk() {
99   return &g_ppb_audio_config_thunk_1_0;
100 }
101 
GetPPB_AudioConfig_1_1_Thunk()102 const PPB_AudioConfig_1_1* GetPPB_AudioConfig_1_1_Thunk() {
103   return &g_ppb_audio_config_thunk_1_1;
104 }
105 
106 }  // namespace thunk
107 }  // namespace ppapi
108