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