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

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

Issue 1690063002: Fix mime type mappings when the unified media pipeline is enabled. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Simplify, test, rebase on split. 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/strings/string_split.h" 8 #include "base/strings/string_split.h"
9 #include "build/build_config.h" 9 #include "build/build_config.h"
10 #include "media/base/mime_util.h" 10 #include "media/base/mime_util.h"
11 #include "media/base/mime_util_internal.h"
11 #include "media/media_features.h" 12 #include "media/media_features.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 namespace media { 15 namespace media {
15 16
17 const bool kTestStates[] = {true, false};
18
16 TEST(MimeUtilTest, CommonMediaMimeType) { 19 TEST(MimeUtilTest, CommonMediaMimeType) {
17 EXPECT_TRUE(IsSupportedMediaMimeType("audio/webm")); 20 EXPECT_TRUE(IsSupportedMediaMimeType("audio/webm"));
18 EXPECT_TRUE(IsSupportedMediaMimeType("video/webm")); 21 EXPECT_TRUE(IsSupportedMediaMimeType("video/webm"));
19 22
20 EXPECT_TRUE(IsSupportedMediaMimeType("audio/wav")); 23 EXPECT_TRUE(IsSupportedMediaMimeType("audio/wav"));
21 EXPECT_TRUE(IsSupportedMediaMimeType("audio/x-wav")); 24 EXPECT_TRUE(IsSupportedMediaMimeType("audio/x-wav"));
22 25
23 EXPECT_TRUE(IsSupportedMediaMimeType("audio/ogg")); 26 EXPECT_TRUE(IsSupportedMediaMimeType("audio/ogg"));
24 EXPECT_TRUE(IsSupportedMediaMimeType("application/ogg")); 27 EXPECT_TRUE(IsSupportedMediaMimeType("application/ogg"));
25 #if defined(OS_ANDROID) 28 #if defined(OS_ANDROID)
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 } 107 }
105 108
106 // Test without stripping the codec type. 109 // Test without stripping the codec type.
107 std::vector<std::string> codecs_out; 110 std::vector<std::string> codecs_out;
108 ParseCodecString("avc1.42E01E, mp4a.40.2", &codecs_out, false); 111 ParseCodecString("avc1.42E01E, mp4a.40.2", &codecs_out, false);
109 ASSERT_EQ(2u, codecs_out.size()); 112 ASSERT_EQ(2u, codecs_out.size());
110 EXPECT_EQ("avc1.42E01E", codecs_out[0]); 113 EXPECT_EQ("avc1.42E01E", codecs_out[0]);
111 EXPECT_EQ("mp4a.40.2", codecs_out[1]); 114 EXPECT_EQ("mp4a.40.2", codecs_out[1]);
112 } 115 }
113 116
117 #if defined(OS_ANDROID)
118 namespace internal {
119
120 TEST(MimeUtilInternalTest, EncryptedCodecsFailWithoutPlatformSupport) {
ddorwin 2016/02/17 21:18:40 These test names should include/refer to IsCodecSu
DaleCurtis 2016/02/18 03:58:10 Done.
121 MimeUtil mime_util;
122 PlatformCodecInfo info;
123 info.has_platform_decoder = false;
124
125 const bool kTestStates[] = {true, false};
ddorwin 2016/02/17 21:18:40 remove
DaleCurtis 2016/02/18 03:58:10 Done.
126 for (bool has_unified_media_pipeline : kTestStates) {
127 info.has_unified_media_pipeline = has_unified_media_pipeline;
128 for (bool has_opus : kTestStates) {
129 info.has_opus = has_opus;
130 for (bool has_vp8 : kTestStates) {
131 info.has_vp8 = has_vp8;
132 for (bool has_vp9 : kTestStates) {
133 info.has_vp9 = has_vp9;
134 mime_util.SetPlatformCodecInfoForTests(info);
135 for (int codec = MimeUtil::INVALID_CODEC;
136 codec <= MimeUtil::LAST_CODEC; ++codec) {
137 ASSERT_FALSE(mime_util.IsCodecSupportedOnAndroidForTests(
ddorwin 2016/02/17 21:18:39 EXPECT_ throughout. We want to run all cases even
DaleCurtis 2016/02/18 03:58:10 Done, but can be obnoxious in local runs if you fa
138 static_cast<MimeUtil::Codec>(codec), "", true));
ddorwin 2016/02/17 21:18:40 It's interesting that the function allows an empty
DaleCurtis 2016/02/18 03:58:10 I don't think it should since only one portion of
ddorwin 2016/02/18 20:37:44 Right, but isn't it a bug if the caller does not p
139 }
140 }
141 }
142 }
143 }
144 }
145
146 TEST(MimeUtilInternalTest, EncryptedCodecBehavior) {
147 MimeUtil mime_util;
148 PlatformCodecInfo info = {0};
149 info.has_platform_decoder = true; // False is tested above.
150 for (bool has_unified_media_pipeline : kTestStates) {
151 info.has_unified_media_pipeline = has_unified_media_pipeline;
152 for (bool has_opus : kTestStates) {
153 info.has_opus = has_opus;
154 for (bool has_vp8 : kTestStates) {
155 info.has_vp8 = has_vp8;
156 for (bool has_vp9 : kTestStates) {
157 info.has_vp9 = has_vp9;
158 mime_util.SetPlatformCodecInfoForTests(info);
159 for (int codec = MimeUtil::INVALID_CODEC;
160 codec <= MimeUtil::LAST_CODEC; ++codec) {
161 const MimeUtil::Codec codec_type =
ddorwin 2016/02/17 21:18:40 nit: codec type sounds like there are types of cod
DaleCurtis 2016/02/18 03:58:10 New format removes this.
162 static_cast<MimeUtil::Codec>(codec);
163 switch (codec_type) {
164 case MimeUtil::AC3:
165 case MimeUtil::EAC3:
166 case MimeUtil::INVALID_CODEC:
167 case MimeUtil::MPEG2_AAC_LC:
168 case MimeUtil::MPEG2_AAC_MAIN:
169 case MimeUtil::MPEG2_AAC_SSR:
170 case MimeUtil::THEORA:
171 ASSERT_FALSE(mime_util.IsCodecSupportedOnAndroidForTests(
ddorwin 2016/02/17 21:18:40 If one of these fails, it's going to be difficult
DaleCurtis 2016/02/18 03:58:09 Done.
172 codec_type, "", true));
173 break;
174
175 case MimeUtil::H264_BASELINE:
176 case MimeUtil::H264_MAIN:
177 case MimeUtil::H264_HIGH:
178 case MimeUtil::PCM:
179 case MimeUtil::MP3:
180 case MimeUtil::MPEG4_AAC_LC:
181 case MimeUtil::MPEG4_AAC_SBR_v1:
182 case MimeUtil::MPEG4_AAC_SBR_PS_v2:
183 case MimeUtil::VORBIS:
184 ASSERT_TRUE(mime_util.IsCodecSupportedOnAndroidForTests(
185 codec_type, "", true));
186 break;
187
188 case MimeUtil::OPUS:
189 ASSERT_EQ(info.has_opus,
190 mime_util.IsCodecSupportedOnAndroidForTests(
191 codec_type, "", true));
192 break;
193
194 case MimeUtil::VP8:
195 ASSERT_EQ(info.has_vp8,
196 mime_util.IsCodecSupportedOnAndroidForTests(
197 codec_type, "", true));
198 break;
199
200 case MimeUtil::VP9:
201 ASSERT_EQ(info.has_vp9,
202 mime_util.IsCodecSupportedOnAndroidForTests(
203 codec_type, "", true));
204 break;
205
206 case MimeUtil::HEVC_MAIN:
207 break;
ddorwin 2016/02/17 21:18:39 ? Can we check the ifdef? We should at least call
DaleCurtis 2016/02/18 03:58:10 Done.
208 }
209 }
210 }
211 }
212 }
213 }
214 }
215
216 TEST(MimeUtilInternalTest, ClearCodecBehaviorWithStandardPipeline) {
ddorwin 2016/02/17 21:18:40 s/Standard/Android/?
DaleCurtis 2016/02/18 03:58:09 Done.
217 MimeUtil mime_util;
218 PlatformCodecInfo info = {0};
ddorwin 2016/02/17 21:18:40 has_unified_media_pipeline is never set to false (
ddorwin 2016/02/17 21:18:40 has_platform_decoder and has_vp8 are not set. (Cur
DaleCurtis 2016/02/18 03:58:10 = {0} zero-initializes the structure, but that's r
ddorwin 2016/02/18 20:37:44 Oops, I missed that.
219 for (bool has_opus : kTestStates) {
220 info.has_opus = has_opus;
221 for (bool has_vp9 : kTestStates) {
222 info.has_vp9 = has_vp9;
223 mime_util.SetPlatformCodecInfoForTests(info);
224 for (int codec = MimeUtil::INVALID_CODEC; codec <= MimeUtil::LAST_CODEC;
225 ++codec) {
226 const MimeUtil::Codec codec_type = static_cast<MimeUtil::Codec>(codec);
227 switch (codec_type) {
228 case MimeUtil::AC3:
229 case MimeUtil::EAC3:
230 case MimeUtil::INVALID_CODEC:
231 case MimeUtil::MPEG2_AAC_LC:
232 case MimeUtil::MPEG2_AAC_MAIN:
233 case MimeUtil::MPEG2_AAC_SSR:
234 case MimeUtil::THEORA:
235 ASSERT_FALSE(mime_util.IsCodecSupportedOnAndroidForTests(
236 codec_type, "", false));
237 break;
238
239 case MimeUtil::H264_BASELINE:
240 case MimeUtil::H264_MAIN:
241 case MimeUtil::H264_HIGH:
242 case MimeUtil::PCM:
243 case MimeUtil::MP3:
244 case MimeUtil::MPEG4_AAC_LC:
245 case MimeUtil::MPEG4_AAC_SBR_v1:
246 case MimeUtil::MPEG4_AAC_SBR_PS_v2:
247 case MimeUtil::VORBIS:
248 case MimeUtil::VP8:
249 ASSERT_TRUE(mime_util.IsCodecSupportedOnAndroidForTests(codec_type,
250 "", false));
251 break;
252
253 case MimeUtil::OPUS:
254 ASSERT_EQ(info.has_opus,
255 mime_util.IsCodecSupportedOnAndroidForTests(codec_type,
256 "", false));
257 break;
258
259 case MimeUtil::VP9:
260 ASSERT_EQ(info.has_vp9, mime_util.IsCodecSupportedOnAndroidForTests(
261 codec_type, "", false));
262 break;
263
264 case MimeUtil::HEVC_MAIN:
265 break;
ddorwin 2016/02/17 21:18:40 ditto
DaleCurtis 2016/02/18 03:58:10 Done.
266 }
267 }
268 }
269 }
270 }
271
272 TEST(MimeUtilInternalTest, ClearCodecBehaviorWithUnifiedPipeline) {
273 MimeUtil mime_util;
274 PlatformCodecInfo info = {0};
ddorwin 2016/02/17 21:18:40 Why aren't has_<codec> looped through?
DaleCurtis 2016/02/18 03:58:09 Done.
275 info.has_unified_media_pipeline = true;
276 for (bool has_platform_decoder : kTestStates) {
277 info.has_platform_decoder = has_platform_decoder;
278 mime_util.SetPlatformCodecInfoForTests(info);
279
280 for (int codec = MimeUtil::INVALID_CODEC; codec <= MimeUtil::LAST_CODEC;
281 ++codec) {
282 const MimeUtil::Codec codec_type = static_cast<MimeUtil::Codec>(codec);
283 switch (codec_type) {
284 case MimeUtil::AC3:
285 case MimeUtil::EAC3:
286 case MimeUtil::INVALID_CODEC:
287 case MimeUtil::THEORA:
288 ASSERT_FALSE(mime_util.IsCodecSupportedOnAndroidForTests(codec_type,
289 "", false));
290 break;
291
292 case MimeUtil::PCM:
293 case MimeUtil::MPEG2_AAC_LC:
294 case MimeUtil::MPEG2_AAC_MAIN:
295 case MimeUtil::MPEG2_AAC_SSR:
296 case MimeUtil::MP3:
297 case MimeUtil::MPEG4_AAC_LC:
298 case MimeUtil::MPEG4_AAC_SBR_v1:
299 case MimeUtil::MPEG4_AAC_SBR_PS_v2:
300 case MimeUtil::OPUS:
301 case MimeUtil::VORBIS:
302 case MimeUtil::VP8:
303 case MimeUtil::VP9:
304 ASSERT_TRUE(mime_util.IsCodecSupportedOnAndroidForTests(codec_type,
305 "", false));
306 break;
307
308 case MimeUtil::H264_BASELINE:
309 case MimeUtil::H264_MAIN:
310 case MimeUtil::H264_HIGH:
311 ASSERT_EQ(info.has_platform_decoder,
312 mime_util.IsCodecSupportedOnAndroidForTests(codec_type, "",
313 false));
314 break;
315
316 case MimeUtil::HEVC_MAIN:
317 break;
ddorwin 2016/02/17 21:18:40 ditto, though this also requires has_platform_deco
DaleCurtis 2016/02/18 03:58:10 Done.
318 }
319 }
320 }
321 }
322
323 TEST(MimeUtilInternalTest, OpusOggSupport) {
324 MimeUtil mime_util;
325 PlatformCodecInfo info;
326 info.has_platform_decoder = false;
ddorwin 2016/02/17 21:18:40 Should this matter? Can we loop through it?
DaleCurtis 2016/02/18 03:58:10 Done.
327 info.has_opus = true;
ddorwin 2016/02/17 21:18:40 Might as well loop throught his too?
DaleCurtis 2016/02/18 03:58:10 Done.
328
329 const bool kTestStates[] = {true, false};
ddorwin 2016/02/17 21:18:40 remove
DaleCurtis 2016/02/18 03:58:09 Done.
330 for (bool has_unified_media_pipeline : kTestStates) {
331 info.has_unified_media_pipeline = has_unified_media_pipeline;
332 mime_util.SetPlatformCodecInfoForTests(info);
333 ASSERT_EQ(info.has_unified_media_pipeline,
334 mime_util.IsCodecSupportedOnAndroidForTests(MimeUtil::OPUS,
335 "audio/ogg", false));
336 }
337 }
338
339 } // namespace internal
340 #endif
ddorwin 2016/02/17 21:18:40 This is a long block. Add // defined(OS_ANDROID)?
DaleCurtis 2016/02/18 03:58:10 Done.
341
114 } // namespace media 342 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698