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