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

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: Added hevc handling in media/base/android/media_codec_bridge.cc 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 for now.
ddorwin 2015/03/25 01:21:59 Remove " for now".
servolk 2015/03/25 02:20:20 Done.
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\"'"));
ddorwin 2015/03/25 01:21:59 Also test these with a trailing dot. And valid com
servolk 2015/03/25 02:20:20 Done.
181
182 // Invalid codecs that look like something similar to HEVC/H.265
183 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hev1x\"'"));
184 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hvc1x\"'"));
185 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hvc0.1.L0.0\"'"));
186 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hev0.1.L0.0\"'"));
187 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hvc2.1.L0.0\"'"));
188 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"hev2.1.L0.0\"'"));
176 } 189 }
177 190
178 void TestOGGUnacceptableCombinations(const std::string& mime) { 191 void TestOGGUnacceptableCombinations(const std::string& mime) {
179 // Codecs not belonging to OGG container. 192 // Codecs not belonging to OGG container.
180 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8\"'")); 193 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8\"'"));
181 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0\"'")); 194 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0\"'"));
182 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, opus\"'")); 195 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, opus\"'"));
183 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, vorbis\"'")); 196 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, vorbis\"'"));
184 197
185 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9\"'")); 198 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9\"'"));
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 574
562 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1\"'")); 575 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1\"'"));
563 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3\"'")); 576 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3\"'"));
564 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1, mp4a\"'")); 577 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1, mp4a\"'"));
565 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3, mp4a\"'")); 578 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3, mp4a\"'"));
566 579
567 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1.4D401E\"'")); 580 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1.4D401E\"'"));
568 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3.64001F\"'")); 581 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3.64001F\"'"));
569 582
570 TestMPEGUnacceptableCombinations("audio/x-m4a"); 583 TestMPEGUnacceptableCombinations("audio/x-m4a");
584
585 const char* kHevcSupported = kNot;
586 #if defined(ENABLE_HEVC_DEMUXING)
587 kHevcSupported = kPropProbably;
ddorwin 2015/03/25 01:21:59 Why not just #if/#else?
servolk 2015/03/25 02:20:20 Something like: #if defined(ENABLE_HEVC_DEMUXING)
ddorwin 2015/03/25 18:02:58 Because immediately changing the value looks weird
servolk 2015/04/29 23:50:32 Done.
ddorwin 2015/06/12 00:52:26 It doesn't look like this was fully addressed. Add
588 #endif
589 // TODO(servolk): Add more unit test coverage once we have more info about
ddorwin 2015/03/25 01:21:59 Detailed tests of the codec strings probably belon
servolk 2015/03/25 02:20:20 Yes, but that's going to be done when we actually
ddorwin 2015/03/25 18:02:58 I was just saying that the tests wouldn't be at th
servolk 2015/04/29 23:50:32 I think this whole test could use some refactoring
ddorwin 2015/06/12 00:52:26 It is verbose, and that is intentional. We have a
590 // various HEVC levels/profiles.
591 EXPECT_EQ(kHevcSupported, CanPlay("'video/mp4; codecs=\"hvc1.1.L0.0\"'"));
ddorwin 2015/03/25 01:21:59 You are testing video/mp4 far away from the other
servolk 2015/03/25 02:20:20 Done (except HLS; HEVC is not supported via HLS at
ddorwin 2015/03/25 18:02:58 Then you should have negative tests.
servolk 2015/04/29 23:50:32 Done.
ddorwin 2015/06/12 00:52:26 It doesn't look like this was done. Added comments
592 EXPECT_EQ(kHevcSupported, CanPlay("'video/mp4; codecs=\"hev1.1.L0.0\"'"));
593 EXPECT_EQ(kHevcSupported,
594 CanPlay("'video/mp4; codecs=\"hvc1.1.L0.0, mp4a.40.5\"'"));
595 EXPECT_EQ(kHevcSupported,
596 CanPlay("'video/mp4; codecs=\"hev1.1.L0.0, mp4a.40.5\"'"));
571 } 597 }
572 598
573 // When modifying this test, also change CodecSupportTest_Avc3Variants. 599 // When modifying this test, also change CodecSupportTest_Avc3Variants.
574 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc1Variants) { 600 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc1Variants) {
575 // avc1 without extensions results in "maybe" for compatibility. 601 // avc1 without extensions results in "maybe" for compatibility.
576 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'")); 602 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'"));
577 603
578 // Any 6-digit hexadecimal number will result in at least "maybe". 604 // Any 6-digit hexadecimal number will result in at least "maybe".
579 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.123456\"'")); 605 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.123456\"'"));
580 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.ABCDEF\"'")); 606 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.ABCDEF\"'"));
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 CanPlay("'application/vnd.apple.mpegurl; " 1061 CanPlay("'application/vnd.apple.mpegurl; "
1036 "codecs=\"avc1.42E01E, mp4a.40\"'")); 1062 "codecs=\"avc1.42E01E, mp4a.40\"'"));
1037 EXPECT_EQ(maybeCanPlayHLS, 1063 EXPECT_EQ(maybeCanPlayHLS,
1038 CanPlay("'application/vnd.apple.mpegurl; " 1064 CanPlay("'application/vnd.apple.mpegurl; "
1039 "codecs=\"avc3.42E01E, mp4a.40\"'")); 1065 "codecs=\"avc3.42E01E, mp4a.40\"'"));
1040 1066
1041 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl"); 1067 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl");
1042 } 1068 }
1043 1069
1044 } // namespace content 1070 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698