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