Remove WebRtcVideoEncoderFactory2.
This interface is no longer required and just adds complexity.
R=stefan@webrtc.org
BUG=1788
Review URL: https://webrtc-codereview.appspot.com/33009004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8065 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc
index 2bb104a..ac8f5f3 100644
--- a/talk/media/webrtc/webrtcvideoengine2.cc
+++ b/talk/media/webrtc/webrtcvideoengine2.cc
@@ -207,11 +207,8 @@
return false;
}
-WebRtcVideoEncoderFactory2::~WebRtcVideoEncoderFactory2() {
-}
-
std::vector<webrtc::VideoStream>
-WebRtcVideoEncoderFactory2::CreateSimulcastVideoStreams(
+WebRtcVideoChannel2::WebRtcVideoSendStream::CreateSimulcastVideoStreams(
const VideoCodec& codec,
const VideoOptions& options,
size_t num_streams) {
@@ -240,7 +237,8 @@
codec.framerate != 0 ? codec.framerate : kDefaultVideoMaxFramerate);
}
-std::vector<webrtc::VideoStream> WebRtcVideoEncoderFactory2::CreateVideoStreams(
+std::vector<webrtc::VideoStream>
+WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoStreams(
const VideoCodec& codec,
const VideoOptions& options,
size_t num_streams) {
@@ -264,38 +262,22 @@
return streams;
}
-void* WebRtcVideoEncoderFactory2::CreateVideoEncoderSettings(
+void* WebRtcVideoChannel2::WebRtcVideoSendStream::ConfigureVideoEncoderSettings(
const VideoCodec& codec,
const VideoOptions& options) {
if (CodecNameMatches(codec.name, kVp8CodecName)) {
- webrtc::VideoCodecVP8* settings = new webrtc::VideoCodecVP8(
- webrtc::VideoEncoder::GetDefaultVp8Settings());
- options.video_noise_reduction.Get(&settings->denoisingOn);
- return settings;
+ encoder_settings_.vp8 = webrtc::VideoEncoder::GetDefaultVp8Settings();
+ options.video_noise_reduction.Get(&encoder_settings_.vp8.denoisingOn);
+ return &encoder_settings_.vp8;
}
if (CodecNameMatches(codec.name, kVp9CodecName)) {
- webrtc::VideoCodecVP9* settings = new webrtc::VideoCodecVP9(
- webrtc::VideoEncoder::GetDefaultVp9Settings());
- options.video_noise_reduction.Get(&settings->denoisingOn);
- return settings;
+ encoder_settings_.vp9 = webrtc::VideoEncoder::GetDefaultVp9Settings();
+ options.video_noise_reduction.Get(&encoder_settings_.vp9.denoisingOn);
+ return &encoder_settings_.vp9;
}
return NULL;
}
-void WebRtcVideoEncoderFactory2::DestroyVideoEncoderSettings(
- const VideoCodec& codec,
- void* encoder_settings) {
- if (encoder_settings == NULL) {
- return;
- }
- 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()
: default_recv_ssrc_(0), default_renderer_(NULL) {}
@@ -439,8 +421,7 @@
voice_channel,
options,
external_encoder_factory_,
- external_decoder_factory_,
- GetVideoEncoderFactory());
+ external_decoder_factory_);
if (!channel->Init()) {
delete channel;
return NULL;
@@ -579,10 +560,6 @@
return false;
}
-WebRtcVideoEncoderFactory2* WebRtcVideoEngine2::GetVideoEncoderFactory() {
- return &default_video_encoder_factory_;
-}
-
std::vector<VideoCodec> WebRtcVideoEngine2::GetSupportedCodecs() const {
std::vector<VideoCodec> supported_codecs = DefaultVideoCodecList();
@@ -618,13 +595,11 @@
VoiceMediaChannel* voice_channel,
const VideoOptions& options,
WebRtcVideoEncoderFactory* external_encoder_factory,
- WebRtcVideoDecoderFactory* external_decoder_factory,
- WebRtcVideoEncoderFactory2* encoder_factory)
+ WebRtcVideoDecoderFactory* external_decoder_factory)
: unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_),
voice_channel_(voice_channel),
external_encoder_factory_(external_encoder_factory),
- external_decoder_factory_(external_decoder_factory),
- encoder_factory_(encoder_factory) {
+ external_decoder_factory_(external_decoder_factory) {
SetDefaultOptions();
options_.SetAll(options);
webrtc::Call::Config config(this);
@@ -862,7 +837,6 @@
WebRtcVideoSendStream* stream =
new WebRtcVideoSendStream(call_.get(),
external_encoder_factory_,
- encoder_factory_,
options_,
send_codec_,
sp,
@@ -1353,14 +1327,12 @@
WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
webrtc::Call* call,
WebRtcVideoEncoderFactory* external_encoder_factory,
- WebRtcVideoEncoderFactory2* encoder_factory,
const VideoOptions& options,
const Settable<VideoCodecSettings>& codec_settings,
const StreamParams& sp,
const std::vector<webrtc::RtpExtension>& rtp_extensions)
: call_(call),
external_encoder_factory_(external_encoder_factory),
- encoder_factory_(encoder_factory),
stream_(NULL),
parameters_(webrtc::VideoSendStream::Config(), options, codec_settings),
allocated_encoder_(NULL, webrtc::kVideoCodecUnknown, false),
@@ -1700,7 +1672,7 @@
clamped_codec.width = width;
clamped_codec.height = height;
- encoder_config.streams = encoder_factory_->CreateVideoStreams(
+ encoder_config.streams = CreateVideoStreams(
clamped_codec, parameters_.options, parameters_.config.rtp.ssrcs.size());
// Conference mode screencast uses 2 temporal layers split at 100kbit.
@@ -1746,15 +1718,10 @@
CreateVideoEncoderConfig(last_dimensions_, codec_settings.codec);
encoder_config.encoder_specific_settings =
- encoder_factory_->CreateVideoEncoderSettings(codec_settings.codec,
- parameters_.options);
+ ConfigureVideoEncoderSettings(codec_settings.codec, parameters_.options);
bool stream_reconfigured = stream_->ReconfigureVideoEncoder(encoder_config);
- encoder_factory_->DestroyVideoEncoderSettings(
- codec_settings.codec,
- encoder_config.encoder_specific_settings);
-
encoder_config.encoder_specific_settings = NULL;
if (!stream_reconfigured) {
@@ -1880,16 +1847,11 @@
VideoCodecSettings codec_settings;
parameters_.codec_settings.Get(&codec_settings);
parameters_.encoder_config.encoder_specific_settings =
- encoder_factory_->CreateVideoEncoderSettings(codec_settings.codec,
- parameters_.options);
+ ConfigureVideoEncoderSettings(codec_settings.codec, parameters_.options);
stream_ = call_->CreateVideoSendStream(parameters_.config,
parameters_.encoder_config);
- encoder_factory_->DestroyVideoEncoderSettings(
- codec_settings.codec,
- parameters_.encoder_config.encoder_specific_settings);
-
parameters_.encoder_config.encoder_specific_settings = NULL;
if (sending_) {
diff --git a/talk/media/webrtc/webrtcvideoengine2.h b/talk/media/webrtc/webrtcvideoengine2.h
index f5a97a2..6ffff2b 100644
--- a/talk/media/webrtc/webrtcvideoengine2.h
+++ b/talk/media/webrtc/webrtcvideoengine2.h
@@ -106,27 +106,6 @@
VideoRenderer* default_renderer_;
};
-// TODO(pbos): Remove this class and just inline configuring code.
-class WebRtcVideoEncoderFactory2 {
- public:
- virtual ~WebRtcVideoEncoderFactory2();
- virtual std::vector<webrtc::VideoStream> CreateVideoStreams(
- const VideoCodec& codec,
- const VideoOptions& options,
- size_t num_streams);
-
- std::vector<webrtc::VideoStream> CreateSimulcastVideoStreams(
- const VideoCodec& codec,
- const VideoOptions& options,
- size_t num_streams);
-
- virtual void* CreateVideoEncoderSettings(const VideoCodec& codec,
- const VideoOptions& options);
-
- virtual void DestroyVideoEncoderSettings(const VideoCodec& codec,
- void* encoder_settings);
-};
-
// CallFactory, overridden for testing to verify that webrtc::Call is configured
// properly.
class WebRtcCallFactory {
@@ -187,8 +166,6 @@
rtc::CpuMonitor* cpu_monitor() { return cpu_monitor_.get(); }
- virtual WebRtcVideoEncoderFactory2* GetVideoEncoderFactory();
-
private:
std::vector<VideoCodec> GetSupportedCodecs() const;
@@ -201,7 +178,6 @@
bool initialized_;
rtc::scoped_ptr<rtc::CpuMonitor> cpu_monitor_;
- WebRtcVideoEncoderFactory2 default_video_encoder_factory_;
WebRtcCallFactory default_call_factory_;
WebRtcCallFactory* call_factory_;
@@ -221,8 +197,7 @@
VoiceMediaChannel* voice_channel,
const VideoOptions& options,
WebRtcVideoEncoderFactory* external_encoder_factory,
- WebRtcVideoDecoderFactory* external_decoder_factory,
- WebRtcVideoEncoderFactory2* encoder_factory);
+ WebRtcVideoDecoderFactory* external_decoder_factory);
~WebRtcVideoChannel2();
bool Init();
@@ -301,7 +276,6 @@
WebRtcVideoSendStream(
webrtc::Call* call,
WebRtcVideoEncoderFactory* external_encoder_factory,
- WebRtcVideoEncoderFactory2* encoder_factory,
const VideoOptions& options,
const Settable<VideoCodecSettings>& codec_settings,
const StreamParams& sp,
@@ -364,6 +338,24 @@
bool is_screencast;
};
+ union VideoEncoderSettings {
+ webrtc::VideoCodecVP8 vp8;
+ webrtc::VideoCodecVP9 vp9;
+ };
+
+ static std::vector<webrtc::VideoStream> CreateVideoStreams(
+ const VideoCodec& codec,
+ const VideoOptions& options,
+ size_t num_streams);
+ static std::vector<webrtc::VideoStream> CreateSimulcastVideoStreams(
+ const VideoCodec& codec,
+ const VideoOptions& options,
+ size_t num_streams);
+
+ void* ConfigureVideoEncoderSettings(const VideoCodec& codec,
+ const VideoOptions& options)
+ EXCLUSIVE_LOCKS_REQUIRED(lock_);
+
AllocatedEncoder CreateVideoEncoder(const VideoCodec& codec)
EXCLUSIVE_LOCKS_REQUIRED(lock_);
void DestroyVideoEncoder(AllocatedEncoder* encoder)
@@ -381,11 +373,11 @@
webrtc::Call* const call_;
WebRtcVideoEncoderFactory* const external_encoder_factory_
GUARDED_BY(lock_);
- WebRtcVideoEncoderFactory2* const encoder_factory_ GUARDED_BY(lock_);
rtc::CriticalSection lock_;
webrtc::VideoSendStream* stream_ GUARDED_BY(lock_);
VideoSendStreamParameters parameters_ GUARDED_BY(lock_);
+ VideoEncoderSettings encoder_settings_ GUARDED_BY(lock_);
AllocatedEncoder allocated_encoder_ GUARDED_BY(lock_);
Dimensions last_dimensions_ GUARDED_BY(lock_);
@@ -496,7 +488,6 @@
VoiceMediaChannel* const voice_channel_;
WebRtcVideoEncoderFactory* const external_encoder_factory_;
WebRtcVideoDecoderFactory* const external_decoder_factory_;
- WebRtcVideoEncoderFactory2* const encoder_factory_;
std::vector<VideoCodecSettings> recv_codecs_;
std::vector<webrtc::RtpExtension> recv_rtp_extensions_;
webrtc::Call::Config::BitrateConfig bitrate_config_;