Chromium Code Reviews| 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", | |
|
DaleCurtis
2014/05/08 23:02:25
You can use base::MD5 or base::Sha1 to hash the im
tommycli
2014/05/08 23:20:42
Done.
| |
| 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 |