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

Unified Diff: media/capture/webm_muxer_unittest.cc

Issue 1414793002: Update WebmMuxer for audio component of MediaStream recording. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: format Created 5 years, 1 month 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
« no previous file with comments | « media/capture/webm_muxer.cc ('k') | media/filters/opus_audio_decoder.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/capture/webm_muxer_unittest.cc
diff --git a/media/capture/webm_muxer_unittest.cc b/media/capture/webm_muxer_unittest.cc
index eac8a620a59796716a2b092eadc307a19f159a7a..8b45e1df99912efe7edf490a8797c941abff89a4 100644
--- a/media/capture/webm_muxer_unittest.cc
+++ b/media/capture/webm_muxer_unittest.cc
@@ -7,6 +7,8 @@
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "media/audio/audio_parameters.h"
+#include "media/base/channel_layout.h"
#include "media/base/video_frame.h"
#include "media/capture/webm_muxer.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -16,17 +18,25 @@ using ::testing::_;
using ::testing::AtLeast;
using ::testing::Mock;
using ::testing::TestWithParam;
-using ::testing::Values;
+using ::testing::ValuesIn;
using ::testing::WithArgs;
namespace media {
-class WebmMuxerTest : public TestWithParam<VideoCodec> {
+struct kTestParams {
+ VideoCodec codec;
+ size_t num_video_tracks;
+ size_t num_audio_tracks;
+};
+
+class WebmMuxerTest : public TestWithParam<kTestParams> {
public:
WebmMuxerTest()
- : webm_muxer_(
- GetParam() /* codec */,
- base::Bind(&WebmMuxerTest::WriteCallback, base::Unretained(this))),
+ : webm_muxer_(GetParam().codec,
+ GetParam().num_video_tracks,
+ GetParam().num_audio_tracks,
+ base::Bind(&WebmMuxerTest::WriteCallback,
+ base::Unretained(this))),
last_encoded_length_(0),
accumulated_position_(0) {
EXPECT_EQ(webm_muxer_.Position(), 0);
@@ -77,6 +87,9 @@ TEST_P(WebmMuxerTest, Write) {
// This test sends two frames and checks that the WriteCallback is called with
// appropriate params in both cases.
TEST_P(WebmMuxerTest, OnEncodedVideoTwoFrames) {
+ if (GetParam().num_video_tracks == 0)
+ return;
+
const gfx::Size frame_size(160, 80);
const scoped_refptr<VideoFrame> video_frame =
VideoFrame::CreateBlackFrame(frame_size);
@@ -118,6 +131,61 @@ TEST_P(WebmMuxerTest, OnEncodedVideoTwoFrames) {
accumulated_position_);
}
-INSTANTIATE_TEST_CASE_P(, WebmMuxerTest, Values(kCodecVP8, kCodecVP9));
+TEST_P(WebmMuxerTest, OnEncodedAudioTwoFrames) {
+ if (GetParam().num_audio_tracks == 0)
+ return;
+
+ int sample_rate = 48000;
+ int bits_per_sample = 16;
+ int frames_per_buffer = 480;
+ media::AudioParameters audio_params(
+ media::AudioParameters::Format::AUDIO_PCM_LOW_LATENCY,
+ media::CHANNEL_LAYOUT_MONO, sample_rate, bits_per_sample,
+ frames_per_buffer);
+
+ const std::string encoded_data("abcdefghijklmnopqrstuvwxyz");
+
+ EXPECT_CALL(*this, WriteCallback(_))
+ .Times(AtLeast(1))
+ .WillRepeatedly(
+ WithArgs<0>(Invoke(this, &WebmMuxerTest::SaveEncodedDataLen)));
+ webm_muxer_.OnEncodedAudio(audio_params,
+ make_scoped_ptr(new std::string(encoded_data)),
+ base::TimeTicks::Now());
+
+ // First time around WriteCallback() is pinged a number of times to write the
+ // Matroska header, but at the end it dumps |encoded_data|.
+ EXPECT_EQ(last_encoded_length_, encoded_data.size());
+ EXPECT_EQ(GetWebmMuxerPosition(), accumulated_position_);
+ EXPECT_GE(GetWebmMuxerPosition(), static_cast<int64_t>(last_encoded_length_));
+ EXPECT_EQ(GetWebmSegmentMode(), mkvmuxer::Segment::kLive);
+
+ const int64_t begin_of_second_block = accumulated_position_;
+ EXPECT_CALL(*this, WriteCallback(_))
+ .Times(AtLeast(1))
+ .WillRepeatedly(
+ WithArgs<0>(Invoke(this, &WebmMuxerTest::SaveEncodedDataLen)));
+ webm_muxer_.OnEncodedAudio(audio_params,
+ make_scoped_ptr(new std::string(encoded_data)),
+ base::TimeTicks::Now());
+
+ // The second time around the callbacks should include a SimpleBlock header,
+ // namely the track index, a timestamp and a flags byte, for a total of 6B.
+ EXPECT_EQ(last_encoded_length_, encoded_data.size());
+ EXPECT_EQ(GetWebmMuxerPosition(), accumulated_position_);
+ const uint32_t kSimpleBlockSize = 6u;
+ EXPECT_EQ(static_cast<int64_t>(begin_of_second_block + kSimpleBlockSize +
+ encoded_data.size()),
+ accumulated_position_);
+}
+
+const kTestParams kTestCases[] = {
+ // TODO: consider not enumerating every combination by hand.
+ {kCodecVP8, 1 /* num_video_tracks */, 0 /*num_audio_tracks*/},
+ {kCodecVP9, 1, 0},
+ {kCodecVP8, 0, 1},
+};
+
+INSTANTIATE_TEST_CASE_P(, WebmMuxerTest, ValuesIn(kTestCases));
} // namespace media
« no previous file with comments | « media/capture/webm_muxer.cc ('k') | media/filters/opus_audio_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698