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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "content/renderer/media_recorder/media_recorder_handler.h" 5 #include "content/renderer/media_recorder/media_recorder_handler.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 case VideoTrackRecorder::CodecId::H264: 48 case VideoTrackRecorder::CodecId::H264:
49 return media::kCodecH264; 49 return media::kCodecH264;
50 #endif 50 #endif
51 case VideoTrackRecorder::CodecId::LAST: 51 case VideoTrackRecorder::CodecId::LAST:
52 return media::kUnknownVideoCodec; 52 return media::kUnknownVideoCodec;
53 } 53 }
54 NOTREACHED() << "Unsupported codec"; 54 NOTREACHED() << "Unsupported codec";
55 return media::kUnknownVideoCodec; 55 return media::kUnknownVideoCodec;
56 } 56 }
57 57
58 // Extracts the first recognised CodecId of |codecs| or CodecId::LAST if none
59 // of them is known.
60 VideoTrackRecorder::CodecId StringToCodecId(const blink::WebString& codecs) {
61 const std::string& codecs_str = ToLowerASCII(codecs.Utf8());
62
63 if (codecs_str.find("vp8") != std::string::npos)
64 return VideoTrackRecorder::CodecId::VP8;
65 else if (codecs_str.find("vp9") != std::string::npos)
66 return VideoTrackRecorder::CodecId::VP9;
67 #if BUILDFLAG(RTC_USE_H264)
emircan 2017/04/25 02:04:30 We should use IS_H264_SUPPORTED as the android cl
68 else if (codecs_str.find("h264") != std::string::npos ||
69 codecs_str.find("avc1") != std::string::npos)
70 return VideoTrackRecorder::CodecId::H264;
71 #endif
72 return VideoTrackRecorder::CodecId::LAST;
73 }
74
58 void OnEncodingInfoError( 75 void OnEncodingInfoError(
59 std::unique_ptr<WebMediaCapabilitiesQueryCallbacks> callbacks) { 76 std::unique_ptr<WebMediaCapabilitiesQueryCallbacks> callbacks) {
60 callbacks->OnError(); 77 callbacks->OnError();
61 } 78 }
62 79
63 } // anonymous namespace 80 } // anonymous namespace
64 81
65 MediaRecorderHandler::MediaRecorderHandler() 82 MediaRecorderHandler::MediaRecorderHandler()
66 : video_bits_per_second_(0), 83 : video_bits_per_second_(0),
67 audio_bits_per_second_(0), 84 audio_bits_per_second_(0),
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 // Save histogram data so we can see how much MediaStream Recorder is used. 147 // Save histogram data so we can see how much MediaStream Recorder is used.
131 // The histogram counts the number of calls to the JS API. 148 // The histogram counts the number of calls to the JS API.
132 UpdateWebRTCMethodCount(WEBKIT_MEDIA_STREAM_RECORDER); 149 UpdateWebRTCMethodCount(WEBKIT_MEDIA_STREAM_RECORDER);
133 150
134 if (!CanSupportMimeType(type, codecs)) { 151 if (!CanSupportMimeType(type, codecs)) {
135 DLOG(ERROR) << "Unsupported " << type.Utf8() << ";codecs=" << codecs.Utf8(); 152 DLOG(ERROR) << "Unsupported " << type.Utf8() << ";codecs=" << codecs.Utf8();
136 return false; 153 return false;
137 } 154 }
138 155
139 // Once established that we support the codec(s), hunt then individually. 156 // Once established that we support the codec(s), hunt then individually.
140 const std::string& codecs_str = ToLowerASCII(codecs.Utf8()); 157 const VideoTrackRecorder::CodecId codec_id = StringToCodecId(codecs);
141 if (codecs_str.find("vp8") != std::string::npos) 158 codec_id_ = (codec_id != VideoTrackRecorder::CodecId::LAST)
142 codec_id_ = VideoTrackRecorder::CodecId::VP8; 159 ? codec_id
143 else if (codecs_str.find("vp9") != std::string::npos) 160 : VideoTrackRecorder::GetPreferredCodecId();
144 codec_id_ = VideoTrackRecorder::CodecId::VP9;
145 #if defined(IS_H264_SUPPORTED)
146 else if (codecs_str.find("h264") != std::string::npos)
147 codec_id_ = VideoTrackRecorder::CodecId::H264;
148 else if (codecs_str.find("avc1") != std::string::npos)
149 codec_id_ = VideoTrackRecorder::CodecId::H264;
150 #endif
151 else
152 codec_id_ = VideoTrackRecorder::GetPreferredCodecId();
153 161
154 DVLOG_IF(1, codecs_str.empty()) << "Falling back to preferred codec id " 162 DVLOG_IF(1, codec_id == VideoTrackRecorder::CodecId::LAST)
155 << static_cast<int>(codec_id_); 163 << "Falling back to preferred codec id " << static_cast<int>(codec_id_);
156 164
157 media_stream_ = media_stream; 165 media_stream_ = media_stream;
158 DCHECK(client); 166 DCHECK(client);
159 client_ = client; 167 client_ = client;
160 168
161 audio_bits_per_second_ = audio_bits_per_second; 169 audio_bits_per_second_ = audio_bits_per_second;
162 video_bits_per_second_ = video_bits_per_second; 170 video_bits_per_second_ = video_bits_per_second;
163 return true; 171 return true;
164 } 172 }
165 173
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 const std::string parameters = mime_tokenizer.token(); 319 const std::string parameters = mime_tokenizer.token();
312 base::StringTokenizer parameter_tokenizer(parameters, "="); 320 base::StringTokenizer parameter_tokenizer(parameters, "=");
313 if (parameter_tokenizer.GetNext() && 321 if (parameter_tokenizer.GetNext() &&
314 base::ToLowerASCII(parameter_tokenizer.token()) == "codecs" && 322 base::ToLowerASCII(parameter_tokenizer.token()) == "codecs" &&
315 parameter_tokenizer.GetNext()) { 323 parameter_tokenizer.GetNext()) {
316 web_codecs = blink::WebString::FromASCII(parameter_tokenizer.token()); 324 web_codecs = blink::WebString::FromASCII(parameter_tokenizer.token());
317 } 325 }
318 } 326 }
319 327
320 info->supported = CanSupportMimeType(web_type, web_codecs); 328 info->supported = CanSupportMimeType(web_type, web_codecs);
329
330 if (configuration.video_configuration && info->supported) {
331 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
332 StringToCodecId(web_codecs), configuration.video_configuration->width,
333 configuration.video_configuration->height);
334 info->power_efficient = info->smooth;
335 }
321 DVLOG(1) << "type: " << web_type.Ascii() << ", params:" << web_codecs.Ascii() 336 DVLOG(1) << "type: " << web_type.Ascii() << ", params:" << web_codecs.Ascii()
322 << " is" << (info->supported ? " supported" : " NOT supported"); 337 << " is" << (info->supported ? " supported" : " NOT supported")
338 << " and" << (info->smooth ? " smooth" : " NOT smooth");
323 339
324 scoped_callbacks.PassCallbacks()->OnSuccess(std::move(info)); 340 scoped_callbacks.PassCallbacks()->OnSuccess(std::move(info));
325 } 341 }
326 342
327 void MediaRecorderHandler::OnEncodedVideo( 343 void MediaRecorderHandler::OnEncodedVideo(
328 const media::WebmMuxer::VideoParameters& params, 344 const media::WebmMuxer::VideoParameters& params,
329 std::unique_ptr<std::string> encoded_data, 345 std::unique_ptr<std::string> encoded_data,
330 std::unique_ptr<std::string> encoded_alpha, 346 std::unique_ptr<std::string> encoded_alpha,
331 TimeTicks timestamp, 347 TimeTicks timestamp,
332 bool is_key_frame) { 348 bool is_key_frame) {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 recorder->OnData(audio_bus, timestamp); 448 recorder->OnData(audio_bus, timestamp);
433 } 449 }
434 450
435 void MediaRecorderHandler::SetAudioFormatForTesting( 451 void MediaRecorderHandler::SetAudioFormatForTesting(
436 const media::AudioParameters& params) { 452 const media::AudioParameters& params) {
437 for (const auto& recorder : audio_recorders_) 453 for (const auto& recorder : audio_recorders_)
438 recorder->OnSetFormat(params); 454 recorder->OnSetFormat(params);
439 } 455 }
440 456
441 } // namespace content 457 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698