// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef PAPPI_TESTS_TEST_AUDIO_H_ #define PAPPI_TESTS_TEST_AUDIO_H_ #include #include "ppapi/c/ppb_audio.h" #include "ppapi/c/ppb_audio_config.h" #include "ppapi/c/ppb_core.h" #include "ppapi/tests/test_case.h" class TestAudio : public TestCase { public: explicit TestAudio(TestingInstance* instance); ~TestAudio(); // TestCase implementation. virtual bool Init(); virtual void RunTests(const std::string& filter); private: std::string TestCreation(); std::string TestDestroyNoStop(); std::string TestFailures(); std::string TestAudioCallback1(); std::string TestAudioCallback2(); std::string TestAudioCallback3(); std::string TestAudioCallback4(); #if defined(__native_client__) std::string TestAudioThreadCreatorIsRequired(); std::string TestAudioThreadCreatorIsCalled(); #endif // Calls |audio_callback_method_| (where |user_data| is "this"). static void AudioCallbackTrampoline(void* sample_buffer, uint32_t buffer_size_in_bytes, PP_TimeDelta latency, void* user_data); static void AudioCallbackTrampoline1_0(void* sample_buffer, uint32_t buffer_size_in_bytes, void* user_data); typedef void (TestAudio::*AudioCallbackMethod)(void* sample_buffer, uint32_t buffer_size_in_bytes, PP_TimeDelta latency); // Method called by |AudioCallbackTrampoline()|. Set only when the callback // can't be running (before |StartPlayback()|, after |StopPlayback()| or // releasing the last reference to the audio resource). AudioCallbackMethod audio_callback_method_; // An |AudioCallbackMethod| that just clears |sample_buffer|. void AudioCallbackTrivial(void* sample_buffer, uint32_t buffer_size_in_bytes, PP_TimeDelta latency); // |AudioCallbackMethod| used by |TestAudioCallbackN()|. void AudioCallbackTest(void* sample_buffer, uint32_t buffer_size_in_bytes, PP_TimeDelta latency); PP_Resource CreateAudioConfig(PP_AudioSampleRate sample_rate, uint32_t requested_sample_frame_count); // Used by |TestAudioCallbackN()|. NestedEvent audio_callback_event_; bool test_done_; // Raw C-level interfaces, set in |Init()|; do not modify them elsewhere. const PPB_Audio_1_1* audio_interface_; const PPB_Audio_1_0* audio_interface_1_0_; const PPB_AudioConfig* audio_config_interface_; const PPB_Core* core_interface_; }; #endif // PAPPI_TESTS_TEST_AUDIO_H_