OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ppapi/proxy/ppb_audio_config_proxy.h" | 5 #include "ppapi/proxy/ppb_audio_config_proxy.h" |
6 | 6 |
7 #include "ppapi/c/ppb_audio_config.h" | 7 #include "ppapi/c/ppb_audio_config.h" |
8 #include "ppapi/proxy/plugin_dispatcher.h" | 8 #include "ppapi/proxy/plugin_dispatcher.h" |
9 #include "ppapi/proxy/plugin_resource.h" | 9 #include "ppapi/proxy/plugin_resource.h" |
10 #include "ppapi/proxy/ppapi_messages.h" | 10 #include "ppapi/proxy/ppapi_messages.h" |
11 | 11 |
12 namespace pp { | 12 namespace pp { |
13 namespace proxy { | 13 namespace proxy { |
14 | 14 |
15 class AudioConfig : public PluginResource { | 15 class AudioConfig : public PluginResource { |
16 public: | 16 public: |
17 AudioConfig(PP_AudioSampleRate sample_rate, uint32_t sample_frame_count) | 17 AudioConfig(PP_Instance instance, |
18 : sample_rate_(sample_rate), | 18 PP_AudioSampleRate sample_rate, |
| 19 uint32_t sample_frame_count) |
| 20 : PluginResource(instance), |
| 21 sample_rate_(sample_rate), |
19 sample_frame_count_(sample_frame_count) { | 22 sample_frame_count_(sample_frame_count) { |
20 } | 23 } |
21 virtual ~AudioConfig() {} | 24 virtual ~AudioConfig() {} |
22 | 25 |
23 // Resource overrides. | 26 // Resource overrides. |
24 virtual AudioConfig* AsAudioConfig() { return this; } | 27 virtual AudioConfig* AsAudioConfig() { return this; } |
25 | 28 |
26 PP_AudioSampleRate sample_rate() const { return sample_rate_; } | 29 PP_AudioSampleRate sample_rate() const { return sample_rate_; } |
27 uint32_t sample_frame_count() const { return sample_frame_count_; } | 30 uint32_t sample_frame_count() const { return sample_frame_count_; } |
28 | 31 |
29 private: | 32 private: |
30 PP_AudioSampleRate sample_rate_; | 33 PP_AudioSampleRate sample_rate_; |
31 uint32_t sample_frame_count_; | 34 uint32_t sample_frame_count_; |
32 | 35 |
33 DISALLOW_COPY_AND_ASSIGN(AudioConfig); | 36 DISALLOW_COPY_AND_ASSIGN(AudioConfig); |
34 }; | 37 }; |
35 | 38 |
36 namespace { | 39 namespace { |
37 | 40 |
38 PP_Resource CreateStereo16bit(PP_Instance instance, | 41 PP_Resource CreateStereo16bit(PP_Instance instance, |
39 PP_AudioSampleRate sample_rate, | 42 PP_AudioSampleRate sample_rate, |
40 uint32_t sample_frame_count) { | 43 uint32_t sample_frame_count) { |
41 PP_Resource result = 0; | 44 PP_Resource result = 0; |
42 PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBAudioConfig_Create( | 45 PluginDispatcher::GetForInstance(instance)->Send( |
43 INTERFACE_ID_PPB_AUDIO_CONFIG, instance, | 46 new PpapiHostMsg_PPBAudioConfig_Create( |
44 static_cast<int32_t>(sample_rate), sample_frame_count, | 47 INTERFACE_ID_PPB_AUDIO_CONFIG, instance, |
45 &result)); | 48 static_cast<int32_t>(sample_rate), sample_frame_count, |
| 49 &result)); |
46 if (!result) | 50 if (!result) |
47 return 0; | 51 return 0; |
48 | 52 |
49 linked_ptr<AudioConfig> object( | 53 linked_ptr<AudioConfig> object( |
50 new AudioConfig(sample_rate, sample_frame_count)); | 54 new AudioConfig(instance, sample_rate, sample_frame_count)); |
51 PluginDispatcher::Get()->plugin_resource_tracker()->AddResource( | 55 PluginResourceTracker::GetInstance()->AddResource(result, object); |
52 result, object); | |
53 return result; | 56 return result; |
54 } | 57 } |
55 | 58 |
56 uint32_t RecommendSampleFrameCount(PP_AudioSampleRate sample_rate, | 59 uint32_t RecommendSampleFrameCount(PP_AudioSampleRate sample_rate, |
57 uint32_t requested_sample_frame_count) { | 60 uint32_t requested_sample_frame_count) { |
58 uint32_t result = 0; | 61 // TODO(brettw) Currently we don't actually query to get a value from the |
59 PluginDispatcher::Get()->Send( | 62 // hardware, so we always return the input for in-range values. |
60 new PpapiHostMsg_PPBAudioConfig_RecommendSampleFrameCount( | 63 // |
61 INTERFACE_ID_PPB_AUDIO_CONFIG, static_cast<int32_t>(sample_rate), | 64 // Danger: this code is duplicated in the audio config implementation. |
62 requested_sample_frame_count, &result)); | 65 if (requested_sample_frame_count < PP_AUDIOMINSAMPLEFRAMECOUNT) |
63 return result; | 66 return PP_AUDIOMINSAMPLEFRAMECOUNT; |
| 67 if (requested_sample_frame_count > PP_AUDIOMAXSAMPLEFRAMECOUNT) |
| 68 return PP_AUDIOMAXSAMPLEFRAMECOUNT; |
| 69 return requested_sample_frame_count; |
64 } | 70 } |
65 | 71 |
66 PP_Bool IsAudioConfig(PP_Resource resource) { | 72 PP_Bool IsAudioConfig(PP_Resource resource) { |
67 AudioConfig* object = PluginResource::GetAs<AudioConfig>(resource); | 73 AudioConfig* object = PluginResource::GetAs<AudioConfig>(resource); |
68 return BoolToPPBool(!!object); | 74 return BoolToPPBool(!!object); |
69 } | 75 } |
70 | 76 |
71 PP_AudioSampleRate GetSampleRate(PP_Resource config_id) { | 77 PP_AudioSampleRate GetSampleRate(PP_Resource config_id) { |
72 AudioConfig* object = PluginResource::GetAs<AudioConfig>(config_id); | 78 AudioConfig* object = PluginResource::GetAs<AudioConfig>(config_id); |
73 if (!object) | 79 if (!object) |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 int32_t sample_rate, | 139 int32_t sample_rate, |
134 uint32_t requested_sample_frame_count, | 140 uint32_t requested_sample_frame_count, |
135 uint32_t* result) { | 141 uint32_t* result) { |
136 *result = ppb_audio_config_target()->RecommendSampleFrameCount( | 142 *result = ppb_audio_config_target()->RecommendSampleFrameCount( |
137 static_cast<PP_AudioSampleRate>(sample_rate), | 143 static_cast<PP_AudioSampleRate>(sample_rate), |
138 requested_sample_frame_count); | 144 requested_sample_frame_count); |
139 } | 145 } |
140 | 146 |
141 } // namespace proxy | 147 } // namespace proxy |
142 } // namespace pp | 148 } // namespace pp |
OLD | NEW |