Bug 1296531 - Add gtest for encoding audio data. r?jesup draft
authorAndreas Pehrson <pehrsons@gmail.com>
Fri, 17 Feb 2017 12:15:48 +0100
changeset 670308 420c79e05e860eea28244d78d31bfc059afe53ec
parent 670307 f4c75e4b5ec6cc15c00e4ee61f4d1a5ce6bfe371
child 670309 4c9cb4116f5038383767ee82aedb818f67db8a58
push id81598
push userbmo:apehrson@mozilla.com
push dateTue, 26 Sep 2017 09:13:19 +0000
reviewersjesup
bugs1296531
milestone58.0a1
Bug 1296531 - Add gtest for encoding audio data. r?jesup MozReview-Commit-ID: 9hAecL1VG7B
dom/media/gtest/TestAudioTrackEncoder.cpp
--- a/dom/media/gtest/TestAudioTrackEncoder.cpp
+++ b/dom/media/gtest/TestAudioTrackEncoder.cpp
@@ -216,8 +216,37 @@ TEST(OpusAudioTrackEncoder, FetchMetadat
   RefPtr<TrackMetadataBase> metadata = encoder.GetMetadata();
   ASSERT_EQ(TrackMetadataBase::METADATA_OPUS, metadata->GetKind());
 
   RefPtr<OpusMetadata> opusMeta =
     static_cast<OpusMetadata*>(metadata.get());
   EXPECT_EQ(channels, opusMeta->mChannels);
   EXPECT_EQ(sampleRate, opusMeta->mSamplingFrequency);
 }
+
+TEST(OpusAudioTrackEncoder, FrameEncode)
+{
+  const int32_t channels = 1;
+  const int32_t sampleRate = 44100;
+  TestOpusTrackEncoder encoder;
+  EXPECT_TRUE(encoder.TestOpusCreation(channels, sampleRate));
+
+  // Generate five seconds of raw audio data.
+  AudioGenerator generator(channels, sampleRate);
+  AudioSegment segment;
+  const int32_t samples = sampleRate * 5;
+  generator.Generate(segment, samples);
+
+  encoder.AppendAudioSegment(Move(segment));
+  encoder.NotifyCurrentTime(samples);
+
+  EncodedFrameContainer container;
+  EXPECT_TRUE(NS_SUCCEEDED(encoder.GetEncodedTrack(container)));
+
+  // Verify that encoded data is 5 seconds long.
+  uint64_t totalDuration = 0;
+  for (auto& frame : container.GetEncodedFrames()) {
+    totalDuration += frame->GetDuration();
+  }
+  // 44100 as used above gets resampled to 48000 for opus.
+  const uint64_t five = 48000 * 5;
+  EXPECT_EQ(five, totalDuration);
+}