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

Side by Side Diff: media/formats/webm/webm_stream_parser_unittest.cc

Issue 1826583003: MSE: Record counts of detected MSE audio, video and text tracks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Yet another attempt to fix that link failure. MEDIA_EXPORT should do it! 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
« no previous file with comments | « media/formats/webm/webm_stream_parser.cc ('k') | media/formats/webm/webm_tracks_parser.h » ('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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "media/base/decoder_buffer.h" 6 #include "media/base/decoder_buffer.h"
7 #include "media/base/media_tracks.h" 7 #include "media/base/media_tracks.h"
8 #include "media/base/mock_media_log.h" 8 #include "media/base/mock_media_log.h"
9 #include "media/base/stream_parser.h"
9 #include "media/base/test_data_util.h" 10 #include "media/base/test_data_util.h"
10 #include "media/base/text_track_config.h" 11 #include "media/base/text_track_config.h"
11 #include "media/formats/webm/webm_stream_parser.h" 12 #include "media/formats/webm/webm_stream_parser.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
15 using testing::SaveArg;
14 using testing::_; 16 using testing::_;
15 17
16 namespace media { 18 namespace media {
17 19
18 class WebMStreamParserTest : public testing::Test { 20 class WebMStreamParserTest : public testing::Test {
19 public: 21 public:
20 WebMStreamParserTest() 22 WebMStreamParserTest()
21 : media_log_(new testing::StrictMock<MockMediaLog>()) {} 23 : media_log_(new testing::StrictMock<MockMediaLog>()) {}
22 24
23 protected: 25 protected:
24 void ParseWebMFile(const std::string& filename) { 26 void ParseWebMFile(const std::string& filename,
27 const StreamParser::InitParameters& expected_params) {
25 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile(filename); 28 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile(filename);
26 parser_.reset(new WebMStreamParser()); 29 parser_.reset(new WebMStreamParser());
27 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = 30 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb =
28 base::Bind(&WebMStreamParserTest::OnEncryptedMediaInitData, 31 base::Bind(&WebMStreamParserTest::OnEncryptedMediaInitData,
29 base::Unretained(this)); 32 base::Unretained(this));
30 33
31 EXPECT_CALL(*this, InitCB(_)); 34 EXPECT_CALL(*this, InitCB(_));
32 EXPECT_CALL(*this, NewMediaSegmentCB()).Times(testing::AnyNumber()); 35 EXPECT_CALL(*this, NewMediaSegmentCB()).Times(testing::AnyNumber());
33 EXPECT_CALL(*this, EndMediaSegmentCB()).Times(testing::AnyNumber()); 36 EXPECT_CALL(*this, EndMediaSegmentCB()).Times(testing::AnyNumber());
34 EXPECT_CALL(*this, NewBuffersCB(_, _, _)) 37 EXPECT_CALL(*this, NewBuffersCB(_, _, _))
35 .Times(testing::AnyNumber()) 38 .Times(testing::AnyNumber())
36 .WillRepeatedly(testing::Return(true)); 39 .WillRepeatedly(testing::Return(true));
37 parser_->Init( 40 parser_->Init(
38 base::Bind(&WebMStreamParserTest::InitCB, base::Unretained(this)), 41 base::Bind(&WebMStreamParserTest::InitF, base::Unretained(this),
42 expected_params),
39 base::Bind(&WebMStreamParserTest::NewConfigCB, base::Unretained(this)), 43 base::Bind(&WebMStreamParserTest::NewConfigCB, base::Unretained(this)),
40 base::Bind(&WebMStreamParserTest::NewBuffersCB, base::Unretained(this)), 44 base::Bind(&WebMStreamParserTest::NewBuffersCB, base::Unretained(this)),
41 true, // ignore_text_track 45 false, // don't ignore_text_track
42 encrypted_media_init_data_cb, 46 encrypted_media_init_data_cb,
43 base::Bind(&WebMStreamParserTest::NewMediaSegmentCB, 47 base::Bind(&WebMStreamParserTest::NewMediaSegmentCB,
44 base::Unretained(this)), 48 base::Unretained(this)),
45 base::Bind(&WebMStreamParserTest::EndMediaSegmentCB, 49 base::Bind(&WebMStreamParserTest::EndMediaSegmentCB,
46 base::Unretained(this)), 50 base::Unretained(this)),
47 media_log_); 51 media_log_);
48 bool result = parser_->Parse(buffer->data(), buffer->data_size()); 52 bool result = parser_->Parse(buffer->data(), buffer->data_size());
49 EXPECT_TRUE(result); 53 EXPECT_TRUE(result);
50 } 54 }
51 55
56 // Verifies only the detected track counts by track type, then chains to the
57 // InitCB mock.
58 void InitF(const StreamParser::InitParameters& expected_params,
59 const StreamParser::InitParameters& params) {
60 EXPECT_EQ(expected_params.detected_audio_track_count,
61 params.detected_audio_track_count);
62 EXPECT_EQ(expected_params.detected_video_track_count,
63 params.detected_video_track_count);
64 EXPECT_EQ(expected_params.detected_text_track_count,
65 params.detected_text_track_count);
66 InitCB(params);
67 }
68
52 MOCK_METHOD1(InitCB, void(const StreamParser::InitParameters& params)); 69 MOCK_METHOD1(InitCB, void(const StreamParser::InitParameters& params));
53 70
54 bool NewConfigCB(scoped_ptr<MediaTracks> tracks, 71 bool NewConfigCB(scoped_ptr<MediaTracks> tracks,
55 const StreamParser::TextTrackConfigMap& text_track_map) { 72 const StreamParser::TextTrackConfigMap& text_track_map) {
56 DCHECK(tracks.get()); 73 DCHECK(tracks.get());
57 media_tracks_ = std::move(tracks); 74 media_tracks_ = std::move(tracks);
58 return true; 75 return true;
59 } 76 }
60 77
61 MOCK_METHOD3(NewBuffersCB, 78 MOCK_METHOD3(NewBuffersCB,
62 bool(const StreamParser::BufferQueue&, 79 bool(const StreamParser::BufferQueue&,
63 const StreamParser::BufferQueue&, 80 const StreamParser::BufferQueue&,
64 const StreamParser::TextBufferQueueMap&)); 81 const StreamParser::TextBufferQueueMap&));
65 MOCK_METHOD2(OnEncryptedMediaInitData, 82 MOCK_METHOD2(OnEncryptedMediaInitData,
66 void(EmeInitDataType init_data_type, 83 void(EmeInitDataType init_data_type,
67 const std::vector<uint8_t>& init_data)); 84 const std::vector<uint8_t>& init_data));
68 MOCK_METHOD0(NewMediaSegmentCB, void()); 85 MOCK_METHOD0(NewMediaSegmentCB, void());
69 MOCK_METHOD0(EndMediaSegmentCB, void()); 86 MOCK_METHOD0(EndMediaSegmentCB, void());
70 87
71 scoped_refptr<testing::StrictMock<MockMediaLog>> media_log_; 88 scoped_refptr<testing::StrictMock<MockMediaLog>> media_log_;
72 scoped_ptr<WebMStreamParser> parser_; 89 scoped_ptr<WebMStreamParser> parser_;
73 scoped_ptr<MediaTracks> media_tracks_; 90 scoped_ptr<MediaTracks> media_tracks_;
74 }; 91 };
75 92
76 TEST_F(WebMStreamParserTest, VerifyMediaTrackMetadata) { 93 TEST_F(WebMStreamParserTest, VerifyMediaTrackMetadata) {
77 EXPECT_MEDIA_LOG(testing::HasSubstr("Estimating WebM block duration")) 94 EXPECT_MEDIA_LOG(testing::HasSubstr("Estimating WebM block duration"))
78 .Times(testing::AnyNumber()); 95 .Times(testing::AnyNumber());
79 ParseWebMFile("bear.webm"); 96 StreamParser::InitParameters params(kInfiniteDuration());
97 params.detected_audio_track_count = 1;
98 params.detected_video_track_count = 1;
99 params.detected_text_track_count = 0;
100 ParseWebMFile("bear.webm", params);
80 EXPECT_NE(media_tracks_.get(), nullptr); 101 EXPECT_NE(media_tracks_.get(), nullptr);
81 102
82 EXPECT_EQ(media_tracks_->tracks().size(), 2u); 103 EXPECT_EQ(media_tracks_->tracks().size(), 2u);
83 104
84 const MediaTrack& video_track = *(media_tracks_->tracks()[0]); 105 const MediaTrack& video_track = *(media_tracks_->tracks()[0]);
85 EXPECT_EQ(video_track.type(), MediaTrack::Video); 106 EXPECT_EQ(video_track.type(), MediaTrack::Video);
86 EXPECT_EQ(video_track.id(), "1"); 107 EXPECT_EQ(video_track.id(), "1");
87 EXPECT_EQ(video_track.kind(), "main"); 108 EXPECT_EQ(video_track.kind(), "main");
88 EXPECT_EQ(video_track.label(), ""); 109 EXPECT_EQ(video_track.label(), "");
89 EXPECT_EQ(video_track.language(), "und"); 110 EXPECT_EQ(video_track.language(), "und");
90 111
91 const MediaTrack& audio_track = *(media_tracks_->tracks()[1]); 112 const MediaTrack& audio_track = *(media_tracks_->tracks()[1]);
92 EXPECT_EQ(audio_track.type(), MediaTrack::Audio); 113 EXPECT_EQ(audio_track.type(), MediaTrack::Audio);
93 EXPECT_EQ(audio_track.id(), "2"); 114 EXPECT_EQ(audio_track.id(), "2");
94 EXPECT_EQ(audio_track.kind(), "main"); 115 EXPECT_EQ(audio_track.kind(), "main");
95 EXPECT_EQ(audio_track.label(), ""); 116 EXPECT_EQ(audio_track.label(), "");
96 EXPECT_EQ(audio_track.language(), "und"); 117 EXPECT_EQ(audio_track.language(), "und");
97 } 118 }
98 119
120 TEST_F(WebMStreamParserTest, VerifyDetectedTrack_AudioOnly) {
121 EXPECT_MEDIA_LOG(testing::HasSubstr("Estimating WebM block duration"))
122 .Times(testing::AnyNumber());
123 StreamParser::InitParameters params(kInfiniteDuration());
124 params.detected_audio_track_count = 1;
125 params.detected_video_track_count = 0;
126 params.detected_text_track_count = 0;
127 ParseWebMFile("bear-320x240-audio-only.webm", params);
128 EXPECT_EQ(media_tracks_->tracks().size(), 1u);
129 EXPECT_EQ(media_tracks_->tracks()[0]->type(), MediaTrack::Audio);
130 }
131
132 TEST_F(WebMStreamParserTest, VerifyDetectedTrack_VideoOnly) {
133 StreamParser::InitParameters params(kInfiniteDuration());
134 params.detected_audio_track_count = 0;
135 params.detected_video_track_count = 1;
136 params.detected_text_track_count = 0;
137 ParseWebMFile("bear-320x240-video-only.webm", params);
138 EXPECT_EQ(media_tracks_->tracks().size(), 1u);
139 EXPECT_EQ(media_tracks_->tracks()[0]->type(), MediaTrack::Video);
140 }
141
142 TEST_F(WebMStreamParserTest, VerifyDetectedTracks_AVText) {
143 EXPECT_MEDIA_LOG(testing::HasSubstr("Estimating WebM block duration"))
144 .Times(testing::AnyNumber());
145 StreamParser::InitParameters params(kInfiniteDuration());
146 params.detected_audio_track_count = 1;
147 params.detected_video_track_count = 1;
148 params.detected_text_track_count = 1;
149 ParseWebMFile("bear-vp8-webvtt.webm", params);
150 EXPECT_EQ(media_tracks_->tracks().size(), 2u);
151 EXPECT_EQ(media_tracks_->tracks()[0]->type(), MediaTrack::Video);
152 EXPECT_EQ(media_tracks_->tracks()[1]->type(), MediaTrack::Audio);
153 }
154
99 } // namespace media 155 } // namespace media
OLDNEW
« no previous file with comments | « media/formats/webm/webm_stream_parser.cc ('k') | media/formats/webm/webm_tracks_parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698