Index: ppapi/tests/test_audio_encoder.cc |
diff --git a/ppapi/tests/test_audio_encoder.cc b/ppapi/tests/test_audio_encoder.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e28721eda6044b841f46f66dbdfb82c43e721b7e |
--- /dev/null |
+++ b/ppapi/tests/test_audio_encoder.cc |
@@ -0,0 +1,143 @@ |
+// Copyright 2015 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. |
+ |
+#include "ppapi/tests/test_audio_encoder.h" |
+ |
+#include "ppapi/c/pp_codecs.h" |
+#include "ppapi/c/pp_errors.h" |
+#include "ppapi/cpp/audio_encoder.h" |
+#include "ppapi/tests/testing_instance.h" |
+ |
+REGISTER_TEST_CASE(AudioEncoder); |
+ |
+bool TestAudioEncoder::Init() { |
+ audio_encoder_interface_ = static_cast<const PPB_AudioEncoder_0_1*>( |
+ pp::Module::Get()->GetBrowserInterface(PPB_AUDIOENCODER_INTERFACE_0_1)); |
+ return audio_encoder_interface_ && CheckTestingInterface(); |
+} |
+ |
+void TestAudioEncoder::RunTests(const std::string& filter) { |
+ RUN_CALLBACK_TEST(TestAudioEncoder, AvailableCodecs, filter); |
+ RUN_CALLBACK_TEST(TestAudioEncoder, IncorrectParametersFails, filter); |
+ RUN_CALLBACK_TEST(TestAudioEncoder, InitializeTwiceFails, filter); |
+ RUN_CALLBACK_TEST(TestAudioEncoder, InitializeOpusMono, filter); |
+ RUN_CALLBACK_TEST(TestAudioEncoder, InitializeOpusStereo, filter); |
+} |
+ |
+std::string TestAudioEncoder::TestAvailableCodecs() { |
+ // Test that we get results for supported formats. We should at |
+ // least get the software supported formats. |
+ pp::AudioEncoder audio_encoder(instance_); |
+ ASSERT_FALSE(audio_encoder.is_null()); |
+ |
+ TestCompletionCallbackWithOutput<std::vector<PP_AudioProfileDescription>> |
Adrian Kuegel
2015/11/19 15:54:30
The two closing '>' break the GN build. Please fix
|
+ callback(instance_->pp_instance(), false); |
+ callback.WaitForResult( |
+ audio_encoder.GetSupportedProfiles(callback.GetCallback())); |
+ ASSERT_GE(callback.result(), 1U); |
+ |
+ const std::vector<PP_AudioProfileDescription> audio_profiles = |
+ callback.output(); |
+ ASSERT_GE(audio_profiles.size(), 1U); |
+ |
+ bool found_opus_48hz = false; |
+ for (uint32_t i = 0; i < audio_profiles.size(); ++i) { |
+ const PP_AudioProfileDescription& description = audio_profiles[i]; |
+ if (description.profile == PP_AUDIOPROFILE_OPUS && |
+ description.sample_rate == PP_AUDIOBUFFER_SAMPLERATE_48000 && |
+ description.max_channels >= 2) |
+ found_opus_48hz = true; |
+ } |
+ ASSERT_TRUE(found_opus_48hz); |
+ |
+ PASS(); |
+} |
+ |
+std::string TestAudioEncoder::TestIncorrectParametersFails() { |
+ // Test that initializing the encoder with incorrect size fails. |
+ pp::AudioEncoder audio_encoder(instance_); |
+ ASSERT_FALSE(audio_encoder.is_null()); |
+ |
+ // Invalid number of channels. |
+ TestCompletionCallback callback(instance_->pp_instance(), false); |
+ callback.WaitForResult(audio_encoder.Initialize( |
+ 42, PP_AUDIOBUFFER_SAMPLERATE_48000, PP_AUDIOBUFFER_SAMPLESIZE_16_BITS, |
+ PP_AUDIOPROFILE_OPUS, 10000, PP_HARDWAREACCELERATION_WITHFALLBACK, |
+ callback.GetCallback())); |
+ ASSERT_EQ(PP_ERROR_NOTSUPPORTED, callback.result()); |
+ |
+ // Invalid sampling rate. |
+ callback.WaitForResult(audio_encoder.Initialize( |
+ 2, static_cast<PP_AudioBuffer_SampleRate>(123456), |
+ PP_AUDIOBUFFER_SAMPLESIZE_16_BITS, PP_AUDIOPROFILE_OPUS, 10000, |
+ PP_HARDWAREACCELERATION_WITHFALLBACK, callback.GetCallback())); |
+ ASSERT_EQ(PP_ERROR_NOTSUPPORTED, callback.result()); |
+ |
+ // Invalid sample size. |
+ callback.WaitForResult(audio_encoder.Initialize( |
+ 2, static_cast<PP_AudioBuffer_SampleRate>(48000), |
+ static_cast<PP_AudioBuffer_SampleSize>(72), PP_AUDIOPROFILE_OPUS, 10000, |
+ PP_HARDWAREACCELERATION_WITHFALLBACK, callback.GetCallback())); |
+ ASSERT_EQ(PP_ERROR_NOTSUPPORTED, callback.result()); |
+ |
+ PASS(); |
+} |
+ |
+std::string TestAudioEncoder::TestInitializeTwiceFails() { |
+ // Test that initializing the encoder with incorrect size fails. |
+ pp::AudioEncoder audio_encoder(instance_); |
+ ASSERT_FALSE(audio_encoder.is_null()); |
+ |
+ TestCompletionCallback callback(instance_->pp_instance(), false); |
+ callback.WaitForResult(audio_encoder.Initialize( |
+ 2, PP_AUDIOBUFFER_SAMPLERATE_48000, PP_AUDIOBUFFER_SAMPLESIZE_16_BITS, |
+ PP_AUDIOPROFILE_OPUS, 10000, PP_HARDWAREACCELERATION_WITHFALLBACK, |
+ callback.GetCallback())); |
+ ASSERT_EQ(PP_OK, callback.result()); |
+ |
+ callback.WaitForResult(audio_encoder.Initialize( |
+ 2, PP_AUDIOBUFFER_SAMPLERATE_48000, PP_AUDIOBUFFER_SAMPLESIZE_16_BITS, |
+ PP_AUDIOPROFILE_OPUS, 10000, PP_HARDWAREACCELERATION_WITHFALLBACK, |
+ callback.GetCallback())); |
+ ASSERT_EQ(PP_ERROR_FAILED, callback.result()); |
+ |
+ PASS(); |
+} |
+ |
+std::string TestAudioEncoder::TestInitializeOpusMono() { |
+ return TestInitializeCodec(1, PP_AUDIOBUFFER_SAMPLERATE_48000, |
+ PP_AUDIOBUFFER_SAMPLESIZE_16_BITS, |
+ PP_AUDIOPROFILE_OPUS); |
+} |
+ |
+std::string TestAudioEncoder::TestInitializeOpusStereo() { |
+ return TestInitializeCodec(2, PP_AUDIOBUFFER_SAMPLERATE_48000, |
+ PP_AUDIOBUFFER_SAMPLESIZE_16_BITS, |
+ PP_AUDIOPROFILE_OPUS); |
+} |
+ |
+std::string TestAudioEncoder::TestInitializeCodec( |
+ uint32_t channels, |
+ PP_AudioBuffer_SampleRate input_sample_rate, |
+ PP_AudioBuffer_SampleSize input_sample_size, |
+ PP_AudioProfile output_profile) { |
+ pp::AudioEncoder audio_encoder(instance_); |
+ ASSERT_FALSE(audio_encoder.is_null()); |
+ pp::Size audio_size(640, 480); |
+ |
+ TestCompletionCallback callback(instance_->pp_instance(), false); |
+ callback.WaitForResult(audio_encoder.Initialize( |
+ channels, input_sample_rate, input_sample_size, output_profile, 10000, |
+ PP_HARDWAREACCELERATION_WITHFALLBACK, callback.GetCallback())); |
+ ASSERT_EQ(PP_OK, callback.result()); |
+ |
+ ASSERT_GE(audio_encoder.GetNumberOfSamples(), 2U); |
+ |
+ TestCompletionCallbackWithOutput<pp::AudioBuffer> get_buffer( |
+ instance_->pp_instance(), false); |
+ get_buffer.WaitForResult(audio_encoder.GetBuffer(get_buffer.GetCallback())); |
+ ASSERT_EQ(PP_OK, get_buffer.result()); |
+ |
+ PASS(); |
+} |