• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/tests/test_audio_config.h"
6 
7 #include "ppapi/c/ppb_audio_config.h"
8 #include "ppapi/cpp/module.h"
9 #include "ppapi/tests/testing_instance.h"
10 
11 REGISTER_TEST_CASE(AudioConfig);
12 
Init()13 bool TestAudioConfig::Init() {
14   audio_config_interface_ = static_cast<const PPB_AudioConfig*>(
15       pp::Module::Get()->GetBrowserInterface(PPB_AUDIO_CONFIG_INTERFACE));
16   core_interface_ = static_cast<const PPB_Core*>(
17       pp::Module::Get()->GetBrowserInterface(PPB_CORE_INTERFACE));
18   return audio_config_interface_ && core_interface_;
19 }
20 
RunTests(const std::string & filter)21 void TestAudioConfig::RunTests(const std::string& filter) {
22   RUN_TEST(RecommendSampleRate, filter);
23   RUN_TEST(ValidConfigs, filter);
24   RUN_TEST(InvalidConfigs, filter);
25 }
26 
TestRecommendSampleRate()27 std::string TestAudioConfig::TestRecommendSampleRate() {
28   // Ask PPB_AudioConfig about the recommended sample rate.
29   PP_AudioSampleRate sample_rate = audio_config_interface_->RecommendSampleRate(
30       instance_->pp_instance());
31   ASSERT_TRUE(sample_rate == PP_AUDIOSAMPLERATE_NONE ||
32               sample_rate == PP_AUDIOSAMPLERATE_44100 ||
33               sample_rate == PP_AUDIOSAMPLERATE_48000);
34 
35   PASS();
36 }
37 
TestValidConfigs()38 std::string TestAudioConfig::TestValidConfigs() {
39   static const PP_AudioSampleRate kSampleRates[] = {
40     PP_AUDIOSAMPLERATE_44100,
41     PP_AUDIOSAMPLERATE_48000
42   };
43   static const uint32_t kRequestFrameCounts[] = {
44     PP_AUDIOMINSAMPLEFRAMECOUNT,
45     PP_AUDIOMAXSAMPLEFRAMECOUNT,
46     // Include some "okay-looking" frame counts; check their validity below.
47     1024,
48     2048,
49     4096
50   };
51 
52   for (size_t i = 0; i < sizeof(kSampleRates)/sizeof(kSampleRates[0]); i++) {
53     PP_AudioSampleRate sample_rate = kSampleRates[i];
54 
55     for (size_t j = 0;
56          j < sizeof(kRequestFrameCounts)/sizeof(kRequestFrameCounts[0]);
57          j++) {
58       uint32_t request_frame_count = kRequestFrameCounts[j];
59       ASSERT_TRUE(request_frame_count >= PP_AUDIOMINSAMPLEFRAMECOUNT);
60       ASSERT_TRUE(request_frame_count <= PP_AUDIOMAXSAMPLEFRAMECOUNT);
61 
62       uint32_t frame_count = audio_config_interface_->RecommendSampleFrameCount(
63           instance_->pp_instance(), sample_rate, request_frame_count);
64       ASSERT_TRUE(frame_count >= PP_AUDIOMINSAMPLEFRAMECOUNT);
65       ASSERT_TRUE(frame_count <= PP_AUDIOMAXSAMPLEFRAMECOUNT);
66 
67       PP_Resource ac = audio_config_interface_->CreateStereo16Bit(
68           instance_->pp_instance(), sample_rate, frame_count);
69       ASSERT_TRUE(ac);
70       ASSERT_TRUE(audio_config_interface_->IsAudioConfig(ac));
71       ASSERT_EQ(sample_rate, audio_config_interface_->GetSampleRate(ac));
72       ASSERT_EQ(frame_count, audio_config_interface_->GetSampleFrameCount(ac));
73 
74       core_interface_->ReleaseResource(ac);
75     }
76   }
77 
78   PASS();
79 }
80 
TestInvalidConfigs()81 std::string TestAudioConfig::TestInvalidConfigs() {
82   // |PP_AUDIOSAMPLERATE_NONE| is not a valid rate, so this should fail.
83   PP_Resource ac = audio_config_interface_->CreateStereo16Bit(
84       instance_->pp_instance(),
85       PP_AUDIOSAMPLERATE_NONE,
86       PP_AUDIOMINSAMPLEFRAMECOUNT);
87   ASSERT_EQ(0, ac);
88 
89   // Test invalid frame counts.
90   ASSERT_TRUE(PP_AUDIOMINSAMPLEFRAMECOUNT >= 1);
91   ac = audio_config_interface_->CreateStereo16Bit(
92       instance_->pp_instance(),
93       PP_AUDIOSAMPLERATE_44100,
94       PP_AUDIOMINSAMPLEFRAMECOUNT - 1u);
95   ASSERT_EQ(0, ac);
96   ac = audio_config_interface_->CreateStereo16Bit(
97       instance_->pp_instance(),
98       PP_AUDIOSAMPLERATE_44100,
99       PP_AUDIOMAXSAMPLEFRAMECOUNT + 1u);
100   ASSERT_EQ(0, ac);
101 
102   // Test rest of API whose failure cases are defined.
103   ASSERT_FALSE(audio_config_interface_->IsAudioConfig(0));
104   ASSERT_EQ(PP_AUDIOSAMPLERATE_NONE, audio_config_interface_->GetSampleRate(0));
105   ASSERT_EQ(0u, audio_config_interface_->GetSampleFrameCount(0));
106 
107   PASS();
108 }
109