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