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

Side by Side Diff: content/browser/media/media_canplaytype_browsertest.cc

Issue 816353010: Implemented HEVC video demuxing and parsing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address ddorwin@ CR feedback Created 5 years, 9 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 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 <string> 5 #include <string>
6 6
7 #include "content/browser/media/media_browsertest.h" 7 #include "content/browser/media/media_browsertest.h"
8 #include "content/public/test/browser_test_utils.h" 8 #include "content/public/test/browser_test_utils.h"
9 #include "content/public/test/content_browser_test_utils.h" 9 #include "content/public/test/content_browser_test_utils.h"
10 #include "content/shell/browser/shell.h" 10 #include "content/shell/browser/shell.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 166
167 // Unknown codecs. 167 // Unknown codecs.
168 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc2\"'")); 168 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc2\"'"));
169 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc4\"'")); 169 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc4\"'"));
170 170
171 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1x\"'")); 171 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1x\"'"));
172 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3x\"'")); 172 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3x\"'"));
173 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4ax\"'")); 173 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4ax\"'"));
174 174
175 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"unknown\"'")); 175 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"unknown\"'"));
176
177 // Don't allow incomplete/ambiguous codec ids for HEVC.
178 // Codec string must have info about codec level/profile, e.g. hvc1.1.L0.0
179 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hev1\"'"));
180 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hvc1\"'"));
181 // Make sure trailing dots are not allowed.
182 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hev1.\"'"));
183 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hvc1.\"'"));
184 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hev1.1.L0.0.\"'"));
185 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hvc1.1.L0.0.\"'"));
186
187 // Invalid codecs that look like something similar to HEVC/H.265
188 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hev1x\"'"));
189 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hvc1x\"'"));
190 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hvc0.1.L0.0\"'"));
191 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hev0.1.L0.0\"'"));
192 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hvc2.1.L0.0\"'"));
193 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hev2.1.L0.0\"'"));
176 } 194 }
177 195
178 void TestOGGUnacceptableCombinations(const std::string& mime) { 196 void TestOGGUnacceptableCombinations(const std::string& mime) {
179 // Codecs not belonging to OGG container. 197 // Codecs not belonging to OGG container.
180 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8\"'")); 198 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8\"'"));
181 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0\"'")); 199 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0\"'"));
182 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, opus\"'")); 200 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, opus\"'"));
183 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, vorbis\"'")); 201 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, vorbis\"'"));
184 202
185 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9\"'")); 203 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9\"'"));
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 499
482 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40.2\"'")); 500 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40.2\"'"));
483 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40.02\"'")); 501 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40.02\"'"));
484 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40.2\"'")); 502 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40.2\"'"));
485 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40.02\"'")); 503 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40.02\"'"));
486 EXPECT_EQ(kPropMaybe, 504 EXPECT_EQ(kPropMaybe,
487 CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40\"'")); 505 CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40\"'"));
488 EXPECT_EQ(kPropMaybe, 506 EXPECT_EQ(kPropMaybe,
489 CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40\"'")); 507 CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40\"'"));
490 508
509 const char* kHevcSupported = kNot;
ddorwin 2015/03/25 18:02:58 It's odd to define a constant like this in the mid
510 #if defined(ENABLE_HEVC_DEMUXING)
511 kHevcSupported = kPropProbably;
512 #endif
513
514 // TODO(servolk): Add more unit test coverage once we have more info about
515 // various HEVC levels/profiles.
516 EXPECT_EQ(kHevcSupported, CanPlay("'video/mp4; codecs=\"hvc1.1.L0.0\"'"));
517 EXPECT_EQ(kHevcSupported, CanPlay("'video/mp4; codecs=\"hev1.1.L0.0\"'"));
518 EXPECT_EQ(kHevcSupported,
519 CanPlay("'video/mp4; codecs=\"hvc1.1.L0.0, mp4a.40.5\"'"));
520 EXPECT_EQ(kHevcSupported,
521 CanPlay("'video/mp4; codecs=\"hev1.1.L0.0, mp4a.40.5\"'"));
522
491 TestMPEGUnacceptableCombinations("video/mp4"); 523 TestMPEGUnacceptableCombinations("video/mp4");
492 524
493 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v'")); 525 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v'"));
494 526
495 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1\"'")); 527 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1\"'"));
496 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3\"'")); 528 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3\"'"));
497 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"mp4a.40\"'")); 529 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"mp4a.40\"'"));
498 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, mp4a.40\"'")); 530 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, mp4a.40\"'"));
499 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3, mp4a.40\"'")); 531 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3, mp4a.40\"'"));
500 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, avc3\"'")); 532 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, avc3\"'"));
(...skipping 23 matching lines...) Expand all
524 556
525 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, mp4a.40.2\"'")); 557 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, mp4a.40.2\"'"));
526 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, mp4a.40.02\"'")); 558 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, mp4a.40.02\"'"));
527 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3, mp4a.40.2\"'")); 559 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3, mp4a.40.2\"'"));
528 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3, mp4a.40.02\"'")); 560 EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3, mp4a.40.02\"'"));
529 EXPECT_EQ(kPropMaybe, 561 EXPECT_EQ(kPropMaybe,
530 CanPlay("'video/x-m4v; codecs=\"avc1.42E01E, mp4a.40\"'")); 562 CanPlay("'video/x-m4v; codecs=\"avc1.42E01E, mp4a.40\"'"));
531 EXPECT_EQ(kPropMaybe, 563 EXPECT_EQ(kPropMaybe,
532 CanPlay("'video/x-m4v; codecs=\"avc3.42E01E, mp4a.40\"'")); 564 CanPlay("'video/x-m4v; codecs=\"avc3.42E01E, mp4a.40\"'"));
533 565
566 EXPECT_EQ(kHevcSupported, CanPlay("'video/x-m4v; codecs=\"hvc1.1.L0.0\"'"));
567 EXPECT_EQ(kHevcSupported, CanPlay("'video/x-m4v; codecs=\"hev1.1.L0.0\"'"));
568 EXPECT_EQ(kHevcSupported,
569 CanPlay("'video/x-m4v; codecs=\"hvc1.1.L0.0, mp4a.40.5\"'"));
570 EXPECT_EQ(kHevcSupported,
571 CanPlay("'video/x-m4v; codecs=\"hev1.1.L0.0, mp4a.40.5\"'"));
572
534 TestMPEGUnacceptableCombinations("video/x-m4v"); 573 TestMPEGUnacceptableCombinations("video/x-m4v");
535 574
536 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4'")); 575 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4'"));
537 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40\"'")); 576 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40\"'"));
538 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'")); 577 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'"));
539 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.02\"'")); 578 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.02\"'"));
540 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.5\"'")); 579 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.5\"'"));
541 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.05\"'")); 580 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.05\"'"));
542 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.29\"'")); 581 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.29\"'"));
543 582
544 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1\"'")); 583 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1\"'"));
545 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3\"'")); 584 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3\"'"));
546 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1, mp4a.40\"'")); 585 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1, mp4a.40\"'"));
547 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3, mp4a.40\"'")); 586 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3, mp4a.40\"'"));
548 587
549 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1.4D401E\"'")); 588 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1.4D401E\"'"));
550 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3.64001F\"'")); 589 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3.64001F\"'"));
551 590
591 EXPECT_EQ(kHevcSupported, CanPlay("'audio/mp4; codecs=\"hvc1.1.L0.0\"'"));
592 EXPECT_EQ(kHevcSupported, CanPlay("'audio/mp4; codecs=\"hev1.1.L0.0\"'"));
593 EXPECT_EQ(kHevcSupported,
594 CanPlay("'audio/mp4; codecs=\"hvc1.1.L0.0, mp4a.40.5\"'"));
595 EXPECT_EQ(kHevcSupported,
596 CanPlay("'audio/mp4; codecs=\"hev1.1.L0.0, mp4a.40.5\"'"));
597
552 TestMPEGUnacceptableCombinations("audio/mp4"); 598 TestMPEGUnacceptableCombinations("audio/mp4");
553 599
554 EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a'")); 600 EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a'"));
555 EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a; codecs=\"mp4a.40\"'")); 601 EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a; codecs=\"mp4a.40\"'"));
556 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.2\"'")); 602 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.2\"'"));
557 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.02\"'")); 603 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.02\"'"));
558 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.5\"'")); 604 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.5\"'"));
559 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.05\"'")); 605 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.05\"'"));
560 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.29\"'")); 606 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.29\"'"));
561 607
562 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1\"'")); 608 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1\"'"));
563 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3\"'")); 609 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3\"'"));
564 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1, mp4a\"'")); 610 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1, mp4a\"'"));
565 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3, mp4a\"'")); 611 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3, mp4a\"'"));
566 612
567 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1.4D401E\"'")); 613 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1.4D401E\"'"));
568 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3.64001F\"'")); 614 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3.64001F\"'"));
569 615
616 EXPECT_EQ(kHevcSupported, CanPlay("'audio/x-m4a; codecs=\"hvc1.1.L0.0\"'"));
617 EXPECT_EQ(kHevcSupported, CanPlay("'audio/x-m4a; codecs=\"hev1.1.L0.0\"'"));
618 EXPECT_EQ(kHevcSupported,
619 CanPlay("'audio/x-m4a; codecs=\"hvc1.1.L0.0, mp4a.40.5\"'"));
620 EXPECT_EQ(kHevcSupported,
621 CanPlay("'audio/x-m4a; codecs=\"hev1.1.L0.0, mp4a.40.5\"'"));
622
570 TestMPEGUnacceptableCombinations("audio/x-m4a"); 623 TestMPEGUnacceptableCombinations("audio/x-m4a");
571 } 624 }
572 625
573 // When modifying this test, also change CodecSupportTest_Avc3Variants. 626 // When modifying this test, also change CodecSupportTest_Avc3Variants.
574 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc1Variants) { 627 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc1Variants) {
575 // avc1 without extensions results in "maybe" for compatibility. 628 // avc1 without extensions results in "maybe" for compatibility.
576 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'")); 629 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'"));
577 630
578 // Any 6-digit hexadecimal number will result in at least "maybe". 631 // Any 6-digit hexadecimal number will result in at least "maybe".
579 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.123456\"'")); 632 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.123456\"'"));
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 CanPlay("'application/vnd.apple.mpegurl; " 1088 CanPlay("'application/vnd.apple.mpegurl; "
1036 "codecs=\"avc1.42E01E, mp4a.40\"'")); 1089 "codecs=\"avc1.42E01E, mp4a.40\"'"));
1037 EXPECT_EQ(maybeCanPlayHLS, 1090 EXPECT_EQ(maybeCanPlayHLS,
1038 CanPlay("'application/vnd.apple.mpegurl; " 1091 CanPlay("'application/vnd.apple.mpegurl; "
1039 "codecs=\"avc3.42E01E, mp4a.40\"'")); 1092 "codecs=\"avc3.42E01E, mp4a.40\"'"));
1040 1093
1041 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl"); 1094 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl");
1042 } 1095 }
1043 1096
1044 } // namespace content 1097 } // namespace content
OLDNEW
« no previous file with comments | « build/common.gypi ('k') | media/BUILD.gn » ('j') | net/base/mime_util.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698