Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(415)

Unified Diff: ppapi/tests/test_media_stream_audio_track.cc

Issue 290993005: Support configuring number of audio buffers in MediaStream Pepper API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix review issues Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ppapi/tests/test_media_stream_audio_track.cc
diff --git a/ppapi/tests/test_media_stream_audio_track.cc b/ppapi/tests/test_media_stream_audio_track.cc
index e58d4f0cc4109869b329abe7017418aee9c2bfd3..33cf8fc346f3222e3acfc465d3540565ff84d389 100644
--- a/ppapi/tests/test_media_stream_audio_track.cc
+++ b/ppapi/tests/test_media_stream_audio_track.cc
@@ -18,6 +18,7 @@ REGISTER_TEST_CASE(MediaStreamAudioTrack);
namespace {
+const int32_t kMaxNumberOfBuffers = 1000;
dmichael (off chromium) 2014/05/27 20:22:33 It would be good to reference the file where the r
thembrown 2014/05/28 10:55:59 Done.
const int32_t kTimes = 3;
const char kJSCode[] =
"function gotStream(stream) {"
@@ -53,7 +54,7 @@ bool IsSampleRateValid(PP_AudioBuffer_SampleRate sample_rate) {
}
}
-}
+} // namespace
TestMediaStreamAudioTrack::TestMediaStreamAudioTrack(TestingInstance* instance)
: TestCase(instance),
@@ -70,6 +71,7 @@ TestMediaStreamAudioTrack::~TestMediaStreamAudioTrack() {
void TestMediaStreamAudioTrack::RunTests(const std::string& filter) {
RUN_TEST(Create, filter);
RUN_TEST(GetBuffer, filter);
+ RUN_TEST(Configure, filter);
}
void TestMediaStreamAudioTrack::HandleMessage(const pp::Var& message) {
@@ -140,3 +142,86 @@ std::string TestMediaStreamAudioTrack::TestGetBuffer() {
audio_track_ = pp::MediaStreamAudioTrack();
PASS();
}
+
+std::string TestMediaStreamAudioTrack::TestConfigure() {
+ // Create a track.
+ instance_->EvalScript(kJSCode);
+ event_.Wait();
+ event_.Reset();
+
+ ASSERT_FALSE(audio_track_.is_null());
+ ASSERT_FALSE(audio_track_.HasEnded());
+ ASSERT_FALSE(audio_track_.GetId().empty());
+
+ PP_TimeDelta timestamp = 0.0;
+
+ // Configure number of buffers.
+ struct {
+ int32_t buffers;
+ int32_t expect_result;
+ } buffers[] = {
+ { 8, PP_OK },
+ { 100, PP_OK },
+ { kMaxNumberOfBuffers, PP_OK },
+ { -1, PP_ERROR_BADARGUMENT },
+ { kMaxNumberOfBuffers + 1, PP_OK }, // Clipped to max value.
+ { 0, PP_OK }, // Use default.
+ };
+ for (size_t i = 0; i < sizeof(buffers) / sizeof(buffers[0]); ++i) {
+ TestCompletionCallback cc_configure(instance_->pp_instance(), false);
+ int32_t attrib_list[] = {
+ PP_MEDIASTREAMAUDIOTRACK_ATTRIB_BUFFERS, buffers[i].buffers,
+ PP_MEDIASTREAMAUDIOTRACK_ATTRIB_NONE,
+ };
+ cc_configure.WaitForResult(
+ audio_track_.Configure(attrib_list, cc_configure.GetCallback()));
+ ASSERT_EQ(buffers[i].expect_result, cc_configure.result());
+
+ // Get some buffers. This should also succeed when configure fails.
+
dmichael (off chromium) 2014/05/27 20:22:33 nit: unnecessary carriage return
thembrown 2014/05/28 10:55:59 Done.
+ for (int j = 0; j < kTimes; ++j) {
+ TestCompletionCallbackWithOutput<pp::AudioBuffer> cc_get_buffer(
+ instance_->pp_instance(), false);
+ cc_get_buffer.WaitForResult(
+ audio_track_.GetBuffer(cc_get_buffer.GetCallback()));
+ ASSERT_EQ(PP_OK, cc_get_buffer.result());
+ pp::AudioBuffer buffer = cc_get_buffer.output();
+ ASSERT_FALSE(buffer.is_null());
+ ASSERT_TRUE(IsSampleRateValid(buffer.GetSampleRate()));
+ ASSERT_EQ(buffer.GetSampleSize(), PP_AUDIOBUFFER_SAMPLESIZE_16_BITS);
+
+ ASSERT_GE(buffer.GetTimestamp(), timestamp);
+ timestamp = buffer.GetTimestamp();
+
+ ASSERT_GT(buffer.GetDataBufferSize(), 0U);
+ ASSERT_TRUE(buffer.GetDataBuffer() != NULL);
+
+ audio_track_.RecycleBuffer(buffer);
+ }
+ }
+
+ // Configure should fail while plugin holds buffers.
dmichael (off chromium) 2014/05/27 20:22:33 It would probably be good to document this in the
thembrown 2014/05/28 10:55:59 Done.
+ {
+ TestCompletionCallbackWithOutput<pp::AudioBuffer> cc_get_buffer(
+ instance_->pp_instance(), false);
+ cc_get_buffer.WaitForResult(
+ audio_track_.GetBuffer(cc_get_buffer.GetCallback()));
+ ASSERT_EQ(PP_OK, cc_get_buffer.result());
+ pp::AudioBuffer buffer = cc_get_buffer.output();
+ int32_t attrib_list[] = {
+ PP_MEDIASTREAMAUDIOTRACK_ATTRIB_BUFFERS, 0,
+ PP_MEDIASTREAMAUDIOTRACK_ATTRIB_NONE,
+ };
+ TestCompletionCallback cc_configure(instance_->pp_instance(), false);
+ cc_configure.WaitForResult(
+ audio_track_.Configure(attrib_list, cc_configure.GetCallback()));
+ ASSERT_EQ(PP_ERROR_INPROGRESS, cc_configure.result());
+ audio_track_.RecycleBuffer(buffer);
+ }
+
+ // Close the track.
+ audio_track_.Close();
+ ASSERT_TRUE(audio_track_.HasEnded());
+ audio_track_ = pp::MediaStreamAudioTrack();
+ PASS();
+}

Powered by Google App Engine
This is Rietveld 408576698