| 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 |