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

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

Issue 231283005: Add live mode detection in WebM MediaSource parser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/logging.h" 5 #include "base/logging.h"
6 #include "media/base/channel_layout.h" 6 #include "media/base/channel_layout.h"
7 #include "media/formats/webm/tracks_builder.h" 7 #include "media/formats/webm/tracks_builder.h"
8 #include "media/formats/webm/webm_constants.h" 8 #include "media/formats/webm/webm_constants.h"
9 #include "media/formats/webm/webm_tracks_parser.h" 9 #include "media/formats/webm/webm_tracks_parser.h"
10 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
(...skipping 10 matching lines...) Expand all
21 class WebMTracksParserTest : public testing::Test { 21 class WebMTracksParserTest : public testing::Test {
22 public: 22 public:
23 WebMTracksParserTest() {} 23 WebMTracksParserTest() {}
24 }; 24 };
25 25
26 static void VerifyTextTrackInfo(const uint8* buffer, 26 static void VerifyTextTrackInfo(const uint8* buffer,
27 int buffer_size, 27 int buffer_size,
28 TextKind text_kind, 28 TextKind text_kind,
29 const std::string& name, 29 const std::string& name,
30 const std::string& language) { 30 const std::string& language) {
31 scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), false)); 31 scoped_ptr<WebMTracksParser> parser(
32 new WebMTracksParser(LogCB(), false, false));
32 33
33 int result = parser->Parse(buffer, buffer_size); 34 int result = parser->Parse(buffer, buffer_size);
34 EXPECT_GT(result, 0); 35 EXPECT_GT(result, 0);
35 EXPECT_EQ(result, buffer_size); 36 EXPECT_EQ(result, buffer_size);
36 37
37 const WebMTracksParser::TextTracks& text_tracks = parser->text_tracks(); 38 const WebMTracksParser::TextTracks& text_tracks = parser->text_tracks();
38 EXPECT_EQ(text_tracks.size(), WebMTracksParser::TextTracks::size_type(1)); 39 EXPECT_EQ(text_tracks.size(), WebMTracksParser::TextTracks::size_type(1));
39 40
40 const WebMTracksParser::TextTracks::const_iterator itr = text_tracks.begin(); 41 const WebMTracksParser::TextTracks::const_iterator itr = text_tracks.begin();
41 EXPECT_EQ(itr->first, 1); // track num 42 EXPECT_EQ(itr->first, 1); // track num
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 88 }
88 89
89 TEST_F(WebMTracksParserTest, IgnoringTextTracks) { 90 TEST_F(WebMTracksParserTest, IgnoringTextTracks) {
90 InSequence s; 91 InSequence s;
91 92
92 TracksBuilder tb; 93 TracksBuilder tb;
93 tb.AddTextTrack(1, 1, kWebMCodecSubtitles, "Subtitles", "fre"); 94 tb.AddTextTrack(1, 1, kWebMCodecSubtitles, "Subtitles", "fre");
94 tb.AddTextTrack(2, 2, kWebMCodecSubtitles, "Commentary", "fre"); 95 tb.AddTextTrack(2, 2, kWebMCodecSubtitles, "Commentary", "fre");
95 96
96 const std::vector<uint8> buf = tb.Finish(); 97 const std::vector<uint8> buf = tb.Finish();
97 scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), true)); 98 scoped_ptr<WebMTracksParser> parser(
99 new WebMTracksParser(LogCB(), true, false));
98 100
99 int result = parser->Parse(&buf[0], buf.size()); 101 int result = parser->Parse(&buf[0], buf.size());
100 EXPECT_GT(result, 0); 102 EXPECT_GT(result, 0);
101 EXPECT_EQ(result, static_cast<int>(buf.size())); 103 EXPECT_EQ(result, static_cast<int>(buf.size()));
102 104
103 EXPECT_EQ(parser->text_tracks().size(), 0u); 105 EXPECT_EQ(parser->text_tracks().size(), 0u);
104 106
105 const std::set<int64>& ignored_tracks = parser->ignored_tracks(); 107 const std::set<int64>& ignored_tracks = parser->ignored_tracks();
106 EXPECT_TRUE(ignored_tracks.find(1) != ignored_tracks.end()); 108 EXPECT_TRUE(ignored_tracks.find(1) != ignored_tracks.end());
107 EXPECT_TRUE(ignored_tracks.find(2) != ignored_tracks.end()); 109 EXPECT_TRUE(ignored_tracks.find(2) != ignored_tracks.end());
108 110
109 // Test again w/o ignoring the test tracks. 111 // Test again w/o ignoring the test tracks.
110 parser.reset(new WebMTracksParser(LogCB(), false)); 112 parser.reset(new WebMTracksParser(LogCB(), false, false));
111 113
112 result = parser->Parse(&buf[0], buf.size()); 114 result = parser->Parse(&buf[0], buf.size());
113 EXPECT_GT(result, 0); 115 EXPECT_GT(result, 0);
114 116
115 EXPECT_EQ(parser->ignored_tracks().size(), 0u); 117 EXPECT_EQ(parser->ignored_tracks().size(), 0u);
116 EXPECT_EQ(parser->text_tracks().size(), 2u); 118 EXPECT_EQ(parser->text_tracks().size(), 2u);
117 } 119 }
118 120
119 TEST_F(WebMTracksParserTest, AudioVideoDefaultDurationUnset) { 121 TEST_F(WebMTracksParserTest, AudioVideoDefaultDurationUnset) {
120 // Other audio/video decoder config fields are necessary in the test 122 // Other audio/video decoder config fields are necessary in the test
121 // audio/video TrackEntry configurations. This method does only very minimal 123 // audio/video TrackEntry configurations. This method does only very minimal
122 // verification of their inclusion and parsing; the goal is to confirm 124 // verification of their inclusion and parsing; the goal is to confirm
123 // TrackEntry DefaultDuration defaults to -1 if not included in audio or 125 // TrackEntry DefaultDuration defaults to -1 if not included in audio or
124 // video TrackEntry. 126 // video TrackEntry.
125 TracksBuilder tb; 127 TracksBuilder tb;
126 tb.AddAudioTrack(1, 1, "A_VORBIS", "audio", "", -1, 2, 8000); 128 tb.AddAudioTrack(1, 1, "A_VORBIS", "audio", "", -1, 2, 8000);
127 tb.AddVideoTrack(2, 2, "V_VP8", "video", "", -1, 320, 240); 129 tb.AddVideoTrack(2, 2, "V_VP8", "video", "", -1, 320, 240);
128 const std::vector<uint8> buf = tb.Finish(); 130 const std::vector<uint8> buf = tb.Finish();
129 131
130 scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), true)); 132 scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), true, false) );
scherkus (not reviewing) 2014/04/10 21:11:49 80 chars
Sergey Ulanov 2014/04/10 23:10:07 Done.
131 int result = parser->Parse(&buf[0], buf.size()); 133 int result = parser->Parse(&buf[0], buf.size());
132 EXPECT_LE(0, result); 134 EXPECT_LE(0, result);
133 EXPECT_EQ(static_cast<int>(buf.size()), result); 135 EXPECT_EQ(static_cast<int>(buf.size()), result);
134 136
135 EXPECT_EQ(kNoTimestamp(), 137 EXPECT_EQ(kNoTimestamp(),
136 parser->GetAudioDefaultDuration(kDefaultTimecodeScaleInUs)); 138 parser->GetAudioDefaultDuration(kDefaultTimecodeScaleInUs));
137 EXPECT_EQ(kNoTimestamp(), 139 EXPECT_EQ(kNoTimestamp(),
138 parser->GetVideoDefaultDuration(kDefaultTimecodeScaleInUs)); 140 parser->GetVideoDefaultDuration(kDefaultTimecodeScaleInUs));
139 141
140 const VideoDecoderConfig& video_config = parser->video_decoder_config(); 142 const VideoDecoderConfig& video_config = parser->video_decoder_config();
141 EXPECT_TRUE(video_config.IsValidConfig()); 143 EXPECT_TRUE(video_config.IsValidConfig());
142 EXPECT_EQ(320, video_config.coded_size().width()); 144 EXPECT_EQ(320, video_config.coded_size().width());
143 EXPECT_EQ(240, video_config.coded_size().height()); 145 EXPECT_EQ(240, video_config.coded_size().height());
144 146
145 const AudioDecoderConfig& audio_config = parser->audio_decoder_config(); 147 const AudioDecoderConfig& audio_config = parser->audio_decoder_config();
146 EXPECT_TRUE(audio_config.IsValidConfig()); 148 EXPECT_TRUE(audio_config.IsValidConfig());
147 EXPECT_EQ(CHANNEL_LAYOUT_STEREO, audio_config.channel_layout()); 149 EXPECT_EQ(CHANNEL_LAYOUT_STEREO, audio_config.channel_layout());
148 EXPECT_EQ(8000, audio_config.samples_per_second()); 150 EXPECT_EQ(8000, audio_config.samples_per_second());
149 } 151 }
150 152
151 TEST_F(WebMTracksParserTest, AudioVideoDefaultDurationSet) { 153 TEST_F(WebMTracksParserTest, AudioVideoDefaultDurationSet) {
152 // Confirm audio or video TrackEntry DefaultDuration values are parsed, if 154 // Confirm audio or video TrackEntry DefaultDuration values are parsed, if
153 // present. 155 // present.
154 TracksBuilder tb; 156 TracksBuilder tb;
155 tb.AddAudioTrack(1, 1, "A_VORBIS", "audio", "", 12345678, 2, 8000); 157 tb.AddAudioTrack(1, 1, "A_VORBIS", "audio", "", 12345678, 2, 8000);
156 tb.AddVideoTrack(2, 2, "V_VP8", "video", "", 987654321, 320, 240); 158 tb.AddVideoTrack(2, 2, "V_VP8", "video", "", 987654321, 320, 240);
157 const std::vector<uint8> buf = tb.Finish(); 159 const std::vector<uint8> buf = tb.Finish();
158 160
159 scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), true)); 161 scoped_ptr<WebMTracksParser> parser(
162 new WebMTracksParser(LogCB(), true, false));
160 int result = parser->Parse(&buf[0], buf.size()); 163 int result = parser->Parse(&buf[0], buf.size());
161 EXPECT_LE(0, result); 164 EXPECT_LE(0, result);
162 EXPECT_EQ(static_cast<int>(buf.size()), result); 165 EXPECT_EQ(static_cast<int>(buf.size()), result);
163 166
164 EXPECT_EQ(base::TimeDelta::FromMicroseconds(12000), 167 EXPECT_EQ(base::TimeDelta::FromMicroseconds(12000),
165 parser->GetAudioDefaultDuration(kDefaultTimecodeScaleInUs)); 168 parser->GetAudioDefaultDuration(kDefaultTimecodeScaleInUs));
166 EXPECT_EQ(base::TimeDelta::FromMicroseconds(985000), 169 EXPECT_EQ(base::TimeDelta::FromMicroseconds(985000),
167 parser->GetVideoDefaultDuration(5000.0)); // 5 ms resolution 170 parser->GetVideoDefaultDuration(5000.0)); // 5 ms resolution
168 EXPECT_EQ(kNoTimestamp(), parser->GetAudioDefaultDuration(12346.0)); 171 EXPECT_EQ(kNoTimestamp(), parser->GetAudioDefaultDuration(12346.0));
169 EXPECT_EQ(base::TimeDelta::FromMicroseconds(12345), 172 EXPECT_EQ(base::TimeDelta::FromMicroseconds(12345),
170 parser->GetAudioDefaultDuration(12345.0)); 173 parser->GetAudioDefaultDuration(12345.0));
171 EXPECT_EQ(base::TimeDelta::FromMicroseconds(12003), 174 EXPECT_EQ(base::TimeDelta::FromMicroseconds(12003),
172 parser->GetAudioDefaultDuration(1000.3)); // 1.0003 ms resolution 175 parser->GetAudioDefaultDuration(1000.3)); // 1.0003 ms resolution
173 } 176 }
174 177
175 TEST_F(WebMTracksParserTest, InvalidZeroDefaultDurationSet) { 178 TEST_F(WebMTracksParserTest, InvalidZeroDefaultDurationSet) {
176 // Confirm parse error if TrackEntry DefaultDuration is present, but is 0ns. 179 // Confirm parse error if TrackEntry DefaultDuration is present, but is 0ns.
177 TracksBuilder tb(true); 180 TracksBuilder tb(true);
178 tb.AddAudioTrack(1, 1, "A_VORBIS", "audio", "", 0, 2, 8000); 181 tb.AddAudioTrack(1, 1, "A_VORBIS", "audio", "", 0, 2, 8000);
179 const std::vector<uint8> buf = tb.Finish(); 182 const std::vector<uint8> buf = tb.Finish();
180 183
181 scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), true)); 184 scoped_ptr<WebMTracksParser> parser(
185 new WebMTracksParser(LogCB(), true, false));
182 EXPECT_EQ(-1, parser->Parse(&buf[0], buf.size())); 186 EXPECT_EQ(-1, parser->Parse(&buf[0], buf.size()));
183 } 187 }
184 188
185 } // namespace media 189 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698