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

Side by Side Diff: content/renderer/media/media_recorder_handler_unittest.cc

Issue 1886123002: [experimental] MR: add support for H264 recording (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "content/child/child_process.h" 10 #include "content/child/child_process.h"
11 #include "content/renderer/media/media_recorder_handler.h" 11 #include "content/renderer/media/media_recorder_handler.h"
12 #include "content/renderer/media/mock_media_stream_registry.h" 12 #include "content/renderer/media/mock_media_stream_registry.h"
13 #include "media/audio/simple_sources.h" 13 #include "media/audio/simple_sources.h"
14 #include "media/base/audio_bus.h" 14 #include "media/base/audio_bus.h"
15 #include "media/base/video_frame.h" 15 #include "media/base/video_frame.h"
16 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "third_party/WebKit/public/platform/WebMediaRecorderHandlerClient.h" 18 #include "third_party/WebKit/public/platform/WebMediaRecorderHandlerClient.h"
19 #include "third_party/WebKit/public/platform/WebString.h" 19 #include "third_party/WebKit/public/platform/WebString.h"
20 #include "third_party/WebKit/public/web/WebHeap.h" 20 #include "third_party/WebKit/public/web/WebHeap.h"
21 21
22 using ::testing::_; 22 using ::testing::_;
23 using ::testing::AtLeast; 23 using ::testing::AtLeast;
24 using ::testing::InSequence; 24 using ::testing::InSequence;
25 using ::testing::Ge;
25 using ::testing::Gt; 26 using ::testing::Gt;
26 using ::testing::Lt; 27 using ::testing::Lt;
27 using ::testing::Mock; 28 using ::testing::Mock;
28 using ::testing::TestWithParam; 29 using ::testing::TestWithParam;
29 using ::testing::ValuesIn; 30 using ::testing::ValuesIn;
30 31
31 using blink::WebString; 32 using blink::WebString;
32 33
33 namespace content { 34 namespace content {
34 35
(...skipping 17 matching lines...) Expand all
52 const bool has_audio; 53 const bool has_audio;
53 const char* const mime_type; 54 const char* const mime_type;
54 const char* const codecs; 55 const char* const codecs;
55 }; 56 };
56 57
57 // Array of valid combinations of video/audio/codecs and expected collected 58 // Array of valid combinations of video/audio/codecs and expected collected
58 // encoded sizes to use for parameterizing MediaRecorderHandlerTest. 59 // encoded sizes to use for parameterizing MediaRecorderHandlerTest.
59 static const MediaRecorderTestParams kMediaRecorderTestParams[] = { 60 static const MediaRecorderTestParams kMediaRecorderTestParams[] = {
60 {true, false, "video/webm", "vp8"}, 61 {true, false, "video/webm", "vp8"},
61 {true, false, "video/webm", "vp9"}, 62 {true, false, "video/webm", "vp9"},
63 {true, false, "video/webm", "h264"},
62 {false, true, "video/webm", "vp8"}}; 64 {false, true, "video/webm", "vp8"}};
63 65
64 class MediaRecorderHandlerTest : public TestWithParam<MediaRecorderTestParams>, 66 class MediaRecorderHandlerTest : public TestWithParam<MediaRecorderTestParams>,
65 public blink::WebMediaRecorderHandlerClient { 67 public blink::WebMediaRecorderHandlerClient {
66 public: 68 public:
67 MediaRecorderHandlerTest() 69 MediaRecorderHandlerTest()
68 : media_recorder_handler_(new MediaRecorderHandler()), 70 : media_recorder_handler_(new MediaRecorderHandler()),
69 audio_source_(kTestAudioChannels, 71 audio_source_(kTestAudioChannels,
70 440 /* freq */, 72 440 /* freq */,
71 kTestAudioSampleRate) { 73 kTestAudioSampleRate) {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 mime_type_video_uppercase, WebString())); 151 mime_type_video_uppercase, WebString()));
150 const WebString example_good_codecs_1(base::UTF8ToUTF16("vp8")); 152 const WebString example_good_codecs_1(base::UTF8ToUTF16("vp8"));
151 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType( 153 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType(
152 mime_type_video, example_good_codecs_1)); 154 mime_type_video, example_good_codecs_1));
153 const WebString example_good_codecs_2(base::UTF8ToUTF16("vp9,opus")); 155 const WebString example_good_codecs_2(base::UTF8ToUTF16("vp9,opus"));
154 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType( 156 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType(
155 mime_type_video, example_good_codecs_2)); 157 mime_type_video, example_good_codecs_2));
156 const WebString example_good_codecs_3(base::UTF8ToUTF16("VP9,opus")); 158 const WebString example_good_codecs_3(base::UTF8ToUTF16("VP9,opus"));
157 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType( 159 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType(
158 mime_type_video, example_good_codecs_3)); 160 mime_type_video, example_good_codecs_3));
161 const WebString example_good_codecs_4(base::UTF8ToUTF16("H264,opus"));
162 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType(
163 mime_type_video, example_good_codecs_4));
159 164
160 const WebString example_unsupported_codecs_1(base::UTF8ToUTF16("daala")); 165 const WebString example_unsupported_codecs_1(base::UTF8ToUTF16("daala"));
161 EXPECT_FALSE(media_recorder_handler_->canSupportMimeType( 166 EXPECT_FALSE(media_recorder_handler_->canSupportMimeType(
162 mime_type_video, example_unsupported_codecs_1)); 167 mime_type_video, example_unsupported_codecs_1));
163 168
164 const WebString mime_type_audio(base::UTF8ToUTF16("audio/webm")); 169 const WebString mime_type_audio(base::UTF8ToUTF16("audio/webm"));
165 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType( 170 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType(
166 mime_type_audio, WebString())); 171 mime_type_audio, WebString()));
167 const WebString example_good_codecs_4(base::UTF8ToUTF16("opus")); 172 const WebString example_good_codecs_5(base::UTF8ToUTF16("opus"));
168 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType(
169 mime_type_audio, example_good_codecs_4));
170 const WebString example_good_codecs_5(base::UTF8ToUTF16("OpUs"));
171 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType( 173 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType(
172 mime_type_audio, example_good_codecs_5)); 174 mime_type_audio, example_good_codecs_5));
175 const WebString example_good_codecs_6(base::UTF8ToUTF16("OpUs"));
176 EXPECT_TRUE(media_recorder_handler_->canSupportMimeType(
177 mime_type_audio, example_good_codecs_6));
173 178
174 const WebString example_unsupported_codecs_2(base::UTF8ToUTF16("vorbis")); 179 const WebString example_unsupported_codecs_2(base::UTF8ToUTF16("vorbis"));
175 EXPECT_FALSE(media_recorder_handler_->canSupportMimeType( 180 EXPECT_FALSE(media_recorder_handler_->canSupportMimeType(
176 mime_type_audio, example_unsupported_codecs_2)); 181 mime_type_audio, example_unsupported_codecs_2));
177 } 182 }
178 183
179 // Checks that the initialization-destruction sequence works fine. 184 // Checks that the initialization-destruction sequence works fine.
180 TEST_P(MediaRecorderHandlerTest, InitializeStartStop) { 185 TEST_P(MediaRecorderHandlerTest, InitializeStartStop) {
181 AddTracks(); 186 AddTracks();
182 const WebString mime_type(base::UTF8ToUTF16(GetParam().mime_type)); 187 const WebString mime_type(base::UTF8ToUTF16(GetParam().mime_type));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 const WebString mime_type(base::UTF8ToUTF16(GetParam().mime_type)); 219 const WebString mime_type(base::UTF8ToUTF16(GetParam().mime_type));
215 const WebString codecs(base::UTF8ToUTF16(GetParam().codecs)); 220 const WebString codecs(base::UTF8ToUTF16(GetParam().codecs));
216 EXPECT_TRUE(media_recorder_handler_->initialize(this, registry_.test_stream(), 221 EXPECT_TRUE(media_recorder_handler_->initialize(this, registry_.test_stream(),
217 mime_type, codecs, 0, 0)); 222 mime_type, codecs, 0, 0));
218 EXPECT_TRUE(media_recorder_handler_->start()); 223 EXPECT_TRUE(media_recorder_handler_->start());
219 224
220 InSequence s; 225 InSequence s;
221 const scoped_refptr<media::VideoFrame> video_frame = 226 const scoped_refptr<media::VideoFrame> video_frame =
222 media::VideoFrame::CreateBlackFrame(gfx::Size(160, 80)); 227 media::VideoFrame::CreateBlackFrame(gfx::Size(160, 80));
223 228
224 const size_t kEncodedSizeThreshold = 16; 229 const size_t kEncodedSizeThreshold = 14;
225 { 230 {
226 base::RunLoop run_loop; 231 base::RunLoop run_loop;
227 base::Closure quit_closure = run_loop.QuitClosure(); 232 base::Closure quit_closure = run_loop.QuitClosure();
228 // writeData() is pinged a number of times as the WebM header is written; 233 // writeData() is pinged a number of times as the WebM header is written;
229 // the last time it is called it has the encoded data. 234 // the last time it is called it has the encoded data.
230 EXPECT_CALL(*this, writeData(_, Lt(kEncodedSizeThreshold), _)) 235 EXPECT_CALL(*this, writeData(_, Lt(kEncodedSizeThreshold), _))
231 .Times(AtLeast(1)); 236 .Times(AtLeast(1));
232 EXPECT_CALL(*this, writeData(_, Gt(kEncodedSizeThreshold), _)) 237 EXPECT_CALL(*this, writeData(_, Ge(kEncodedSizeThreshold), _))
233 .Times(1) 238 .Times(1)
234 .WillOnce(RunClosure(quit_closure)); 239 .WillOnce(RunClosure(quit_closure));
235 240
236 OnVideoFrameForTesting(video_frame); 241 OnVideoFrameForTesting(video_frame);
237 run_loop.Run(); 242 run_loop.Run();
238 } 243 }
239 Mock::VerifyAndClearExpectations(this); 244 Mock::VerifyAndClearExpectations(this);
240 245
241 { 246 {
242 base::RunLoop run_loop; 247 base::RunLoop run_loop;
243 base::Closure quit_closure = run_loop.QuitClosure(); 248 base::Closure quit_closure = run_loop.QuitClosure();
244 // The second time around writeData() is called a number of times to write 249 // The second time around writeData() is called a number of times to write
245 // the WebM frame header, and then is pinged with the encoded data. 250 // the WebM frame header, and then is pinged with the encoded data.
246 EXPECT_CALL(*this, writeData(_, Lt(kEncodedSizeThreshold), _)) 251 EXPECT_CALL(*this, writeData(_, Lt(kEncodedSizeThreshold), _))
247 .Times(AtLeast(1)); 252 .Times(AtLeast(1));
248 EXPECT_CALL(*this, writeData(_, Gt(kEncodedSizeThreshold), _)) 253 EXPECT_CALL(*this, writeData(_, Ge(kEncodedSizeThreshold), _))
249 .Times(1) 254 .Times(1)
250 .WillOnce(RunClosure(quit_closure)); 255 .WillOnce(RunClosure(quit_closure));
251 256
252 OnVideoFrameForTesting(video_frame); 257 OnVideoFrameForTesting(video_frame);
253 run_loop.Run(); 258 run_loop.Run();
254 } 259 }
255 260
256 media_recorder_handler_->stop(); 261 media_recorder_handler_->stop();
257 262
258 // Expect a last call on destruction, with size 0 and |lastInSlice| true. 263 // Expect a last call on destruction, with size 0 and |lastInSlice| true.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 } 327 }
323 328
324 media_recorder_handler_->stop(); 329 media_recorder_handler_->stop();
325 330
326 // Expect a last call on destruction, with size 0 and |lastInSlice| true. 331 // Expect a last call on destruction, with size 0 and |lastInSlice| true.
327 EXPECT_CALL(*this, writeData(nullptr, 0, true)).Times(1); 332 EXPECT_CALL(*this, writeData(nullptr, 0, true)).Times(1);
328 media_recorder_handler_.reset(); 333 media_recorder_handler_.reset();
329 } 334 }
330 335
331 } // namespace content 336 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_recorder_handler.cc ('k') | content/renderer/media/video_track_recorder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698