Index: remoting/protocol/webrtc_video_stream.cc |
diff --git a/remoting/protocol/webrtc_video_stream.cc b/remoting/protocol/webrtc_video_stream.cc |
index c3d07134af64b46ec9a8120522d0637bb5a3bda4..b6f8b6add5e061d2aae948f9e8c5f67723c882c0 100644 |
--- a/remoting/protocol/webrtc_video_stream.cc |
+++ b/remoting/protocol/webrtc_video_stream.cc |
@@ -9,7 +9,7 @@ |
#include "base/task_runner_util.h" |
#include "base/threading/thread_task_runner_handle.h" |
#include "remoting/base/constants.h" |
-#include "remoting/proto/video.pb.h" |
+#include "remoting/codec/webrtc_video_encoder_vpx.h" |
#include "remoting/protocol/frame_stats.h" |
#include "remoting/protocol/host_video_stats_dispatcher.h" |
#include "remoting/protocol/webrtc_dummy_video_capturer.h" |
@@ -59,7 +59,7 @@ struct WebrtcVideoStream::FrameTimestamps { |
}; |
struct WebrtcVideoStream::EncodedFrameWithTimestamps { |
- std::unique_ptr<VideoPacket> frame; |
+ std::unique_ptr<WebrtcVideoEncoder::EncodedFrame> frame; |
std::unique_ptr<FrameTimestamps> timestamps; |
}; |
@@ -79,13 +79,11 @@ WebrtcVideoStream::~WebrtcVideoStream() { |
bool WebrtcVideoStream::Start( |
std::unique_ptr<webrtc::DesktopCapturer> desktop_capturer, |
WebrtcTransport* webrtc_transport, |
- scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner, |
- std::unique_ptr<VideoEncoder> video_encoder) { |
+ scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(webrtc_transport); |
DCHECK(desktop_capturer); |
DCHECK(encode_task_runner); |
- DCHECK(video_encoder); |
scoped_refptr<webrtc::PeerConnectionFactoryInterface> peer_connection_factory( |
webrtc_transport->peer_connection_factory()); |
@@ -96,7 +94,8 @@ bool WebrtcVideoStream::Start( |
encode_task_runner_ = encode_task_runner; |
capturer_ = std::move(desktop_capturer); |
webrtc_transport_ = webrtc_transport; |
- encoder_ = std::move(video_encoder); |
+ // TODO(isheriff): make this codec independent |
+ encoder_ = WebrtcVideoEncoderVpx::CreateForVP8(); |
capturer_->Start(this); |
// Set video stream constraints. |
@@ -237,12 +236,19 @@ void WebrtcVideoStream::OnCaptureResult( |
base::TimeDelta::FromMilliseconds(frame->capture_time_ms()); |
encode_pending_ = true; |
+ |
+ // TODO(sergeyu): Currently frame_duration is always set to 1/15 of a second. |
+ // Experiment with different values, and try changing it dynamically. |
+ WebrtcVideoEncoder::FrameParams frame_params; |
+ frame_params.bitrate_kbps = target_bitrate_kbps_; |
+ frame_params.duration = base::TimeDelta::FromSeconds(1) / 15; |
+ frame_params.key_frame = ClearAndGetKeyFrameRequest(); |
+ |
base::PostTaskAndReplyWithResult( |
encode_task_runner_.get(), FROM_HERE, |
base::Bind(&WebrtcVideoStream::EncodeFrame, encoder_.get(), |
- base::Passed(std::move(frame)), |
- base::Passed(std::move(captured_frame_timestamps_)), |
- target_bitrate_kbps_, ClearAndGetKeyFrameRequest()), |
+ base::Passed(std::move(frame)), frame_params, |
+ base::Passed(std::move(captured_frame_timestamps_))), |
base::Bind(&WebrtcVideoStream::OnFrameEncoded, |
weak_factory_.GetWeakPtr())); |
} |
@@ -288,21 +294,15 @@ void WebrtcVideoStream::CaptureNextFrame() { |
// static |
WebrtcVideoStream::EncodedFrameWithTimestamps WebrtcVideoStream::EncodeFrame( |
- VideoEncoder* encoder, |
+ WebrtcVideoEncoder* encoder, |
std::unique_ptr<webrtc::DesktopFrame> frame, |
- std::unique_ptr<WebrtcVideoStream::FrameTimestamps> timestamps, |
- uint32_t target_bitrate_kbps, |
- bool key_frame_request) { |
+ WebrtcVideoEncoder::FrameParams params, |
+ std::unique_ptr<WebrtcVideoStream::FrameTimestamps> timestamps) { |
EncodedFrameWithTimestamps result; |
result.timestamps = std::move(timestamps); |
result.timestamps->encode_started_time = base::TimeTicks::Now(); |
- |
- encoder->UpdateTargetBitrate(target_bitrate_kbps); |
- result.frame = encoder->Encode( |
- *frame, key_frame_request ? VideoEncoder::REQUEST_KEY_FRAME : 0); |
- |
+ result.frame = encoder->Encode(*frame, params); |
result.timestamps->encode_ended_time = base::TimeTicks::Now(); |
- |
return result; |
} |
@@ -311,7 +311,7 @@ void WebrtcVideoStream::OnFrameEncoded(EncodedFrameWithTimestamps frame) { |
encode_pending_ = false; |
- size_t frame_size = frame.frame ? frame.frame->data().size() : 0; |
+ size_t frame_size = frame.frame ? frame.frame->data.size() : 0; |
// Generate HostFrameStats. |
HostFrameStats stats; |