Enable VP9 video codec support on webrtcvideoengine behind a field trial.

BUG=chromium:431285
R=pbos@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/27929004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7663 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
andresp@webrtc.org 2014-11-07 13:21:04 +00:00
parent f85dbce041
commit 188d3b2245
3 changed files with 27 additions and 0 deletions

View File

@ -33,6 +33,7 @@ extern const int kVideoMtu;
extern const int kVideoRtpBufferSize;
extern const char kVp8CodecName[];
extern const char kVp9CodecName[];
extern const char kH264CodecName[];
extern const int kDefaultVideoMaxWidth;

View File

@ -64,6 +64,7 @@
#include "webrtc/base/timeutils.h"
#include "webrtc/experiments.h"
#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
#include "webrtc/system_wrappers/interface/field_trial.h"
namespace {
@ -106,6 +107,7 @@ const int kVideoMtu = 1200;
const int kVideoRtpBufferSize = 65536;
const char kVp8CodecName[] = "VP8";
const char kVp9CodecName[] = "VP9";
// TODO(ronghuawu): Change to 640x360.
const int kDefaultVideoMaxWidth = 640;
@ -221,11 +223,21 @@ bool CodecIsInternallySupported(const std::string& codec_name) {
if (CodecNameMatches(codec_name, kVp8CodecName)) {
return true;
}
if (CodecNameMatches(codec_name, kVp9CodecName)) {
const std::string group_name =
webrtc::field_trial::FindFullName("WebRTC-SupportVP9");
return group_name == "Enabled" || group_name == "EnabledByFlag";
}
return false;
}
std::vector<VideoCodec> DefaultVideoCodecList() {
std::vector<VideoCodec> codecs;
if (CodecIsInternallySupported(kVp9CodecName)) {
codecs.push_back(
MakeVideoCodecWithDefaultFeedbackParams(101, kVp9CodecName));
// TODO(andresp): Add rtx codec for vp9 and verify it works.
}
codecs.push_back(MakeVideoCodecWithDefaultFeedbackParams(100, kVp8CodecName));
codecs.push_back(MakeRtxCodec(96, 100));
codecs.push_back(MakeVideoCodec(116, kRedCodecName));

View File

@ -230,6 +230,12 @@ void* WebRtcVideoEncoderFactory2::CreateVideoEncoderSettings(
options.video_noise_reduction.Get(&settings->denoisingOn);
return settings;
}
if (CodecNameMatches(codec.name, kVp9CodecName)) {
webrtc::VideoCodecVP9* settings = new webrtc::VideoCodecVP9(
webrtc::VideoEncoder::GetDefaultVp9Settings());
options.video_noise_reduction.Get(&settings->denoisingOn);
return settings;
}
return NULL;
}
@ -242,6 +248,9 @@ void WebRtcVideoEncoderFactory2::DestroyVideoEncoderSettings(
if (CodecNameMatches(codec.name, kVp8CodecName)) {
delete reinterpret_cast<webrtc::VideoCodecVP8*>(encoder_settings);
}
if (CodecNameMatches(codec.name, kVp9CodecName)) {
delete reinterpret_cast<webrtc::VideoCodecVP9*>(encoder_settings);
}
}
DefaultUnsignalledSsrcHandler::DefaultUnsignalledSsrcHandler()
@ -1604,6 +1613,8 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodec(
webrtc::VideoCodecType CodecTypeFromName(const std::string& name) {
if (CodecNameMatches(name, kVp8CodecName)) {
return webrtc::kVideoCodecVP8;
} else if (CodecNameMatches(name, kVp9CodecName)) {
return webrtc::kVideoCodecVP9;
} else if (CodecNameMatches(name, kH264CodecName)) {
return webrtc::kVideoCodecH264;
}
@ -1631,6 +1642,9 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoder(
if (type == webrtc::kVideoCodecVP8) {
return AllocatedEncoder(
webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kVp8), type, false);
} else if (type == webrtc::kVideoCodecVP9) {
return AllocatedEncoder(
webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kVp9), type, false);
}
// This shouldn't happen, we should not be trying to create something we don't