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