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

Unified Diff: remoting/protocol/webrtc_video_stream.cc

Issue 2329653002: Add WebrtcVideoEncoder interface (Closed)
Patch Set: win Created 4 years, 3 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
« no previous file with comments | « remoting/protocol/webrtc_video_stream.h ('k') | remoting/test/codec_perftest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « remoting/protocol/webrtc_video_stream.h ('k') | remoting/test/codec_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698