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 "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/sha1.h" | 7 #include "base/sha1.h" |
8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
9 #include "media/base/audio_video_metadata_extractor.h" | 9 #include "media/base/audio_video_metadata_extractor.h" |
10 #include "media/base/test_data_util.h" | 10 #include "media/base/test_data_util.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 return extractor; | 32 return extractor; |
33 | 33 |
34 EXPECT_EQ(expected_duration, extractor->duration()); | 34 EXPECT_EQ(expected_duration, extractor->duration()); |
35 | 35 |
36 EXPECT_EQ(expected_width, extractor->width()); | 36 EXPECT_EQ(expected_width, extractor->width()); |
37 EXPECT_EQ(expected_height, extractor->height()); | 37 EXPECT_EQ(expected_height, extractor->height()); |
38 | 38 |
39 return extractor; | 39 return extractor; |
40 } | 40 } |
41 | 41 |
| 42 const std::string GetTagValue( |
| 43 const media::AudioVideoMetadataExtractor::TagDictionary& tags, |
| 44 const char* tag_name) { |
| 45 auto tag_data = tags.find(tag_name); |
| 46 return tag_data == tags.end() ? "" : tag_data->second; |
| 47 } |
| 48 |
42 TEST(AudioVideoMetadataExtractorTest, InvalidFile) { | 49 TEST(AudioVideoMetadataExtractorTest, InvalidFile) { |
43 GetExtractor("ten_byte_file", true, false, 0, -1, -1); | 50 GetExtractor("ten_byte_file", true, false, 0, -1, -1); |
44 } | 51 } |
45 | 52 |
46 TEST(AudioVideoMetadataExtractorTest, AudioOGG) { | 53 TEST(AudioVideoMetadataExtractorTest, AudioOGG) { |
47 scoped_ptr<AudioVideoMetadataExtractor> extractor = | 54 scoped_ptr<AudioVideoMetadataExtractor> extractor = |
48 GetExtractor("9ch.ogg", true, true, 0, -1, -1); | 55 GetExtractor("9ch.ogg", true, true, 0, -1, -1); |
49 EXPECT_EQ("Processed by SoX", extractor->comment()); | 56 EXPECT_EQ("Processed by SoX", extractor->comment()); |
50 | 57 |
51 EXPECT_EQ("ogg", extractor->stream_infos()[0].type); | 58 EXPECT_EQ("ogg", extractor->stream_infos()[0].type); |
52 EXPECT_EQ(2u, extractor->stream_infos().size()); | 59 EXPECT_EQ(2u, extractor->stream_infos().size()); |
53 | 60 |
54 EXPECT_EQ(0u, extractor->stream_infos()[0].tags.size()); | 61 EXPECT_EQ(0u, extractor->stream_infos()[0].tags.size()); |
55 | 62 |
56 EXPECT_EQ(1u, extractor->stream_infos()[1].tags.size()); | 63 EXPECT_EQ(1u, extractor->stream_infos()[1].tags.size()); |
57 EXPECT_EQ("vorbis", extractor->stream_infos()[1].type); | 64 EXPECT_EQ("vorbis", extractor->stream_infos()[1].type); |
58 EXPECT_EQ("Processed by SoX", | 65 EXPECT_EQ("Processed by SoX", |
59 extractor->stream_infos()[1].tags.find("COMMENT")->second); | 66 GetTagValue(extractor->stream_infos()[1].tags, "COMMENT")); |
60 | 67 |
61 EXPECT_EQ(0u, extractor->attached_images_bytes().size()); | 68 EXPECT_EQ(0u, extractor->attached_images_bytes().size()); |
62 } | 69 } |
63 | 70 |
64 TEST(AudioVideoMetadataExtractorTest, AudioWAV) { | 71 TEST(AudioVideoMetadataExtractorTest, AudioWAV) { |
65 scoped_ptr<AudioVideoMetadataExtractor> extractor = | 72 scoped_ptr<AudioVideoMetadataExtractor> extractor = |
66 GetExtractor("sfx_u8.wav", true, true, 0, -1, -1); | 73 GetExtractor("sfx_u8.wav", true, true, 0, -1, -1); |
67 EXPECT_EQ("Lavf54.37.100", extractor->encoder()); | 74 EXPECT_EQ("Lavf54.37.100", extractor->encoder()); |
68 EXPECT_EQ("Amadeus Pro", extractor->encoded_by()); | 75 EXPECT_EQ("Amadeus Pro", extractor->encoded_by()); |
69 | 76 |
70 EXPECT_EQ("wav", extractor->stream_infos()[0].type); | 77 EXPECT_EQ("wav", extractor->stream_infos()[0].type); |
71 EXPECT_EQ(2u, extractor->stream_infos().size()); | 78 EXPECT_EQ(2u, extractor->stream_infos().size()); |
72 | 79 |
73 EXPECT_EQ(2u, extractor->stream_infos()[0].tags.size()); | 80 EXPECT_EQ(2u, extractor->stream_infos()[0].tags.size()); |
74 EXPECT_EQ("Lavf54.37.100", | 81 EXPECT_EQ("Lavf54.37.100", |
75 extractor->stream_infos()[0].tags.find("encoder")->second); | 82 GetTagValue(extractor->stream_infos()[0].tags, "encoder")); |
76 EXPECT_EQ("Amadeus Pro", | 83 EXPECT_EQ("Amadeus Pro", |
77 extractor->stream_infos()[0].tags.find("encoded_by")->second); | 84 GetTagValue(extractor->stream_infos()[0].tags, "encoded_by")); |
78 | 85 |
79 EXPECT_EQ("pcm_u8", extractor->stream_infos()[1].type); | 86 EXPECT_EQ("pcm_u8", extractor->stream_infos()[1].type); |
80 EXPECT_EQ(0u, extractor->stream_infos()[1].tags.size()); | 87 EXPECT_EQ(0u, extractor->stream_infos()[1].tags.size()); |
81 | 88 |
82 EXPECT_EQ(0u, extractor->attached_images_bytes().size()); | 89 EXPECT_EQ(0u, extractor->attached_images_bytes().size()); |
83 } | 90 } |
84 | 91 |
85 TEST(AudioVideoMetadataExtractorTest, VideoWebM) { | 92 TEST(AudioVideoMetadataExtractorTest, VideoWebM) { |
86 scoped_ptr<AudioVideoMetadataExtractor> extractor = | 93 scoped_ptr<AudioVideoMetadataExtractor> extractor = |
87 GetExtractor("bear-320x240-multitrack.webm", true, true, 2, 320, 240); | 94 GetExtractor("bear-320x240-multitrack.webm", true, true, 2, 320, 240); |
88 EXPECT_EQ("Lavf53.9.0", extractor->encoder()); | 95 EXPECT_EQ("Lavf53.9.0", extractor->encoder()); |
89 | 96 |
90 EXPECT_EQ(6u, extractor->stream_infos().size()); | 97 EXPECT_EQ(6u, extractor->stream_infos().size()); |
91 | 98 |
92 EXPECT_EQ("matroska,webm", extractor->stream_infos()[0].type); | 99 EXPECT_EQ("matroska,webm", extractor->stream_infos()[0].type); |
93 EXPECT_EQ(1u, extractor->stream_infos()[0].tags.size()); | 100 EXPECT_EQ(1u, extractor->stream_infos()[0].tags.size()); |
94 EXPECT_EQ("Lavf53.9.0", | 101 EXPECT_EQ("Lavf53.9.0", |
95 extractor->stream_infos()[0].tags.find("ENCODER")->second); | 102 GetTagValue(extractor->stream_infos()[0].tags, "ENCODER")); |
96 | 103 |
97 EXPECT_EQ("vp8", extractor->stream_infos()[1].type); | 104 EXPECT_EQ("vp8", extractor->stream_infos()[1].type); |
98 EXPECT_EQ(0u, extractor->stream_infos()[1].tags.size()); | 105 EXPECT_EQ(0u, extractor->stream_infos()[1].tags.size()); |
99 | 106 |
100 EXPECT_EQ("vorbis", extractor->stream_infos()[2].type); | 107 EXPECT_EQ("vorbis", extractor->stream_infos()[2].type); |
101 EXPECT_EQ(0u, extractor->stream_infos()[2].tags.size()); | 108 EXPECT_EQ(0u, extractor->stream_infos()[2].tags.size()); |
102 | 109 |
103 EXPECT_EQ("subrip", extractor->stream_infos()[3].type); | 110 EXPECT_EQ("subrip", extractor->stream_infos()[3].type); |
104 EXPECT_EQ(0u, extractor->stream_infos()[3].tags.size()); | 111 EXPECT_EQ(0u, extractor->stream_infos()[3].tags.size()); |
105 | 112 |
106 EXPECT_EQ("theora", extractor->stream_infos()[4].type); | 113 EXPECT_EQ("theora", extractor->stream_infos()[4].type); |
107 EXPECT_EQ(0u, extractor->stream_infos()[4].tags.size()); | 114 EXPECT_EQ(0u, extractor->stream_infos()[4].tags.size()); |
108 | 115 |
109 EXPECT_EQ("pcm_s16le", extractor->stream_infos()[5].type); | 116 EXPECT_EQ("pcm_s16le", extractor->stream_infos()[5].type); |
110 EXPECT_EQ(1u, extractor->stream_infos()[5].tags.size()); | 117 EXPECT_EQ(1u, extractor->stream_infos()[5].tags.size()); |
111 EXPECT_EQ("Lavc52.32.0", | 118 EXPECT_EQ("Lavc52.32.0", |
112 extractor->stream_infos()[5].tags.find("ENCODER")->second); | 119 GetTagValue(extractor->stream_infos()[5].tags, "ENCODER")); |
113 | 120 |
114 EXPECT_EQ(0u, extractor->attached_images_bytes().size()); | 121 EXPECT_EQ(0u, extractor->attached_images_bytes().size()); |
115 } | 122 } |
116 | 123 |
117 #if defined(USE_PROPRIETARY_CODECS) | 124 #if defined(USE_PROPRIETARY_CODECS) |
118 TEST(AudioVideoMetadataExtractorTest, AndroidRotatedMP4Video) { | 125 TEST(AudioVideoMetadataExtractorTest, AndroidRotatedMP4Video) { |
119 scoped_ptr<AudioVideoMetadataExtractor> extractor = | 126 scoped_ptr<AudioVideoMetadataExtractor> extractor = |
120 GetExtractor("90rotation.mp4", true, true, 0, 1920, 1080); | 127 GetExtractor("90rotation.mp4", true, true, 0, 1920, 1080); |
121 | 128 |
122 EXPECT_EQ(90, extractor->rotation()); | 129 EXPECT_EQ(90, extractor->rotation()); |
123 | 130 |
124 EXPECT_EQ(3u, extractor->stream_infos().size()); | 131 EXPECT_EQ(3u, extractor->stream_infos().size()); |
125 | 132 |
126 EXPECT_EQ("mov,mp4,m4a,3gp,3g2,mj2", extractor->stream_infos()[0].type); | 133 EXPECT_EQ("mov,mp4,m4a,3gp,3g2,mj2", extractor->stream_infos()[0].type); |
127 EXPECT_EQ(4u, extractor->stream_infos()[0].tags.size()); | 134 EXPECT_EQ(4u, extractor->stream_infos()[0].tags.size()); |
128 EXPECT_EQ( | 135 EXPECT_EQ("isom3gp4", GetTagValue(extractor->stream_infos()[0].tags, |
129 "isom3gp4", | 136 "compatible_brands")); |
130 extractor->stream_infos()[0].tags.find("compatible_brands")->second); | 137 EXPECT_EQ("2014-02-11 00:39:25", |
131 EXPECT_EQ( | 138 GetTagValue(extractor->stream_infos()[0].tags, "creation_time")); |
132 "2014-02-11 00:39:25", | |
133 extractor->stream_infos()[0].tags.find("creation_time")->second); | |
134 EXPECT_EQ("isom", | 139 EXPECT_EQ("isom", |
135 extractor->stream_infos()[0].tags.find("major_brand")->second); | 140 GetTagValue(extractor->stream_infos()[0].tags, "major_brand")); |
136 EXPECT_EQ("0", | 141 EXPECT_EQ("0", |
137 extractor->stream_infos()[0].tags.find("minor_version")->second); | 142 GetTagValue(extractor->stream_infos()[0].tags, "minor_version")); |
138 | 143 |
139 EXPECT_EQ("h264", extractor->stream_infos()[1].type); | 144 EXPECT_EQ("h264", extractor->stream_infos()[1].type); |
140 EXPECT_EQ(5u, extractor->stream_infos()[1].tags.size()); | 145 EXPECT_EQ(5u, extractor->stream_infos()[1].tags.size()); |
141 EXPECT_EQ("2014-02-11 00:39:25", | 146 EXPECT_EQ("2014-02-11 00:39:25", |
142 extractor->stream_infos()[1].tags.find("creation_time")->second); | 147 GetTagValue(extractor->stream_infos()[1].tags, "creation_time")); |
143 EXPECT_EQ("VideoHandle", | 148 EXPECT_EQ("VideoHandle", |
144 extractor->stream_infos()[1].tags.find("handler_name")->second); | 149 GetTagValue(extractor->stream_infos()[1].tags, "handler_name")); |
145 EXPECT_EQ("eng", extractor->stream_infos()[1].tags.find("language")->second); | 150 EXPECT_EQ("eng", GetTagValue(extractor->stream_infos()[1].tags, "language")); |
146 EXPECT_EQ("90", extractor->stream_infos()[1].tags.find("rotate")->second); | 151 EXPECT_EQ("90", GetTagValue(extractor->stream_infos()[1].tags, "rotate")); |
147 | 152 |
148 EXPECT_EQ("aac", extractor->stream_infos()[2].type); | 153 EXPECT_EQ("aac", extractor->stream_infos()[2].type); |
149 EXPECT_EQ(3u, extractor->stream_infos()[2].tags.size()); | 154 EXPECT_EQ(3u, extractor->stream_infos()[2].tags.size()); |
150 EXPECT_EQ("2014-02-11 00:39:25", | 155 EXPECT_EQ("2014-02-11 00:39:25", |
151 extractor->stream_infos()[2].tags.find("creation_time")->second); | 156 GetTagValue(extractor->stream_infos()[2].tags, "creation_time")); |
152 EXPECT_EQ("SoundHandle", | 157 EXPECT_EQ("SoundHandle", |
153 extractor->stream_infos()[2].tags.find("handler_name")->second); | 158 GetTagValue(extractor->stream_infos()[2].tags, "handler_name")); |
154 EXPECT_EQ("eng", extractor->stream_infos()[2].tags.find("language")->second); | 159 EXPECT_EQ("eng", GetTagValue(extractor->stream_infos()[2].tags, "language")); |
155 | 160 |
156 EXPECT_EQ(0u, extractor->attached_images_bytes().size()); | 161 EXPECT_EQ(0u, extractor->attached_images_bytes().size()); |
157 } | 162 } |
158 | 163 |
159 TEST(AudioVideoMetadataExtractorTest, AudioMP3) { | 164 TEST(AudioVideoMetadataExtractorTest, AudioMP3) { |
160 scoped_ptr<AudioVideoMetadataExtractor> extractor = | 165 scoped_ptr<AudioVideoMetadataExtractor> extractor = |
161 GetExtractor("id3_png_test.mp3", true, true, 1, -1, -1); | 166 GetExtractor("id3_png_test.mp3", true, true, 1, -1, -1); |
162 | 167 |
163 EXPECT_EQ("Airbag", extractor->title()); | 168 EXPECT_EQ("Airbag", extractor->title()); |
164 EXPECT_EQ("Radiohead", extractor->artist()); | 169 EXPECT_EQ("Radiohead", extractor->artist()); |
165 EXPECT_EQ("OK Computer", extractor->album()); | 170 EXPECT_EQ("OK Computer", extractor->album()); |
166 EXPECT_EQ(1, extractor->track()); | 171 EXPECT_EQ(1, extractor->track()); |
167 EXPECT_EQ("Alternative", extractor->genre()); | 172 EXPECT_EQ("Alternative", extractor->genre()); |
168 EXPECT_EQ("1997", extractor->date()); | 173 EXPECT_EQ("1997", extractor->date()); |
169 EXPECT_EQ("Lavf54.4.100", extractor->encoder()); | 174 EXPECT_EQ("Lavf54.4.100", extractor->encoder()); |
170 | 175 |
171 EXPECT_EQ(3u, extractor->stream_infos().size()); | 176 EXPECT_EQ(3u, extractor->stream_infos().size()); |
172 | 177 |
173 EXPECT_EQ("mp3", extractor->stream_infos()[0].type); | 178 EXPECT_EQ("mp3", extractor->stream_infos()[0].type); |
174 EXPECT_EQ(7u, extractor->stream_infos()[0].tags.size()); | 179 EXPECT_EQ(7u, extractor->stream_infos()[0].tags.size()); |
175 EXPECT_EQ("OK Computer", | 180 EXPECT_EQ("OK Computer", |
176 extractor->stream_infos()[0].tags.find("album")->second); | 181 GetTagValue(extractor->stream_infos()[0].tags, "album")); |
177 EXPECT_EQ("Radiohead", | 182 EXPECT_EQ("Radiohead", |
178 extractor->stream_infos()[0].tags.find("artist")->second); | 183 GetTagValue(extractor->stream_infos()[0].tags, "artist")); |
179 EXPECT_EQ("1997", extractor->stream_infos()[0].tags.find("date")->second); | 184 EXPECT_EQ("1997", GetTagValue(extractor->stream_infos()[0].tags, "date")); |
180 EXPECT_EQ("Lavf54.4.100", | 185 EXPECT_EQ("Lavf54.4.100", |
181 extractor->stream_infos()[0].tags.find("encoder")->second); | 186 GetTagValue(extractor->stream_infos()[0].tags, "encoder")); |
182 EXPECT_EQ("Alternative", | 187 EXPECT_EQ("Alternative", |
183 extractor->stream_infos()[0].tags.find("genre")->second); | 188 GetTagValue(extractor->stream_infos()[0].tags, "genre")); |
184 EXPECT_EQ("Airbag", extractor->stream_infos()[0].tags.find("title")->second); | 189 EXPECT_EQ("Airbag", GetTagValue(extractor->stream_infos()[0].tags, "title")); |
185 EXPECT_EQ("1", extractor->stream_infos()[0].tags.find("track")->second); | 190 EXPECT_EQ("1", GetTagValue(extractor->stream_infos()[0].tags, "track")); |
186 | 191 |
187 EXPECT_EQ("mp3", extractor->stream_infos()[1].type); | 192 EXPECT_EQ("mp3", extractor->stream_infos()[1].type); |
188 EXPECT_EQ(0u, extractor->stream_infos()[1].tags.size()); | 193 EXPECT_EQ(0u, extractor->stream_infos()[1].tags.size()); |
189 | 194 |
190 EXPECT_EQ("png", extractor->stream_infos()[2].type); | 195 EXPECT_EQ("png", extractor->stream_infos()[2].type); |
191 EXPECT_EQ(1u, extractor->stream_infos()[2].tags.size()); | 196 EXPECT_EQ(1u, extractor->stream_infos()[2].tags.size()); |
192 EXPECT_EQ("Other", extractor->stream_infos()[2].tags.find("comment")->second); | 197 EXPECT_EQ("Other", GetTagValue(extractor->stream_infos()[2].tags, "comment")); |
193 | 198 |
194 EXPECT_EQ(1u, extractor->attached_images_bytes().size()); | 199 EXPECT_EQ(1u, extractor->attached_images_bytes().size()); |
195 EXPECT_EQ(155752u, extractor->attached_images_bytes()[0].size()); | 200 EXPECT_EQ(155752u, extractor->attached_images_bytes()[0].size()); |
196 | 201 |
197 EXPECT_EQ("\x89PNG\r\n\x1a\n", | 202 EXPECT_EQ("\x89PNG\r\n\x1a\n", |
198 extractor->attached_images_bytes()[0].substr(0, 8)); | 203 extractor->attached_images_bytes()[0].substr(0, 8)); |
199 EXPECT_EQ("IEND\xae\x42\x60\x82", | 204 EXPECT_EQ("IEND\xae\x42\x60\x82", |
200 extractor->attached_images_bytes()[0].substr( | 205 extractor->attached_images_bytes()[0].substr( |
201 extractor->attached_images_bytes()[0].size() - 8, 8)); | 206 extractor->attached_images_bytes()[0].size() - 8, 8)); |
202 EXPECT_EQ("\xF3\xED\x8F\xC7\xC7\x98\xB9V|p\xC0u!\xB5\x82\xCF\x95\xF0\xCD\xCE", | 207 EXPECT_EQ("\xF3\xED\x8F\xC7\xC7\x98\xB9V|p\xC0u!\xB5\x82\xCF\x95\xF0\xCD\xCE", |
203 base::SHA1HashString(extractor->attached_images_bytes()[0])); | 208 base::SHA1HashString(extractor->attached_images_bytes()[0])); |
204 } | 209 } |
205 #endif | 210 #endif |
206 | 211 |
207 } // namespace media | 212 } // namespace media |
OLD | NEW |