Prevent decoder busy loop for send-only channels.

ViEChannels without default encoders doesn't register a receive codec by
default. This makes VideoReceiver::Decode return early, causing a
high-priority thread to effectively be busy looping. This would be
expected to wreck more havoc in a more cross-platform manner than it has
visibly done. On Windows XP however it manages to bring the whole
machine to a grinding halt forcing a reboot if CPU usage hits 100%.

BUG=chromium:470013
R=stefan@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8976}
diff --git a/webrtc/modules/video_coding/main/source/video_coding_impl.h b/webrtc/modules/video_coding/main/source/video_coding_impl.h
index bb643bf..48287a2 100644
--- a/webrtc/modules/video_coding/main/source/video_coding_impl.h
+++ b/webrtc/modules/video_coding/main/source/video_coding_impl.h
@@ -218,7 +218,6 @@
   Clock* const clock_;
   rtc::scoped_ptr<CriticalSectionWrapper> process_crit_sect_;
   CriticalSectionWrapper* _receiveCritSect;
-  bool _receiverInited GUARDED_BY(_receiveCritSect);
   VCMTiming _timing;
   VCMReceiver _receiver;
   VCMDecodedFrameCallback _decodedFrameCallback;
diff --git a/webrtc/modules/video_coding/main/source/video_receiver.cc b/webrtc/modules/video_coding/main/source/video_receiver.cc
index 6336e0e..9ecd926 100644
--- a/webrtc/modules/video_coding/main/source/video_receiver.cc
+++ b/webrtc/modules/video_coding/main/source/video_receiver.cc
@@ -28,7 +28,6 @@
     : clock_(clock),
       process_crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
       _receiveCritSect(CriticalSectionWrapper::CreateCriticalSection()),
-      _receiverInited(false),
       _timing(clock_),
       _receiver(&_timing, clock_, event_factory, true),
       _decodedFrameCallback(_timing, clock_),
@@ -257,7 +256,6 @@
     CriticalSectionScoped receive_cs(_receiveCritSect);
     _codecDataBase.ResetReceiver();
     _timing.Reset();
-    _receiverInited = true;
   }
 
   {
@@ -349,12 +347,6 @@
   bool supports_render_scheduling;
   {
     CriticalSectionScoped cs(_receiveCritSect);
-    if (!_receiverInited) {
-      return VCM_UNINITIALIZED;
-    }
-    if (!_codecDataBase.DecoderRegistered()) {
-      return VCM_NO_CODEC_REGISTERED;
-    }
     supports_render_scheduling = _codecDataBase.SupportsRenderScheduling();
   }
 
diff --git a/webrtc/video_engine/vie_channel.cc b/webrtc/video_engine/vie_channel.cc
index 48a6299..b08f2e9 100644
--- a/webrtc/video_engine/vie_channel.cc
+++ b/webrtc/video_engine/vie_channel.cc
@@ -1752,6 +1752,8 @@
 }
 
 bool ViEChannel::ChannelDecodeProcess() {
+  // TODO(pbos): Make sure the decoder thread doesn't run for send-only
+  // channels.
   vcm_->Decode(kMaxDecodeWaitTimeMs);
   return true;
 }