OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |