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 8c2478bf7b1fd0ce525d646143071d111bd8f423..96abf30bd4b0e9e00ef31faef82e02ff5228a8dc 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" |
| @@ -74,8 +76,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()->SetEncoderCreatedCallback( |
|
Sergey Ulanov
2017/03/31 19:23:11
Maybe call it "EncoderSelectedCallback"? That woul
Yuwei
2017/04/03 22:29:10
Done.
|
| + base::Bind(&WebrtcVideoStream::OnEncoderCreated, |
| + weak_factory_.GetWeakPtr())); |
| + |
| capturer_->Start(this); |
| // Set video stream constraints. |
| @@ -162,6 +167,11 @@ void WebrtcVideoStream::OnCaptureResult( |
| } |
| } |
| + if (!encoder_) { |
| + LOG(WARNING) << "Encoder has not been created yet."; |
|
Yuwei
2017/03/29 01:08:33
I'm not sure whether this is very safe but IIUC th
Sergey Ulanov
2017/03/31 19:23:11
I think we need to fix this in WebrtcFrameSchedule
Yuwei
2017/04/03 22:29:10
Done.
|
| + return; |
| + } |
| + |
| base::PostTaskAndReplyWithResult( |
| encode_task_runner_.get(), FROM_HERE, |
| base::Bind(&WebrtcVideoStream::EncodeFrame, encoder_.get(), |
| @@ -254,5 +264,16 @@ void WebrtcVideoStream::OnFrameEncoded(EncodedFrameWithTimestamps 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 |