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

Side by Side Diff: media/filters/ffmpeg_demuxer_unittest.cc

Issue 1567783005: Run ac3, eac3 and hevc unit tests in all configs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ac3-eac3-passthrough
Patch Set: rebase Created 4 years, 10 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
« no previous file with comments | « no previous file | media/formats/mp4/mp4_stream_parser_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <algorithm> 8 #include <algorithm>
9 #include <deque> 9 #include <deque>
10 #include <string> 10 #include <string>
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = base::Bind( 91 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = base::Bind(
92 &FFmpegDemuxerTest::OnEncryptedMediaInitData, base::Unretained(this)); 92 &FFmpegDemuxerTest::OnEncryptedMediaInitData, base::Unretained(this));
93 93
94 demuxer_.reset(new FFmpegDemuxer( 94 demuxer_.reset(new FFmpegDemuxer(
95 message_loop_.task_runner(), data_source_.get(), 95 message_loop_.task_runner(), data_source_.get(),
96 encrypted_media_init_data_cb, new MediaLog())); 96 encrypted_media_init_data_cb, new MediaLog()));
97 } 97 }
98 98
99 MOCK_METHOD1(CheckPoint, void(int v)); 99 MOCK_METHOD1(CheckPoint, void(int v));
100 100
101 void InitializeDemuxerWithTimelineOffset(bool enable_text, 101 void InitializeDemuxer(
102 base::Time timeline_offset) { 102 bool enable_text = false,
ddorwin 2016/02/19 20:51:10 bools are always a problem because there is no con
servolk 2016/02/19 21:32:01 Acknowledged.
103 EXPECT_CALL(host_, SetDuration(_)); 103 media::PipelineStatus demuxer_init_expected_status = PIPELINE_OK,
ddorwin 2016/02/19 20:51:10 Looking at the uses and considering the bool issue
servolk 2016/02/19 21:32:01 Done.
104 base::Time timeline_offset = base::Time()) {
105 if (demuxer_init_expected_status == PIPELINE_OK)
106 EXPECT_CALL(host_, SetDuration(_));
104 WaitableMessageLoopEvent event; 107 WaitableMessageLoopEvent event;
105 demuxer_->Initialize(&host_, event.GetPipelineStatusCB(), enable_text); 108 demuxer_->Initialize(&host_, event.GetPipelineStatusCB(), enable_text);
106 demuxer_->timeline_offset_ = timeline_offset; 109 demuxer_->timeline_offset_ = timeline_offset;
107 event.RunAndWaitForStatus(PIPELINE_OK); 110 event.RunAndWaitForStatus(demuxer_init_expected_status);
108 }
109
110 void InitializeDemuxerText(bool enable_text) {
111 InitializeDemuxerWithTimelineOffset(enable_text, base::Time());
112 }
113
114 void InitializeDemuxer() {
115 InitializeDemuxerText(false);
116 } 111 }
117 112
118 MOCK_METHOD2(OnReadDoneCalled, void(int, int64_t)); 113 MOCK_METHOD2(OnReadDoneCalled, void(int, int64_t));
119 114
120 struct ReadExpectation { 115 struct ReadExpectation {
121 ReadExpectation(size_t size, 116 ReadExpectation(size_t size,
122 int64_t timestamp_us, 117 int64_t timestamp_us,
123 const base::TimeDelta& discard_front_padding, 118 const base::TimeDelta& discard_front_padding,
124 bool is_key_frame) 119 bool is_key_frame)
125 : size(size), 120 : size(size),
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 TEST_F(FFmpegDemuxerTest, Initialize_MultitrackText) { 345 TEST_F(FFmpegDemuxerTest, Initialize_MultitrackText) {
351 // Open a file containing the following streams: 346 // Open a file containing the following streams:
352 // Stream #0: Video (VP8) 347 // Stream #0: Video (VP8)
353 // Stream #1: Audio (Vorbis) 348 // Stream #1: Audio (Vorbis)
354 // Stream #2: Text (WebVTT) 349 // Stream #2: Text (WebVTT)
355 350
356 CreateDemuxer("bear-vp8-webvtt.webm"); 351 CreateDemuxer("bear-vp8-webvtt.webm");
357 DemuxerStream* text_stream = NULL; 352 DemuxerStream* text_stream = NULL;
358 EXPECT_CALL(host_, AddTextStream(_, _)) 353 EXPECT_CALL(host_, AddTextStream(_, _))
359 .WillOnce(SaveArg<0>(&text_stream)); 354 .WillOnce(SaveArg<0>(&text_stream));
360 InitializeDemuxerText(true); 355 InitializeDemuxer(/*enable_text=*/true);
ddorwin 2016/02/19 20:51:09 InitializeDemuxerWithText();
servolk 2016/02/19 21:32:01 Done.
361 ASSERT_TRUE(text_stream); 356 ASSERT_TRUE(text_stream);
362 EXPECT_EQ(DemuxerStream::TEXT, text_stream->type()); 357 EXPECT_EQ(DemuxerStream::TEXT, text_stream->type());
363 358
364 // Video stream should be VP8. 359 // Video stream should be VP8.
365 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); 360 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO);
366 ASSERT_TRUE(stream); 361 ASSERT_TRUE(stream);
367 EXPECT_EQ(DemuxerStream::VIDEO, stream->type()); 362 EXPECT_EQ(DemuxerStream::VIDEO, stream->type());
368 EXPECT_EQ(kCodecVP8, stream->video_decoder_config().codec()); 363 EXPECT_EQ(kCodecVP8, stream->video_decoder_config().codec());
369 364
370 // Audio stream should be Vorbis. 365 // Audio stream should be Vorbis.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 418
424 EXPECT_EQ(323, demuxer_->GetMemoryUsage()); 419 EXPECT_EQ(323, demuxer_->GetMemoryUsage());
425 } 420 }
426 421
427 TEST_F(FFmpegDemuxerTest, Read_Text) { 422 TEST_F(FFmpegDemuxerTest, Read_Text) {
428 // We test that on a successful text packet read. 423 // We test that on a successful text packet read.
429 CreateDemuxer("bear-vp8-webvtt.webm"); 424 CreateDemuxer("bear-vp8-webvtt.webm");
430 DemuxerStream* text_stream = NULL; 425 DemuxerStream* text_stream = NULL;
431 EXPECT_CALL(host_, AddTextStream(_, _)) 426 EXPECT_CALL(host_, AddTextStream(_, _))
432 .WillOnce(SaveArg<0>(&text_stream)); 427 .WillOnce(SaveArg<0>(&text_stream));
433 InitializeDemuxerText(true); 428 InitializeDemuxer(/*enable_text=*/true);
434 ASSERT_TRUE(text_stream); 429 ASSERT_TRUE(text_stream);
435 EXPECT_EQ(DemuxerStream::TEXT, text_stream->type()); 430 EXPECT_EQ(DemuxerStream::TEXT, text_stream->type());
436 431
437 text_stream->Read(NewReadCB(FROM_HERE, 31, 0, true)); 432 text_stream->Read(NewReadCB(FROM_HERE, 31, 0, true));
438 message_loop_.Run(); 433 message_loop_.Run();
439 434
440 text_stream->Read(NewReadCB(FROM_HERE, 19, 500000, true)); 435 text_stream->Read(NewReadCB(FROM_HERE, 19, 500000, true));
441 message_loop_.Run(); 436 message_loop_.Run();
442 } 437 }
443 438
444 TEST_F(FFmpegDemuxerTest, SeekInitialized_NoVideoStartTime) { 439 TEST_F(FFmpegDemuxerTest, SeekInitialized_NoVideoStartTime) {
445 CreateDemuxer("audio-start-time-only.webm"); 440 CreateDemuxer("audio-start-time-only.webm");
446 InitializeDemuxer(); 441 InitializeDemuxer();
447 EXPECT_EQ(0, preferred_seeking_stream_index()); 442 EXPECT_EQ(0, preferred_seeking_stream_index());
448 } 443 }
449 444
450 TEST_F(FFmpegDemuxerTest, Read_VideoPositiveStartTime) { 445 TEST_F(FFmpegDemuxerTest, Read_VideoPositiveStartTime) {
451 const int64_t kTimelineOffsetMs = 1352550896000LL; 446 const int64_t kTimelineOffsetMs = 1352550896000LL;
452 447
453 // Test the start time is the first timestamp of the video and audio stream. 448 // Test the start time is the first timestamp of the video and audio stream.
454 CreateDemuxer("nonzero-start-time.webm"); 449 CreateDemuxer("nonzero-start-time.webm");
455 InitializeDemuxerWithTimelineOffset( 450 InitializeDemuxer(false, PIPELINE_OK,
ddorwin 2016/02/19 20:51:10 InitializeDemuxer(base::Time::FromJsTime(kTimeline
servolk 2016/02/19 21:32:01 Given that the timeline_offset parameter is used/n
ddorwin 2016/02/24 00:28:00 Acknowledged.
456 false, base::Time::FromJsTime(kTimelineOffsetMs)); 451 base::Time::FromJsTime(kTimelineOffsetMs));
457 452
458 // Attempt a read from the video stream and run the message loop until done. 453 // Attempt a read from the video stream and run the message loop until done.
459 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO); 454 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO);
460 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO); 455 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO);
461 456
462 const base::TimeDelta video_start_time = 457 const base::TimeDelta video_start_time =
463 base::TimeDelta::FromMicroseconds(400000); 458 base::TimeDelta::FromMicroseconds(400000);
464 const base::TimeDelta audio_start_time = 459 const base::TimeDelta audio_start_time =
465 base::TimeDelta::FromMicroseconds(396000); 460 base::TimeDelta::FromMicroseconds(396000);
466 461
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 InitializeDemuxer(); 677 InitializeDemuxer();
683 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO)); 678 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO));
684 } 679 }
685 680
686 TEST_F(FFmpegDemuxerTest, Read_EndOfStreamText) { 681 TEST_F(FFmpegDemuxerTest, Read_EndOfStreamText) {
687 // Verify that end of stream buffers are created. 682 // Verify that end of stream buffers are created.
688 CreateDemuxer("bear-vp8-webvtt.webm"); 683 CreateDemuxer("bear-vp8-webvtt.webm");
689 DemuxerStream* text_stream = NULL; 684 DemuxerStream* text_stream = NULL;
690 EXPECT_CALL(host_, AddTextStream(_, _)) 685 EXPECT_CALL(host_, AddTextStream(_, _))
691 .WillOnce(SaveArg<0>(&text_stream)); 686 .WillOnce(SaveArg<0>(&text_stream));
692 InitializeDemuxerText(true); 687 InitializeDemuxer(/*enable_text=*/true);
693 ASSERT_TRUE(text_stream); 688 ASSERT_TRUE(text_stream);
694 EXPECT_EQ(DemuxerStream::TEXT, text_stream->type()); 689 EXPECT_EQ(DemuxerStream::TEXT, text_stream->type());
695 690
696 bool got_eos_buffer = false; 691 bool got_eos_buffer = false;
697 const int kMaxBuffers = 10; 692 const int kMaxBuffers = 10;
698 for (int i = 0; !got_eos_buffer && i < kMaxBuffers; i++) { 693 for (int i = 0; !got_eos_buffer && i < kMaxBuffers; i++) {
699 text_stream->Read(base::Bind(&EosOnReadDone, &got_eos_buffer)); 694 text_stream->Read(base::Bind(&EosOnReadDone, &got_eos_buffer));
700 message_loop_.Run(); 695 message_loop_.Run();
701 } 696 }
702 697
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 message_loop_.Run(); 775 message_loop_.Run();
781 } 776 }
782 777
783 TEST_F(FFmpegDemuxerTest, SeekText) { 778 TEST_F(FFmpegDemuxerTest, SeekText) {
784 // We're testing that the demuxer frees all queued packets when it receives 779 // We're testing that the demuxer frees all queued packets when it receives
785 // a Seek(). 780 // a Seek().
786 CreateDemuxer("bear-vp8-webvtt.webm"); 781 CreateDemuxer("bear-vp8-webvtt.webm");
787 DemuxerStream* text_stream = NULL; 782 DemuxerStream* text_stream = NULL;
788 EXPECT_CALL(host_, AddTextStream(_, _)) 783 EXPECT_CALL(host_, AddTextStream(_, _))
789 .WillOnce(SaveArg<0>(&text_stream)); 784 .WillOnce(SaveArg<0>(&text_stream));
790 InitializeDemuxerText(true); 785 InitializeDemuxer(/*enable_text=*/true);
791 ASSERT_TRUE(text_stream); 786 ASSERT_TRUE(text_stream);
792 EXPECT_EQ(DemuxerStream::TEXT, text_stream->type()); 787 EXPECT_EQ(DemuxerStream::TEXT, text_stream->type());
793 788
794 // Get our streams. 789 // Get our streams.
795 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO); 790 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO);
796 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO); 791 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO);
797 ASSERT_TRUE(video); 792 ASSERT_TRUE(video);
798 ASSERT_TRUE(audio); 793 ASSERT_TRUE(audio);
799 794
800 // Read a text packet and release it. 795 // Read a text packet and release it.
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 CreateDemuxer("bear-640x360-non_square_pixel-with_pasp.mp4"); 1103 CreateDemuxer("bear-640x360-non_square_pixel-with_pasp.mp4");
1109 InitializeDemuxer(); 1104 InitializeDemuxer();
1110 1105
1111 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); 1106 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO);
1112 ASSERT_TRUE(stream); 1107 ASSERT_TRUE(stream);
1113 1108
1114 const VideoDecoderConfig& video_config = stream->video_decoder_config(); 1109 const VideoDecoderConfig& video_config = stream->video_decoder_config();
1115 EXPECT_EQ(gfx::Size(639, 360), video_config.natural_size()); 1110 EXPECT_EQ(gfx::Size(639, 360), video_config.natural_size());
1116 } 1111 }
1117 1112
1118 #endif
1119
1120 #if BUILDFLAG(ENABLE_HEVC_DEMUXING)
1121 TEST_F(FFmpegDemuxerTest, HEVC_in_MP4_container) { 1113 TEST_F(FFmpegDemuxerTest, HEVC_in_MP4_container) {
1122 CreateDemuxer("bear-hevc-frag.mp4"); 1114 CreateDemuxer("bear-hevc-frag.mp4");
1115 #if BUILDFLAG(ENABLE_HEVC_DEMUXING)
1123 InitializeDemuxer(); 1116 InitializeDemuxer();
1124 1117
1125 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO); 1118 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO);
1126 ASSERT_TRUE(video); 1119 ASSERT_TRUE(video);
1127 1120
1128 video->Read(NewReadCB(FROM_HERE, 3569, 66733, true)); 1121 video->Read(NewReadCB(FROM_HERE, 3569, 66733, true));
1129 message_loop_.Run(); 1122 message_loop_.Run();
1130 1123
1131 video->Read(NewReadCB(FROM_HERE, 1042, 200200, false)); 1124 video->Read(NewReadCB(FROM_HERE, 1042, 200200, false));
1132 message_loop_.Run(); 1125 message_loop_.Run();
1126 #else
1127 InitializeDemuxer(false, DEMUXER_ERROR_NO_SUPPORTED_STREAMS);
ddorwin 2016/02/19 20:51:09 InitializeDemuxerAndExpectUnsupportedFormat() OR I
servolk 2016/02/19 21:32:01 Done.
1128 #endif
1133 } 1129 }
1134 #endif
1135 1130
1136 #if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
1137 TEST_F(FFmpegDemuxerTest, Read_AC3_Audio) { 1131 TEST_F(FFmpegDemuxerTest, Read_AC3_Audio) {
1138 CreateDemuxer("bear-ac3-only-frag.mp4"); 1132 CreateDemuxer("bear-ac3-only-frag.mp4");
1133 #if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
1139 InitializeDemuxer(); 1134 InitializeDemuxer();
1140 1135
1141 // Attempt a read from the audio stream and run the message loop until done. 1136 // Attempt a read from the audio stream and run the message loop until done.
1142 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO); 1137 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO);
1143 1138
1144 // Read the first two frames and check that we are getting expected data 1139 // Read the first two frames and check that we are getting expected data
1145 audio->Read(NewReadCB(FROM_HERE, 834, 0, true)); 1140 audio->Read(NewReadCB(FROM_HERE, 834, 0, true));
1146 message_loop_.Run(); 1141 message_loop_.Run();
1147 1142
1148 audio->Read(NewReadCB(FROM_HERE, 836, 34830, true)); 1143 audio->Read(NewReadCB(FROM_HERE, 836, 34830, true));
1149 message_loop_.Run(); 1144 message_loop_.Run();
1145 #else
1146 InitializeDemuxer(false, DEMUXER_ERROR_NO_SUPPORTED_STREAMS);
1147 #endif
1150 } 1148 }
1151 1149
1152 TEST_F(FFmpegDemuxerTest, Read_EAC3_Audio) { 1150 TEST_F(FFmpegDemuxerTest, Read_EAC3_Audio) {
1153 CreateDemuxer("bear-eac3-only-frag.mp4"); 1151 CreateDemuxer("bear-eac3-only-frag.mp4");
1152 #if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
1154 InitializeDemuxer(); 1153 InitializeDemuxer();
1155 1154
1156 // Attempt a read from the audio stream and run the message loop until done. 1155 // Attempt a read from the audio stream and run the message loop until done.
1157 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO); 1156 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO);
1158 1157
1159 // Read the first two frames and check that we are getting expected data 1158 // Read the first two frames and check that we are getting expected data
1160 audio->Read(NewReadCB(FROM_HERE, 870, 0, true)); 1159 audio->Read(NewReadCB(FROM_HERE, 870, 0, true));
1161 message_loop_.Run(); 1160 message_loop_.Run();
1162 1161
1163 audio->Read(NewReadCB(FROM_HERE, 872, 34830, true)); 1162 audio->Read(NewReadCB(FROM_HERE, 872, 34830, true));
1164 message_loop_.Run(); 1163 message_loop_.Run();
1164 #else
1165 InitializeDemuxer(false, DEMUXER_ERROR_NO_SUPPORTED_STREAMS);
1166 #endif
1165 } 1167 }
1166 #endif // ENABLE_AC3_EAC3_AUDIO_DEMUXING 1168
1169 #endif
ddorwin 2016/02/19 20:51:09 // defined(USE_PROPRIETARY_CODECS) This is a long
ddorwin 2016/02/19 20:51:10 Is there a reason not to run these tests in all ca
servolk 2016/02/19 21:32:01 Done.
servolk 2016/02/19 21:32:01 Well, some earlier patchsets of this CL (e.g. PS #
ddorwin 2016/02/24 00:28:01 Acknowledged.
1167 1170
1168 } // namespace media 1171 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | media/formats/mp4/mp4_stream_parser_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698