| OLD | NEW |
| 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 "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 #if defined(OS_ANDROID) | 110 #if defined(OS_ANDROID) |
| 111 return base::android::BuildInfo::GetInstance()->sdk_int() >= 21; | 111 return base::android::BuildInfo::GetInstance()->sdk_int() >= 21; |
| 112 #else | 112 #else |
| 113 return true; | 113 return true; |
| 114 #endif // defined(OS_ANDROID) | 114 #endif // defined(OS_ANDROID) |
| 115 #else | 115 #else |
| 116 return false; | 116 return false; |
| 117 #endif // BUILDFLAG(ENABLE_HEVC_DEMUXING) | 117 #endif // BUILDFLAG(ENABLE_HEVC_DEMUXING) |
| 118 } | 118 } |
| 119 | 119 |
| 120 static bool HasEac3Support() { |
| 121 #if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
| 122 return true; |
| 123 #else |
| 124 return false; |
| 125 #endif |
| 126 } |
| 127 |
| 120 TEST(MimeUtilTest, CommonMediaMimeType) { | 128 TEST(MimeUtilTest, CommonMediaMimeType) { |
| 121 EXPECT_TRUE(IsSupportedMediaMimeType("audio/webm")); | 129 EXPECT_TRUE(IsSupportedMediaMimeType("audio/webm")); |
| 122 EXPECT_TRUE(IsSupportedMediaMimeType("video/webm")); | 130 EXPECT_TRUE(IsSupportedMediaMimeType("video/webm")); |
| 123 | 131 |
| 124 EXPECT_TRUE(IsSupportedMediaMimeType("audio/wav")); | 132 EXPECT_TRUE(IsSupportedMediaMimeType("audio/wav")); |
| 125 EXPECT_TRUE(IsSupportedMediaMimeType("audio/x-wav")); | 133 EXPECT_TRUE(IsSupportedMediaMimeType("audio/x-wav")); |
| 126 | 134 |
| 127 EXPECT_TRUE(IsSupportedMediaMimeType("audio/ogg")); | 135 EXPECT_TRUE(IsSupportedMediaMimeType("audio/ogg")); |
| 128 EXPECT_TRUE(IsSupportedMediaMimeType("application/ogg")); | 136 EXPECT_TRUE(IsSupportedMediaMimeType("application/ogg")); |
| 129 #if defined(OS_ANDROID) | 137 #if defined(OS_ANDROID) |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 test_states.has_platform_decoders = true; | 253 test_states.has_platform_decoders = true; |
| 246 | 254 |
| 247 RunCodecSupportTest( | 255 RunCodecSupportTest( |
| 248 states_to_vary, test_states, | 256 states_to_vary, test_states, |
| 249 [](const MimeUtil::PlatformInfo& info, MimeUtil::Codec codec) { | 257 [](const MimeUtil::PlatformInfo& info, MimeUtil::Codec codec) { |
| 250 const bool result = MimeUtil::IsCodecSupportedOnPlatform( | 258 const bool result = MimeUtil::IsCodecSupportedOnPlatform( |
| 251 codec, kTestMimeType, true, info); | 259 codec, kTestMimeType, true, info); |
| 252 switch (codec) { | 260 switch (codec) { |
| 253 // These codecs are never supported by the Android platform. | 261 // These codecs are never supported by the Android platform. |
| 254 case MimeUtil::INVALID_CODEC: | 262 case MimeUtil::INVALID_CODEC: |
| 255 case MimeUtil::AC3: | |
| 256 case MimeUtil::EAC3: | |
| 257 case MimeUtil::MPEG2_AAC: | 263 case MimeUtil::MPEG2_AAC: |
| 258 case MimeUtil::THEORA: | 264 case MimeUtil::THEORA: |
| 259 EXPECT_FALSE(result); | 265 EXPECT_FALSE(result); |
| 260 break; | 266 break; |
| 261 | 267 |
| 262 // These codecs are always available with platform decoder support. | 268 // These codecs are always available with platform decoder support. |
| 263 case MimeUtil::PCM: | 269 case MimeUtil::PCM: |
| 264 case MimeUtil::MP3: | 270 case MimeUtil::MP3: |
| 265 case MimeUtil::MPEG4_AAC: | 271 case MimeUtil::MPEG4_AAC: |
| 266 case MimeUtil::VORBIS: | 272 case MimeUtil::VORBIS: |
| (...skipping 11 matching lines...) Expand all Loading... |
| 278 EXPECT_EQ(info.has_platform_vp8_decoder, result); | 284 EXPECT_EQ(info.has_platform_vp8_decoder, result); |
| 279 break; | 285 break; |
| 280 | 286 |
| 281 case MimeUtil::VP9: | 287 case MimeUtil::VP9: |
| 282 EXPECT_EQ(info.has_platform_vp9_decoder, result); | 288 EXPECT_EQ(info.has_platform_vp9_decoder, result); |
| 283 break; | 289 break; |
| 284 | 290 |
| 285 case MimeUtil::HEVC: | 291 case MimeUtil::HEVC: |
| 286 EXPECT_EQ(HasHevcSupport(), result); | 292 EXPECT_EQ(HasHevcSupport(), result); |
| 287 break; | 293 break; |
| 294 |
| 295 case MimeUtil::AC3: |
| 296 case MimeUtil::EAC3: |
| 297 EXPECT_EQ(HasEac3Support(), result); |
| 298 break; |
| 288 } | 299 } |
| 289 }); | 300 }); |
| 290 } | 301 } |
| 291 | 302 |
| 292 TEST(IsCodecSupportedOnPlatformTest, ClearCodecBehaviorWithAndroidPipeline) { | 303 TEST(IsCodecSupportedOnPlatformTest, ClearCodecBehaviorWithAndroidPipeline) { |
| 293 // Vary all parameters except |is_unified_media_pipeline_enabled|. | 304 // Vary all parameters except |is_unified_media_pipeline_enabled|. |
| 294 MimeUtil::PlatformInfo states_to_vary = VaryAllFields(); | 305 MimeUtil::PlatformInfo states_to_vary = VaryAllFields(); |
| 295 states_to_vary.is_unified_media_pipeline_enabled = false; | 306 states_to_vary.is_unified_media_pipeline_enabled = false; |
| 296 | 307 |
| 297 // Disable the unified pipeline. | 308 // Disable the unified pipeline. |
| 298 MimeUtil::PlatformInfo test_states; | 309 MimeUtil::PlatformInfo test_states; |
| 299 test_states.is_unified_media_pipeline_enabled = false; | 310 test_states.is_unified_media_pipeline_enabled = false; |
| 300 | 311 |
| 301 RunCodecSupportTest( | 312 RunCodecSupportTest( |
| 302 states_to_vary, test_states, | 313 states_to_vary, test_states, |
| 303 [](const MimeUtil::PlatformInfo& info, MimeUtil::Codec codec) { | 314 [](const MimeUtil::PlatformInfo& info, MimeUtil::Codec codec) { |
| 304 const bool result = MimeUtil::IsCodecSupportedOnPlatform( | 315 const bool result = MimeUtil::IsCodecSupportedOnPlatform( |
| 305 codec, kTestMimeType, false, info); | 316 codec, kTestMimeType, false, info); |
| 306 switch (codec) { | 317 switch (codec) { |
| 307 // These codecs are never supported by the Android platform. | 318 // These codecs are never supported by the Android platform. |
| 308 case MimeUtil::INVALID_CODEC: | 319 case MimeUtil::INVALID_CODEC: |
| 309 case MimeUtil::AC3: | |
| 310 case MimeUtil::EAC3: | |
| 311 case MimeUtil::MPEG2_AAC: | 320 case MimeUtil::MPEG2_AAC: |
| 312 case MimeUtil::THEORA: | 321 case MimeUtil::THEORA: |
| 313 EXPECT_FALSE(result); | 322 EXPECT_FALSE(result); |
| 314 break; | 323 break; |
| 315 | 324 |
| 316 // These codecs are always available via MediaPlayer. | 325 // These codecs are always available via MediaPlayer. |
| 317 case MimeUtil::PCM: | 326 case MimeUtil::PCM: |
| 318 case MimeUtil::MP3: | 327 case MimeUtil::MP3: |
| 319 case MimeUtil::MPEG4_AAC: | 328 case MimeUtil::MPEG4_AAC: |
| 320 case MimeUtil::VORBIS: | 329 case MimeUtil::VORBIS: |
| 321 case MimeUtil::H264: | 330 case MimeUtil::H264: |
| 322 case MimeUtil::VP8: | 331 case MimeUtil::VP8: |
| 323 EXPECT_TRUE(result); | 332 EXPECT_TRUE(result); |
| 324 break; | 333 break; |
| 325 | 334 |
| 326 // The remaining codecs depend on the platform version. | 335 // The remaining codecs depend on the platform version. |
| 327 case MimeUtil::OPUS: | 336 case MimeUtil::OPUS: |
| 328 EXPECT_EQ(info.supports_opus, result); | 337 EXPECT_EQ(info.supports_opus, result); |
| 329 break; | 338 break; |
| 330 | 339 |
| 331 case MimeUtil::VP9: | 340 case MimeUtil::VP9: |
| 332 // MediaPlayer only supports VP9 in WebM. | 341 // MediaPlayer only supports VP9 in WebM. |
| 333 EXPECT_FALSE(result); | 342 EXPECT_FALSE(result); |
| 334 break; | 343 break; |
| 335 | 344 |
| 336 case MimeUtil::HEVC: | 345 case MimeUtil::HEVC: |
| 337 EXPECT_EQ(HasHevcSupport(), result); | 346 EXPECT_EQ(HasHevcSupport(), result); |
| 338 break; | 347 break; |
| 348 |
| 349 case MimeUtil::AC3: |
| 350 case MimeUtil::EAC3: |
| 351 EXPECT_EQ(HasEac3Support(), result); |
| 352 break; |
| 339 } | 353 } |
| 340 }); | 354 }); |
| 341 | 355 |
| 342 // Verify vp9 support in WebM. | 356 // Verify vp9 support in WebM. |
| 343 RunCodecSupportTest( | 357 RunCodecSupportTest( |
| 344 states_to_vary, test_states, | 358 states_to_vary, test_states, |
| 345 [](const MimeUtil::PlatformInfo& info, MimeUtil::Codec codec) { | 359 [](const MimeUtil::PlatformInfo& info, MimeUtil::Codec codec) { |
| 346 const bool result = MimeUtil::IsCodecSupportedOnPlatform( | 360 const bool result = MimeUtil::IsCodecSupportedOnPlatform( |
| 347 codec, "video/webm", true, info); | 361 codec, "video/webm", true, info); |
| 348 if (codec == MimeUtil::VP9) | 362 if (codec == MimeUtil::VP9) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 360 test_states.is_unified_media_pipeline_enabled = true; | 374 test_states.is_unified_media_pipeline_enabled = true; |
| 361 | 375 |
| 362 RunCodecSupportTest( | 376 RunCodecSupportTest( |
| 363 states_to_vary, test_states, | 377 states_to_vary, test_states, |
| 364 [](const MimeUtil::PlatformInfo& info, MimeUtil::Codec codec) { | 378 [](const MimeUtil::PlatformInfo& info, MimeUtil::Codec codec) { |
| 365 const bool result = MimeUtil::IsCodecSupportedOnPlatform( | 379 const bool result = MimeUtil::IsCodecSupportedOnPlatform( |
| 366 codec, kTestMimeType, false, info); | 380 codec, kTestMimeType, false, info); |
| 367 switch (codec) { | 381 switch (codec) { |
| 368 // These codecs are never supported by the Android platform. | 382 // These codecs are never supported by the Android platform. |
| 369 case MimeUtil::INVALID_CODEC: | 383 case MimeUtil::INVALID_CODEC: |
| 370 case MimeUtil::AC3: | |
| 371 case MimeUtil::EAC3: | |
| 372 case MimeUtil::THEORA: | 384 case MimeUtil::THEORA: |
| 373 EXPECT_FALSE(result); | 385 EXPECT_FALSE(result); |
| 374 break; | 386 break; |
| 375 | 387 |
| 376 // These codecs are always supported with the unified pipeline. | 388 // These codecs are always supported with the unified pipeline. |
| 377 case MimeUtil::PCM: | 389 case MimeUtil::PCM: |
| 378 case MimeUtil::MPEG2_AAC: | 390 case MimeUtil::MPEG2_AAC: |
| 379 case MimeUtil::MP3: | 391 case MimeUtil::MP3: |
| 380 case MimeUtil::MPEG4_AAC: | 392 case MimeUtil::MPEG4_AAC: |
| 381 case MimeUtil::OPUS: | 393 case MimeUtil::OPUS: |
| 382 case MimeUtil::VORBIS: | 394 case MimeUtil::VORBIS: |
| 383 case MimeUtil::VP8: | 395 case MimeUtil::VP8: |
| 384 case MimeUtil::VP9: | 396 case MimeUtil::VP9: |
| 385 EXPECT_TRUE(result); | 397 EXPECT_TRUE(result); |
| 386 break; | 398 break; |
| 387 | 399 |
| 388 // These codecs are only supported if platform decoders are supported. | 400 // These codecs are only supported if platform decoders are supported. |
| 389 case MimeUtil::H264: | 401 case MimeUtil::H264: |
| 390 EXPECT_EQ(info.has_platform_decoders, result); | 402 EXPECT_EQ(info.has_platform_decoders, result); |
| 391 break; | 403 break; |
| 392 | 404 |
| 393 case MimeUtil::HEVC: | 405 case MimeUtil::HEVC: |
| 394 EXPECT_EQ(HasHevcSupport() && info.has_platform_decoders, result); | 406 EXPECT_EQ(HasHevcSupport() && info.has_platform_decoders, result); |
| 395 break; | 407 break; |
| 408 |
| 409 case MimeUtil::AC3: |
| 410 case MimeUtil::EAC3: |
| 411 EXPECT_EQ(HasEac3Support(), result); |
| 412 break; |
| 396 } | 413 } |
| 397 }); | 414 }); |
| 398 } | 415 } |
| 399 | 416 |
| 400 TEST(IsCodecSupportedOnPlatformTest, OpusOggSupport) { | 417 TEST(IsCodecSupportedOnPlatformTest, OpusOggSupport) { |
| 401 // Vary all parameters; thus use default initial state. | 418 // Vary all parameters; thus use default initial state. |
| 402 MimeUtil::PlatformInfo states_to_vary = VaryAllFields(); | 419 MimeUtil::PlatformInfo states_to_vary = VaryAllFields(); |
| 403 MimeUtil::PlatformInfo test_states; | 420 MimeUtil::PlatformInfo test_states; |
| 404 | 421 |
| 405 RunCodecSupportTest( | 422 RunCodecSupportTest( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 421 [](const MimeUtil::PlatformInfo& info, MimeUtil::Codec codec) { | 438 [](const MimeUtil::PlatformInfo& info, MimeUtil::Codec codec) { |
| 422 EXPECT_FALSE(MimeUtil::IsCodecSupportedOnPlatform( | 439 EXPECT_FALSE(MimeUtil::IsCodecSupportedOnPlatform( |
| 423 MimeUtil::MPEG2_AAC, "application/x-mpegurl", false, info)); | 440 MimeUtil::MPEG2_AAC, "application/x-mpegurl", false, info)); |
| 424 EXPECT_FALSE(MimeUtil::IsCodecSupportedOnPlatform( | 441 EXPECT_FALSE(MimeUtil::IsCodecSupportedOnPlatform( |
| 425 MimeUtil::MPEG2_AAC, "application/vnd.apple.mpegurl", false, info)); | 442 MimeUtil::MPEG2_AAC, "application/vnd.apple.mpegurl", false, info)); |
| 426 }); | 443 }); |
| 427 } | 444 } |
| 428 | 445 |
| 429 } // namespace internal | 446 } // namespace internal |
| 430 } // namespace media | 447 } // namespace media |
| OLD | NEW |