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

Unified Diff: content/renderer/media_recorder/media_recorder_handler.cc

Issue 2832273002: Media Capabilities encoding: wire the hardware encoding support (Closed)
Patch Set: Created 3 years, 8 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
Index: content/renderer/media_recorder/media_recorder_handler.cc
diff --git a/content/renderer/media_recorder/media_recorder_handler.cc b/content/renderer/media_recorder/media_recorder_handler.cc
index 544665f530f4367af01c1fe71b13795221baed12..18c39eb07b305ec8b7709e2d1760be3ab7e7aff4 100644
--- a/content/renderer/media_recorder/media_recorder_handler.cc
+++ b/content/renderer/media_recorder/media_recorder_handler.cc
@@ -55,6 +55,23 @@ media::VideoCodec CodecIdToMediaVideoCodec(VideoTrackRecorder::CodecId id) {
return media::kUnknownVideoCodec;
}
+// Extracts the first recognised CodecId of |codecs| or CodecId::LAST if none
+// of them is known.
+VideoTrackRecorder::CodecId StringToCodecId(const blink::WebString& codecs) {
+ const std::string& codecs_str = ToLowerASCII(codecs.Utf8());
+
+ if (codecs_str.find("vp8") != std::string::npos)
+ return VideoTrackRecorder::CodecId::VP8;
+ else if (codecs_str.find("vp9") != std::string::npos)
+ return VideoTrackRecorder::CodecId::VP9;
+#if BUILDFLAG(RTC_USE_H264)
emircan 2017/04/25 02:04:30 We should use IS_H264_SUPPORTED as the android cl
+ else if (codecs_str.find("h264") != std::string::npos ||
+ codecs_str.find("avc1") != std::string::npos)
+ return VideoTrackRecorder::CodecId::H264;
+#endif
+ return VideoTrackRecorder::CodecId::LAST;
+}
+
void OnEncodingInfoError(
std::unique_ptr<WebMediaCapabilitiesQueryCallbacks> callbacks) {
callbacks->OnError();
@@ -137,22 +154,13 @@ bool MediaRecorderHandler::Initialize(
}
// Once established that we support the codec(s), hunt then individually.
- const std::string& codecs_str = ToLowerASCII(codecs.Utf8());
- if (codecs_str.find("vp8") != std::string::npos)
- codec_id_ = VideoTrackRecorder::CodecId::VP8;
- else if (codecs_str.find("vp9") != std::string::npos)
- codec_id_ = VideoTrackRecorder::CodecId::VP9;
-#if defined(IS_H264_SUPPORTED)
- else if (codecs_str.find("h264") != std::string::npos)
- codec_id_ = VideoTrackRecorder::CodecId::H264;
- else if (codecs_str.find("avc1") != std::string::npos)
- codec_id_ = VideoTrackRecorder::CodecId::H264;
-#endif
- else
- codec_id_ = VideoTrackRecorder::GetPreferredCodecId();
+ const VideoTrackRecorder::CodecId codec_id = StringToCodecId(codecs);
+ codec_id_ = (codec_id != VideoTrackRecorder::CodecId::LAST)
+ ? codec_id
+ : VideoTrackRecorder::GetPreferredCodecId();
- DVLOG_IF(1, codecs_str.empty()) << "Falling back to preferred codec id "
- << static_cast<int>(codec_id_);
+ DVLOG_IF(1, codec_id == VideoTrackRecorder::CodecId::LAST)
+ << "Falling back to preferred codec id " << static_cast<int>(codec_id_);
media_stream_ = media_stream;
DCHECK(client);
@@ -318,8 +326,16 @@ void MediaRecorderHandler::EncodingInfo(
}
info->supported = CanSupportMimeType(web_type, web_codecs);
+
+ if (configuration.video_configuration && info->supported) {
+ info->smooth = VideoTrackRecorder::IsEncodingLikelyAccelerated(
chcunningham 2017/04/24 20:58:17 Please build this out more to consider system spec
emircan 2017/04/25 02:04:30 We do not have power metrics currently, so we can
mcasas 2017/04/25 18:16:07 Please note that IsEncodingLikelyAccelerated() inc
chcunningham 2017/04/25 18:52:52 Totally fine for the initial implementation to be
+ StringToCodecId(web_codecs), configuration.video_configuration->width,
+ configuration.video_configuration->height);
+ info->power_efficient = info->smooth;
+ }
DVLOG(1) << "type: " << web_type.Ascii() << ", params:" << web_codecs.Ascii()
- << " is" << (info->supported ? " supported" : " NOT supported");
+ << " is" << (info->supported ? " supported" : " NOT supported")
+ << " and" << (info->smooth ? " smooth" : " NOT smooth");
scoped_callbacks.PassCallbacks()->OnSuccess(std::move(info));
}

Powered by Google App Engine
This is Rietveld 408576698