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

Unified Diff: media/base/mime_util_unittest.cc

Issue 2864593003: Add MimeUtil::Parse{Audio|Video}CodecString (Closed)
Patch Set: Feedback && Proprietary Codecs fix && Rebase Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/mime_util_internal.cc ('k') | media/base/video_codecs.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/mime_util_unittest.cc
diff --git a/media/base/mime_util_unittest.cc b/media/base/mime_util_unittest.cc
index efc86d161a4fc37cf19b84968533cfd4844349cd..82a8e49ba45297a474c5d111c86ddd4969773ee5 100644
--- a/media/base/mime_util_unittest.cc
+++ b/media/base/mime_util_unittest.cc
@@ -9,10 +9,13 @@
#include "base/strings/stringprintf.h"
#include "base/test/scoped_command_line.h"
#include "build/build_config.h"
+#include "media/base/audio_codecs.h"
#include "media/base/media.h"
#include "media/base/media_switches.h"
#include "media/base/mime_util.h"
#include "media/base/mime_util_internal.h"
+#include "media/base/video_codecs.h"
+#include "media/base/video_color_space.h"
#include "media/media_features.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -23,6 +26,12 @@
namespace media {
namespace internal {
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+const bool kUsePropCodecs = true;
+#else
+const bool kUsePropCodecs = false;
+#endif // BUILDFLAG(USE_PROPRIETARY_CODECS)
+
// MIME type for use with IsCodecSupportedOnAndroid() test; type is ignored in
// all cases except for when paired with the Opus codec.
const char kTestMimeType[] = "foo/foo";
@@ -234,9 +243,129 @@ TEST(MimeUtilTest, SplitCodecsToVector) {
EXPECT_EQ("mp4a.40.2", codecs_out[1]);
}
+// Basic smoke test for API. More exhaustive codec string testing found in
+// media_canplaytype_browsertest.cc.
+TEST(MimeUtilTest, ParseVideoCodecString) {
+ bool out_is_ambiguous;
+ VideoCodec out_codec;
+ VideoCodecProfile out_profile;
+ uint8_t out_level;
+ VideoColorSpace out_colorspace;
+
+ // Valid AVC string whenever proprietary codecs are supported.
+ EXPECT_EQ(kUsePropCodecs,
+ ParseVideoCodecString("video/mp4", "avc3.42E01E", &out_is_ambiguous,
+ &out_codec, &out_profile, &out_level,
+ &out_colorspace));
+ if (kUsePropCodecs) {
+ EXPECT_FALSE(out_is_ambiguous);
+ EXPECT_EQ(kCodecH264, out_codec);
+ EXPECT_EQ(H264PROFILE_BASELINE, out_profile);
+ EXPECT_EQ(30, out_level);
+ EXPECT_EQ(VideoColorSpace::REC709(), out_colorspace);
+ }
+
+ // Valid VP9 string.
+ EnableNewVp9CodecStringSupport();
+ EXPECT_TRUE(ParseVideoCodecString("video/webm", "vp09.00.10.08",
+ &out_is_ambiguous, &out_codec, &out_profile,
+ &out_level, &out_colorspace));
+ EXPECT_FALSE(out_is_ambiguous);
+ EXPECT_EQ(kCodecVP9, out_codec);
+ EXPECT_EQ(VP9PROFILE_PROFILE0, out_profile);
+ EXPECT_EQ(10, out_level);
+ EXPECT_EQ(VideoColorSpace::REC709(), out_colorspace);
+
+ // Valid VP9 string with REC601 color space.
+ EXPECT_TRUE(ParseVideoCodecString("video/webm", "vp09.02.10.10.01.06.06.06",
+ &out_is_ambiguous, &out_codec, &out_profile,
+ &out_level, &out_colorspace));
+ EXPECT_FALSE(out_is_ambiguous);
+ EXPECT_EQ(kCodecVP9, out_codec);
+ EXPECT_EQ(VP9PROFILE_PROFILE2, out_profile);
+ EXPECT_EQ(10, out_level);
+ EXPECT_EQ(VideoColorSpace::REC601(), out_colorspace);
+
+ // Restore to avoid polluting other tests.
+ DisableNewVp9CodecStringSupport_ForTesting();
+
+ // Ambiguous AVC string (when proprietary codecs are supported).
+ EXPECT_EQ(
+ kUsePropCodecs,
+ ParseVideoCodecString("video/mp4", "avc3", &out_is_ambiguous, &out_codec,
+ &out_profile, &out_level, &out_colorspace));
+ if (kUsePropCodecs) {
+ EXPECT_TRUE(out_is_ambiguous);
+ EXPECT_EQ(kCodecH264, out_codec);
+ EXPECT_EQ(VIDEO_CODEC_PROFILE_UNKNOWN, out_profile);
+ EXPECT_EQ(0, out_level);
+ EXPECT_EQ(VideoColorSpace::REC709(), out_colorspace);
+ }
+
+ // Audio codecs codec is not valid for video API.
+ EXPECT_FALSE(ParseVideoCodecString("video/webm", "opus", &out_is_ambiguous,
+ &out_codec, &out_profile, &out_level,
+ &out_colorspace));
+
+ // Made up codec is invalid.
+ EXPECT_FALSE(ParseVideoCodecString("video/webm", "bogus", &out_is_ambiguous,
+ &out_codec, &out_profile, &out_level,
+ &out_colorspace));
+}
+
+TEST(MimeUtilTest, ParseAudioCodecString) {
+ bool out_is_ambiguous;
+ AudioCodec out_codec;
+
+ // Valid Opus string.
+ EXPECT_TRUE(ParseAudioCodecString("audio/webm", "opus", &out_is_ambiguous,
+ &out_codec));
+ EXPECT_FALSE(out_is_ambiguous);
+ EXPECT_EQ(kCodecOpus, out_codec);
+
+ // Valid AAC string when proprietary codecs are supported.
+ EXPECT_EQ(kUsePropCodecs,
+ ParseAudioCodecString("audio/mp4", "mp4a.40.2", &out_is_ambiguous,
+ &out_codec));
+ if (kUsePropCodecs) {
+ EXPECT_FALSE(out_is_ambiguous);
+ EXPECT_EQ(kCodecAAC, out_codec);
+ }
+
+ // Ambiguous AAC string.
+ // TODO(chcunningha): This can probably be allowed. I think we treat all
+ // MPEG4_AAC the same.
+ EXPECT_EQ(kUsePropCodecs,
+ ParseAudioCodecString("audio/mp4", "mp4a.40", &out_is_ambiguous,
+ &out_codec));
+ if (kUsePropCodecs) {
+ EXPECT_TRUE(out_is_ambiguous);
+ EXPECT_EQ(kCodecAAC, out_codec);
+ }
+
+ // Valid empty codec string. Codec unambiguously implied by mime type.
+ EXPECT_TRUE(
+ ParseAudioCodecString("audio/flac", "", &out_is_ambiguous, &out_codec));
+ EXPECT_FALSE(out_is_ambiguous);
+ EXPECT_EQ(kCodecFLAC, out_codec);
+
+ // Valid audio codec should still be allowed with video mime type.
+ EXPECT_TRUE(ParseAudioCodecString("video/webm", "opus", &out_is_ambiguous,
+ &out_codec));
+ EXPECT_FALSE(out_is_ambiguous);
+ EXPECT_EQ(kCodecOpus, out_codec);
+
+ // Video codec is not valid for audio API.
+ EXPECT_FALSE(ParseAudioCodecString("audio/webm", "vp09.00.10.08",
+ &out_is_ambiguous, &out_codec));
+
+ // Made up codec is also not valid.
+ EXPECT_FALSE(ParseAudioCodecString("audio/webm", "bogus", &out_is_ambiguous,
+ &out_codec));
+}
+
// See deeper string parsing testing in video_codecs_unittests.cc.
TEST(MimeUtilTest, ExperimentalMultiPartVp9) {
- base::test::ScopedCommandLine scoped_command_line;
// Multi-part VP9 string not enabled by default.
EXPECT_FALSE(IsSupportedMediaFormat("video/webm", {"vp09.00.10.08"}));
@@ -244,6 +373,8 @@ TEST(MimeUtilTest, ExperimentalMultiPartVp9) {
// Should work if enabled.
EnableNewVp9CodecStringSupport();
EXPECT_TRUE(IsSupportedMediaFormat("video/webm", {"vp09.00.10.08"}));
+ // Restore to avoid polluting other tests.
+ DisableNewVp9CodecStringSupport_ForTesting();
}
TEST(IsCodecSupportedOnAndroidTest, EncryptedCodecsFailWithoutPlatformSupport) {
« no previous file with comments | « media/base/mime_util_internal.cc ('k') | media/base/video_codecs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698