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

Unified Diff: media/blink/webmediacapabilitiesclient_impl.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/video_codecs.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/blink/webmediacapabilitiesclient_impl.cc
diff --git a/media/blink/webmediacapabilitiesclient_impl.cc b/media/blink/webmediacapabilitiesclient_impl.cc
index 7b9ecbca573e7e823734d6b37ec68ac94247a42a..d973d2f6314264c639b3d65a88efd7a8d180e2e8 100644
--- a/media/blink/webmediacapabilitiesclient_impl.cc
+++ b/media/blink/webmediacapabilitiesclient_impl.cc
@@ -4,7 +4,11 @@
#include "media/blink/webmediacapabilitiesclient_impl.h"
+#include "media/base/audio_codecs.h"
+#include "media/base/decode_capabilities.h"
#include "media/base/mime_util.h"
+#include "media/base/video_codecs.h"
+#include "media/base/video_color_space.h"
#include "third_party/WebKit/public/platform/modules/media_capabilities/WebAudioConfiguration.h"
#include "third_party/WebKit/public/platform/modules/media_capabilities/WebMediaCapabilitiesInfo.h"
#include "third_party/WebKit/public/platform/modules/media_capabilities/WebMediaConfiguration.h"
@@ -22,46 +26,61 @@ void WebMediaCapabilitiesClientImpl::DecodingInfo(
std::unique_ptr<blink::WebMediaCapabilitiesInfo> info(
new blink::WebMediaCapabilitiesInfo());
- SupportsType audio_support = IsSupported;
- SupportsType video_support = IsSupported;
+ bool audio_supported = true;
+ bool video_supported = true;
if (configuration.audio_configuration) {
const blink::WebAudioConfiguration& audio_config =
configuration.audio_configuration.value();
- std::vector<std::string> codec_vector;
- SplitCodecsToVector(audio_config.codec.Ascii(), &codec_vector, false);
-
- // TODO(chcunningham): Update to throw exception pending outcome of
- // https://github.com/WICG/media-capabilities/issues/32
- DCHECK_LE(codec_vector.size(), 1U);
-
- audio_support =
- IsSupportedMediaFormat(audio_config.mime_type.Ascii(), codec_vector);
+ AudioCodec audio_codec;
+ bool is_audio_codec_ambiguous;
+
+ if (!ParseAudioCodecString(audio_config.mime_type.Ascii(),
+ audio_config.codec.Ascii(),
+ &is_audio_codec_ambiguous, &audio_codec)) {
+ // TODO(chcunningham): Replace this and other DVLOGs here with MEDIA_LOG.
+ // MediaCapabilities may need its own tab in chrome://media-internals.
+ DVLOG(2) << __func__ << " Failed to parse audio codec string:"
+ << audio_config.codec.Ascii();
+ audio_supported = false;
+ } else if (is_audio_codec_ambiguous) {
+ DVLOG(2) << __func__ << " Invalid (ambiguous) audio codec string:"
+ << audio_config.codec.Ascii();
+ audio_supported = false;
+ } else {
+ AudioConfig audio_config = {audio_codec};
+ audio_supported = IsSupportedAudioConfig(audio_config);
+ }
}
if (configuration.video_configuration) {
const blink::WebVideoConfiguration& video_config =
configuration.video_configuration.value();
- std::vector<std::string> codec_vector;
- SplitCodecsToVector(video_config.codec.Ascii(), &codec_vector, false);
-
- // TODO(chcunningham): Update to throw exception pending outcome of
- // https://github.com/WICG/media-capabilities/issues/32
- DCHECK_LE(codec_vector.size(), 1U);
-
- video_support =
- IsSupportedMediaFormat(video_config.mime_type.Ascii(), codec_vector);
+ VideoCodec video_codec;
+ VideoCodecProfile video_profile;
+ uint8_t video_level;
+ VideoColorSpace video_color_space;
+ bool is_video_codec_ambiguous;
+
+ if (!ParseVideoCodecString(
+ video_config.mime_type.Ascii(), video_config.codec.Ascii(),
+ &is_video_codec_ambiguous, &video_codec, &video_profile,
+ &video_level, &video_color_space)) {
+ DVLOG(2) << __func__ << " Failed to parse video codec string:"
+ << video_config.codec.Ascii();
+ video_supported = false;
+ } else if (is_video_codec_ambiguous) {
+ DVLOG(2) << __func__ << " Invalid (ambiguous) video codec string:"
+ << video_config.codec.Ascii();
+ video_supported = false;
+ } else {
+ VideoConfig video_config = {video_codec, video_profile, video_level,
+ video_color_space};
+ video_supported = IsSupportedVideoConfig(video_config);
+ }
}
- // TODO(chcunningham): API should never have to mask uncertainty. Log a metric
- // for any content type that is "maybe" supported.
- if (video_support == MayBeSupported)
- video_support = IsSupported;
- if (audio_support == MayBeSupported)
- audio_support = IsSupported;
-
- info->supported =
- audio_support == IsSupported && video_support == IsSupported;
+ info->supported = audio_supported && video_supported;
// TODO(chcunningham, mlamouri): real implementation for these.
info->smooth = info->power_efficient = info->supported;
« no previous file with comments | « media/base/video_codecs.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698