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

Unified Diff: remoting/codec/video_encoder_vpx.cc

Issue 28183002: Add VP9 encode support to the remoting host. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 7 years, 2 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/codec/video_encoder_vpx.h ('k') | remoting/codec/video_encoder_vpx_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/codec/video_encoder_vpx.cc
diff --git a/remoting/codec/video_encoder_vpx.cc b/remoting/codec/video_encoder_vpx.cc
index 9259ea706f38ccf6943d4a19cb70e861c209e9fc..beff31c371df67b59ffc165e94a8a67b448d9732 100644
--- a/remoting/codec/video_encoder_vpx.cc
+++ b/remoting/codec/video_encoder_vpx.cc
@@ -77,6 +77,57 @@ ScopedVpxCodec CreateVP8Codec(const webrtc::DesktopSize& size) {
return codec.Pass();
}
+ScopedVpxCodec CreateVP9Codec(const webrtc::DesktopSize& size) {
+ ScopedVpxCodec codec(new vpx_codec_ctx_t);
+
+ // Configure the encoder.
+ vpx_codec_enc_cfg_t config;
+ const vpx_codec_iface_t* algo = vpx_codec_vp9_cx();
+ CHECK(algo);
+ vpx_codec_err_t ret = vpx_codec_enc_config_default(algo, &config, 0);
+ if (ret != VPX_CODEC_OK)
+ return ScopedVpxCodec();
+
+ //config.rc_target_bitrate = size.width() * size.height() *
+ // config.rc_target_bitrate / config.g_w / config.g_h;
+ config.g_w = size.width();
+ config.g_h = size.height();
+ config.g_pass = VPX_RC_ONE_PASS;
+
+ // Value of 2 means using the real time profile. This is basically a
+ // redundant option since we explicitly select real time mode when doing
+ // encoding.
Jamie 2013/10/21 18:15:28 You're not using 2 for VP9. Please update either t
Wez 2013/10/22 01:12:33 Done.
+ config.g_profile = 0;
+
+ // Start emitting packets immediately.
+ config.g_lag_in_frames = 0;
+
+ // Using 2 threads gives a great boost in performance for most systems with
+ // adequate processing power. NB: Going to multiple threads on low end
+ // windows systems can really hurt performance.
+ // http://crbug.com/99179
+ //config.g_threads = (base::SysInfo::NumberOfProcessors() > 2) ? 2 : 1;
+ //config.rc_min_quantizer = 20;
+ //config.rc_max_quantizer = 30;
+ //config.g_timebase.num = 1;
+ //config.g_timebase.den = 20;
+
+ if (vpx_codec_enc_init(codec.get(), algo, &config, 0))
+ return ScopedVpxCodec();
+
+ // Value of 16 will have the smallest CPU load. This turns off subpixel
+ // motion search.
Jamie 2013/10/21 18:15:28 You're not using 16 for VP9. Please update either
Wez 2013/10/22 01:12:33 Done.
+ if (vpx_codec_control(codec.get(), VP8E_SET_CPUUSED, 4))
Jamie 2013/10/21 18:15:28 Is this use of a VP8_ constant correct for the VP9
Wez 2013/10/22 01:12:33 Yup. Updated comment to make that explicit.
+ return ScopedVpxCodec();
+
+ // Use the lowest level of noise sensitivity so as to spend less time
+ // on motion estimation and inter-prediction mode.
+ if (vpx_codec_control(codec.get(), VP8E_SET_NOISE_SENSITIVITY, 0))
+ return ScopedVpxCodec();
+
+ return codec.Pass();
+}
+
} // namespace
// static
@@ -85,6 +136,12 @@ scoped_ptr<VideoEncoderVpx> VideoEncoderVpx::CreateForVP8() {
new VideoEncoderVpx(base::Bind(&CreateVP8Codec)));
}
+// static
+scoped_ptr<VideoEncoderVpx> VideoEncoderVpx::CreateForVP9() {
+ return scoped_ptr<VideoEncoderVpx>(
+ new VideoEncoderVpx(base::Bind(&CreateVP9Codec)));
+}
+
VideoEncoderVpx::~VideoEncoderVpx() {}
scoped_ptr<VideoPacket> VideoEncoderVpx::Encode(
« no previous file with comments | « remoting/codec/video_encoder_vpx.h ('k') | remoting/codec/video_encoder_vpx_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698