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

Unified Diff: content/renderer/media_recorder/media_recorder_handler_unittest.cc

Issue 2691373005: Support alpha channel recording for VPX in MediaRecorder (Closed)
Patch Set: Created 3 years, 9 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: content/renderer/media_recorder/media_recorder_handler_unittest.cc
diff --git a/content/renderer/media_recorder/media_recorder_handler_unittest.cc b/content/renderer/media_recorder/media_recorder_handler_unittest.cc
index f0be4d10e392bb3c23533c8692cea8d78dd2768f..c4217e5d93bf14c223692cb54aee652259a4949d 100644
--- a/content/renderer/media_recorder/media_recorder_handler_unittest.cc
+++ b/content/renderer/media_recorder/media_recorder_handler_unittest.cc
@@ -55,17 +55,18 @@ struct MediaRecorderTestParams {
const bool has_audio;
const char* const mime_type;
const char* const codecs;
+ const bool encoder_supports_alpha;
};
// Array of valid combinations of video/audio/codecs and expected collected
// encoded sizes to use for parameterizing MediaRecorderHandlerTest.
static const MediaRecorderTestParams kMediaRecorderTestParams[] = {
- {true, false, "video/webm", "vp8"},
- {true, false, "video/webm", "vp9"},
+ {true, false, "video/webm", "vp8", true},
+ {true, false, "video/webm", "vp9", true},
#if BUILDFLAG(RTC_USE_H264)
- {true, false, "video/webm", "h264"},
+ {true, false, "video/webm", "h264", false},
#endif
- {false, true, "video/webm", "vp8"}};
+ {false, true, "video/webm", "vp8", true}};
class MediaRecorderHandlerTest : public TestWithParam<MediaRecorderTestParams>,
public blink::WebMediaRecorderHandlerClient {
@@ -217,7 +218,8 @@ TEST_P(MediaRecorderHandlerTest, InitializeStartStop) {
media_recorder_handler_.reset();
}
-// Sends 2 frames and expect them as WebM contained encoded data in writeData().
+// Sends 2 opaque frames and 1 transparent frame and expects them as WebM
+// contained encoded data in writeData().
TEST_P(MediaRecorderHandlerTest, EncodeVideoFrames) {
// Video-only test.
if (GetParam().has_audio)
@@ -267,6 +269,33 @@ TEST_P(MediaRecorderHandlerTest, EncodeVideoFrames) {
OnVideoFrameForTesting(video_frame);
run_loop.Run();
}
+ Mock::VerifyAndClearExpectations(this);
+
+ {
+ const scoped_refptr<media::VideoFrame> alpha_frame =
+ media::VideoFrame::CreateTransparentFrame(gfx::Size(160, 80));
+ const size_t kEncodedSizeThreshold = 16;
+ EXPECT_EQ(4u, media::VideoFrame::NumPlanes(alpha_frame->format()));
+ base::RunLoop run_loop;
+ base::Closure quit_closure = run_loop.QuitClosure();
+ // The second time around writeData() is called a number of times to write
+ // the WebM frame header, and then is pinged with the encoded data.
+ EXPECT_CALL(*this, writeData(_, Lt(kEncodedSizeThreshold), _, _))
+ .Times(AtLeast(1));
+ EXPECT_CALL(*this, writeData(_, Gt(kEncodedSizeThreshold), _, _))
+ .Times(1)
+ .WillOnce(RunClosure(quit_closure));
+ if (GetParam().encoder_supports_alpha) {
+ EXPECT_CALL(*this, writeData(_, Lt(kEncodedSizeThreshold), _, _))
+ .Times(AtLeast(1));
+ EXPECT_CALL(*this, writeData(_, Gt(kEncodedSizeThreshold), _, _))
+ .Times(1)
+ .WillOnce(RunClosure(quit_closure));
+ }
+
+ OnVideoFrameForTesting(alpha_frame);
+ run_loop.Run();
+ }
media_recorder_handler_->stop();
« no previous file with comments | « content/renderer/media_recorder/media_recorder_handler.cc ('k') | content/renderer/media_recorder/video_track_recorder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698