Chromium Code Reviews| Index: remoting/protocol/webrtc_video_stream.cc |
| diff --git a/remoting/protocol/webrtc_video_stream.cc b/remoting/protocol/webrtc_video_stream.cc |
| index 79a7dceaeff038df1c6854fba7f759e6120de651..4ed459255014680350bab9a3b65d1c27c8370578 100644 |
| --- a/remoting/protocol/webrtc_video_stream.cc |
| +++ b/remoting/protocol/webrtc_video_stream.cc |
| @@ -4,6 +4,8 @@ |
| #include "remoting/protocol/webrtc_video_stream.h" |
| +#include <utility> |
| + |
| #include "base/logging.h" |
| #include "base/single_thread_task_runner.h" |
| #include "base/task_runner_util.h" |
| @@ -76,8 +78,11 @@ void WebrtcVideoStream::Start( |
| encode_task_runner_ = std::move(encode_task_runner); |
| capturer_ = std::move(desktop_capturer); |
| webrtc_transport_ = webrtc_transport; |
| - // TODO(isheriff): make this codec independent |
| - encoder_ = WebrtcVideoEncoderVpx::CreateForVP8(); |
| + |
| + webrtc_transport_->video_encoder_factory()->RegisterEncoderSelectedCallback( |
| + base::Bind(&WebrtcVideoStream::OnEncoderCreated, |
| + weak_factory_.GetWeakPtr())); |
| + |
| capturer_->Start(this); |
| // Set video stream constraints. |
| @@ -164,6 +169,11 @@ void WebrtcVideoStream::OnCaptureResult( |
| } |
| } |
| + if (!encoder_) { |
|
Sergey Ulanov
2017/04/04 00:21:25
Don't need this anymore. Replace with a DCHECK()?
Yuwei
2017/04/04 00:50:48
Done.
|
| + LOG(ERROR) << "Encoder is not ready to accept frames."; |
| + return; |
| + } |
| + |
| base::PostTaskAndReplyWithResult( |
| encode_task_runner_.get(), FROM_HERE, |
| base::Bind(&WebrtcVideoStream::EncodeFrame, encoder_.get(), |
| @@ -261,5 +271,16 @@ void WebrtcVideoStream::OnFrameEncoded(EncodedFrameWithStats frame) { |
| } |
| } |
| +void WebrtcVideoStream::OnEncoderCreated(webrtc::VideoCodecType codec_type) { |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + if (codec_type == webrtc::kVideoCodecVP8) { |
| + encoder_ = WebrtcVideoEncoderVpx::CreateForVP8(); |
| + } else if (codec_type == webrtc::kVideoCodecVP9) { |
| + encoder_ = WebrtcVideoEncoderVpx::CreateForVP9(); |
| + } else { |
| + LOG(FATAL) << "Unknown codec type: " << codec_type; |
| + } |
| +} |
| + |
| } // namespace protocol |
| } // namespace remoting |