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_;