Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: media/base/audio_video_metadata_extractor_unittest.cc

Issue 1643633005: Avoid dereferencing find() without checking for == end() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Completed fix, and CR nit fixes Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698