Delete video_coding_robustness_unittest.cc

BUG=none

Review-Url: https://codereview.webrtc.org/2755803004
Cr-Commit-Position: refs/heads/master@{#17312}
diff --git a/webrtc/modules/video_coding/BUILD.gn b/webrtc/modules/video_coding/BUILD.gn
index e377dee..c577f4f 100644
--- a/webrtc/modules/video_coding/BUILD.gn
+++ b/webrtc/modules/video_coding/BUILD.gn
@@ -512,7 +512,6 @@
       "utility/quality_scaler_unittest.cc",
       "utility/simulcast_rate_allocator_unittest.cc",
       "video_codec_initializer_unittest.cc",
-      "video_coding_robustness_unittest.cc",
       "video_packet_buffer_unittest.cc",
       "video_receiver_unittest.cc",
       "video_sender_unittest.cc",
diff --git a/webrtc/modules/video_coding/include/video_coding.h b/webrtc/modules/video_coding/include/video_coding.h
index 5e02eab..531f45a 100644
--- a/webrtc/modules/video_coding/include/video_coding.h
+++ b/webrtc/modules/video_coding/include/video_coding.h
@@ -71,23 +71,9 @@
  public:
   enum SenderNackMode { kNackNone, kNackAll, kNackSelective };
 
-  enum ReceiverRobustness { kNone, kHardNack, kSoftNack, kReferenceSelection };
-
+  // DEPRECATED.
   static VideoCodingModule* Create(Clock* clock, EventFactory* event_factory);
 
-  static VideoCodingModule* Create(
-      Clock* clock,
-      VCMQMSettingsCallback* qm_settings_callback,
-      NackSender* nack_sender,
-      KeyFrameRequestSender* keyframe_request_sender,
-      EncodedImageCallback* pre_decode_image_callback);
-
-  static VideoCodingModule* Create(
-      Clock* clock,
-      EventFactory* event_factory,
-      NackSender* nack_sender,
-      KeyFrameRequestSender* keyframe_request_sender);
-
   // Get supported codec settings using codec type
   //
   // Input:
@@ -396,11 +382,11 @@
 
   // Robustness APIs
 
+  // DEPRECATED.
   // Set the receiver robustness mode. The mode decides how the receiver
-  // responds to losses in the stream. The type of counter-measure (soft or
-  // hard NACK, dual decoder, RPS, etc.) is selected through the
-  // robustnessMode parameter. The errorMode parameter decides if it is
-  // allowed to display frames corrupted by losses. Note that not all
+  // responds to losses in the stream. The type of counter-measure is selected
+  // through the robustnessMode parameter. The errorMode parameter decides if it
+  // is allowed to display frames corrupted by losses. Note that not all
   // combinations of the two parameters are feasible. An error will be
   // returned for invalid combinations.
   // Input:
@@ -409,6 +395,7 @@
   //
   // Return value      : VCM_OK, on success;
   //                     < 0, on error.
+  enum ReceiverRobustness { kNone, kHardNack };
   virtual int SetReceiverRobustnessMode(ReceiverRobustness robustnessMode,
                                         VCMDecodeErrorMode errorMode) = 0;
 
diff --git a/webrtc/modules/video_coding/video_coding_impl.cc b/webrtc/modules/video_coding/video_coding_impl.cc
index 57eaf50..a1cfc07 100644
--- a/webrtc/modules/video_coding/video_coding_impl.cc
+++ b/webrtc/modules/video_coding/video_coding_impl.cc
@@ -276,37 +276,14 @@
   VCMCodecDataBase::Codec(codecType, codec);
 }
 
-// Create method for the new jitter buffer.
-VideoCodingModule* VideoCodingModule::Create(
-    Clock* clock,
-    VCMQMSettingsCallback* qm_settings_callback,
-    NackSender* nack_sender,
-    KeyFrameRequestSender* keyframe_request_sender,
-    EncodedImageCallback* pre_decode_image_callback) {
-  return new VideoCodingModuleImpl(clock, nullptr, nack_sender,
-                                   keyframe_request_sender,
-                                   pre_decode_image_callback);
-}
-
-// Create method for current interface, will be removed when the
+// DEPRECATED.  Create method for current interface, will be removed when the
 // new jitter buffer is in place.
 VideoCodingModule* VideoCodingModule::Create(Clock* clock,
                                              EventFactory* event_factory) {
-  return VideoCodingModule::Create(clock, event_factory,
-                                   nullptr,   // NackSender
-                                   nullptr);  // KeyframeRequestSender
-}
-
-// Create method for the new jitter buffer.
-VideoCodingModule* VideoCodingModule::Create(
-    Clock* clock,
-    EventFactory* event_factory,
-    NackSender* nack_sender,
-    KeyFrameRequestSender* keyframe_request_sender) {
   RTC_DCHECK(clock);
   RTC_DCHECK(event_factory);
-  return new VideoCodingModuleImpl(clock, event_factory, nack_sender,
-                                   keyframe_request_sender, nullptr);
+  return new VideoCodingModuleImpl(clock, event_factory, nullptr, nullptr,
+                                   nullptr);
 }
 
 }  // namespace webrtc
diff --git a/webrtc/modules/video_coding/video_coding_impl.h b/webrtc/modules/video_coding/video_coding_impl.h
index f1dbd13..5e547df 100644
--- a/webrtc/modules/video_coding/video_coding_impl.h
+++ b/webrtc/modules/video_coding/video_coding_impl.h
@@ -144,8 +144,6 @@
 
 class VideoReceiver : public Module {
  public:
-  typedef VideoCodingModule::ReceiverRobustness ReceiverRobustness;
-
   VideoReceiver(Clock* clock,
                 EventFactory* event_factory,
                 EncodedImageCallback* pre_decode_image_callback,
@@ -180,8 +178,11 @@
   int32_t SetRenderDelay(uint32_t timeMS);
   int32_t Delay() const;
 
-  int SetReceiverRobustnessMode(ReceiverRobustness robustnessMode,
-                                VCMDecodeErrorMode errorMode);
+  // DEPRECATED.
+  int SetReceiverRobustnessMode(
+      VideoCodingModule::ReceiverRobustness robustnessMode,
+      VCMDecodeErrorMode errorMode);
+
   void SetNackSettings(size_t max_nack_list_size,
                        int max_packet_age_to_nack,
                        int max_incomplete_time_ms);
diff --git a/webrtc/modules/video_coding/video_coding_robustness_unittest.cc b/webrtc/modules/video_coding/video_coding_robustness_unittest.cc
deleted file mode 100644
index 4c9c830..0000000
--- a/webrtc/modules/video_coding/video_coding_robustness_unittest.cc
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include <memory>
-
-#include "webrtc/modules/video_coding/include/mock/mock_vcm_callbacks.h"
-#include "webrtc/modules/video_coding/include/mock/mock_video_codec_interface.h"
-#include "webrtc/modules/video_coding/include/video_coding.h"
-#include "webrtc/modules/video_coding/test/test_util.h"
-#include "webrtc/system_wrappers/include/clock.h"
-#include "webrtc/test/gmock.h"
-#include "webrtc/test/gtest.h"
-
-namespace webrtc {
-
-using ::testing::_;
-using ::testing::AllOf;
-using ::testing::AnyNumber;
-using ::testing::Args;
-using ::testing::ElementsAre;
-using ::testing::Field;
-using ::testing::NiceMock;
-using ::testing::Pointee;
-using ::testing::Return;
-using ::testing::Sequence;
-
-class VCMRobustnessTest : public ::testing::Test {
- protected:
-  static const size_t kPayloadLen = 10;
-
-  virtual void SetUp() {
-    clock_.reset(new SimulatedClock(0));
-    ASSERT_TRUE(clock_.get() != NULL);
-    vcm_.reset(VideoCodingModule::Create(clock_.get(), &event_factory_));
-    ASSERT_TRUE(vcm_ != NULL);
-    const size_t kMaxNackListSize = 250;
-    const int kMaxPacketAgeToNack = 450;
-    vcm_->SetNackSettings(kMaxNackListSize, kMaxPacketAgeToNack, 0);
-    ASSERT_EQ(0, vcm_->RegisterFrameTypeCallback(&frame_type_callback_));
-    ASSERT_EQ(0, vcm_->RegisterPacketRequestCallback(&request_callback_));
-    VideoCodingModule::Codec(kVideoCodecVP8, &video_codec_);
-    ASSERT_EQ(VCM_OK, vcm_->RegisterReceiveCodec(&video_codec_, 1));
-    vcm_->RegisterExternalDecoder(&decoder_, video_codec_.plType);
-
-    // Since we call Decode, we need to provide a valid receive callback.
-    // However, for the purposes of these tests, we ignore the callbacks.
-    EXPECT_CALL(receive_callback_, OnIncomingPayloadType(_)).Times(AnyNumber());
-    EXPECT_CALL(receive_callback_, OnDecoderImplementationName(_))
-        .Times(AnyNumber());
-    vcm_->RegisterReceiveCallback(&receive_callback_);
-  }
-
-  virtual void TearDown() { vcm_.reset(); }
-
-  void InsertPacket(uint32_t timestamp,
-                    uint16_t seq_no,
-                    bool first,
-                    bool marker_bit,
-                    FrameType frame_type) {
-    const uint8_t payload[kPayloadLen] = {0};
-    WebRtcRTPHeader rtp_info;
-    memset(&rtp_info, 0, sizeof(rtp_info));
-    rtp_info.frameType = frame_type;
-    rtp_info.header.timestamp = timestamp;
-    rtp_info.header.sequenceNumber = seq_no;
-    rtp_info.header.markerBit = marker_bit;
-    rtp_info.header.payloadType = video_codec_.plType;
-    rtp_info.type.Video.codec = kRtpVideoVp8;
-    rtp_info.type.Video.codecHeader.VP8.InitRTPVideoHeaderVP8();
-    rtp_info.type.Video.is_first_packet_in_frame = first;
-
-    ASSERT_EQ(VCM_OK, vcm_->IncomingPacket(payload, kPayloadLen, rtp_info));
-  }
-
-  std::unique_ptr<VideoCodingModule> vcm_;
-  MockVCMReceiveCallback receive_callback_;
-  VideoCodec video_codec_;
-  MockVCMFrameTypeCallback frame_type_callback_;
-  MockPacketRequestCallback request_callback_;
-  NiceMock<MockVideoDecoder> decoder_;
-  NiceMock<MockVideoDecoder> decoderCopy_;
-  std::unique_ptr<SimulatedClock> clock_;
-  NullEventFactory event_factory_;
-};
-
-TEST_F(VCMRobustnessTest, TestHardNack) {
-  Sequence s;
-  EXPECT_CALL(request_callback_, ResendPackets(_, 2))
-      .With(Args<0, 1>(ElementsAre(6, 7)))
-      .Times(1);
-  for (int ts = 0; ts <= 6000; ts += 3000) {
-    EXPECT_CALL(decoder_,
-                Decode(AllOf(Field(&EncodedImage::_timeStamp, ts),
-                             Field(&EncodedImage::_length, kPayloadLen * 3),
-                             Field(&EncodedImage::_completeFrame, true)),
-                       false, _, _, _))
-        .Times(1)
-        .InSequence(s);
-  }
-
-  ASSERT_EQ(VCM_OK, vcm_->SetReceiverRobustnessMode(
-                        VideoCodingModule::kHardNack, kNoErrors));
-
-  InsertPacket(0, 0, true, false, kVideoFrameKey);
-  InsertPacket(0, 1, false, false, kVideoFrameKey);
-  InsertPacket(0, 2, false, true, kVideoFrameKey);
-  clock_->AdvanceTimeMilliseconds(1000 / 30);
-
-  InsertPacket(3000, 3, true, false, kVideoFrameDelta);
-  InsertPacket(3000, 4, false, false, kVideoFrameDelta);
-  InsertPacket(3000, 5, false, true, kVideoFrameDelta);
-  clock_->AdvanceTimeMilliseconds(1000 / 30);
-
-  ASSERT_EQ(VCM_OK, vcm_->Decode(0));
-  ASSERT_EQ(VCM_OK, vcm_->Decode(0));
-  ASSERT_EQ(VCM_FRAME_NOT_READY, vcm_->Decode(0));
-
-  clock_->AdvanceTimeMilliseconds(10);
-
-  vcm_->Process();
-
-  ASSERT_EQ(VCM_FRAME_NOT_READY, vcm_->Decode(0));
-
-  InsertPacket(6000, 8, false, true, kVideoFrameDelta);
-  clock_->AdvanceTimeMilliseconds(10);
-  vcm_->Process();
-
-  ASSERT_EQ(VCM_FRAME_NOT_READY, vcm_->Decode(0));
-
-  InsertPacket(6000, 6, true, false, kVideoFrameDelta);
-  InsertPacket(6000, 7, false, false, kVideoFrameDelta);
-  clock_->AdvanceTimeMilliseconds(10);
-  vcm_->Process();
-
-  ASSERT_EQ(VCM_OK, vcm_->Decode(0));
-}
-
-TEST_F(VCMRobustnessTest, TestHardNackNoneDecoded) {
-  EXPECT_CALL(request_callback_, ResendPackets(_, _)).Times(0);
-  EXPECT_CALL(frame_type_callback_, RequestKeyFrame()).Times(1);
-
-  ASSERT_EQ(VCM_OK, vcm_->SetReceiverRobustnessMode(
-                        VideoCodingModule::kHardNack, kNoErrors));
-
-  InsertPacket(3000, 3, true, false, kVideoFrameDelta);
-  InsertPacket(3000, 4, false, false, kVideoFrameDelta);
-  InsertPacket(3000, 5, false, true, kVideoFrameDelta);
-
-  EXPECT_EQ(VCM_FRAME_NOT_READY, vcm_->Decode(0));
-  vcm_->Process();
-
-  clock_->AdvanceTimeMilliseconds(10);
-
-  EXPECT_EQ(VCM_FRAME_NOT_READY, vcm_->Decode(0));
-  vcm_->Process();
-}
-
-TEST_F(VCMRobustnessTest, TestModeNoneWithErrors) {
-  EXPECT_CALL(decoder_, InitDecode(_, _)).Times(1);
-  EXPECT_CALL(decoder_, Release()).Times(1);
-  Sequence s1;
-  EXPECT_CALL(request_callback_, ResendPackets(_, 1))
-      .With(Args<0, 1>(ElementsAre(4)))
-      .Times(0);
-
-  EXPECT_CALL(decoder_, Copy()).Times(0);
-  EXPECT_CALL(decoderCopy_, Copy()).Times(0);
-
-  // Decode operations
-  EXPECT_CALL(decoder_,
-              Decode(AllOf(Field(&EncodedImage::_timeStamp, 0),
-                           Field(&EncodedImage::_completeFrame, true)),
-                     false, _, _, _))
-      .Times(1)
-      .InSequence(s1);
-  EXPECT_CALL(decoder_,
-              Decode(AllOf(Field(&EncodedImage::_timeStamp, 3000),
-                           Field(&EncodedImage::_completeFrame, false)),
-                     false, _, _, _))
-      .Times(1)
-      .InSequence(s1);
-  EXPECT_CALL(decoder_,
-              Decode(AllOf(Field(&EncodedImage::_timeStamp, 6000),
-                           Field(&EncodedImage::_completeFrame, true)),
-                     false, _, _, _))
-      .Times(1)
-      .InSequence(s1);
-  EXPECT_CALL(decoder_,
-              Decode(AllOf(Field(&EncodedImage::_timeStamp, 9000),
-                           Field(&EncodedImage::_completeFrame, true)),
-                     false, _, _, _))
-      .Times(1)
-      .InSequence(s1);
-
-  ASSERT_EQ(VCM_OK, vcm_->SetReceiverRobustnessMode(VideoCodingModule::kNone,
-                                                    kWithErrors));
-
-  InsertPacket(0, 0, true, false, kVideoFrameKey);
-  InsertPacket(0, 1, false, false, kVideoFrameKey);
-  InsertPacket(0, 2, false, true, kVideoFrameKey);
-  EXPECT_EQ(VCM_OK, vcm_->Decode(33));  // Decode timestamp 0.
-  vcm_->Process();
-
-  clock_->AdvanceTimeMilliseconds(33);
-  InsertPacket(3000, 3, true, false, kVideoFrameDelta);
-  // Packet 4 missing
-  InsertPacket(3000, 5, false, true, kVideoFrameDelta);
-  EXPECT_EQ(VCM_FRAME_NOT_READY, vcm_->Decode(0));
-  vcm_->Process();
-
-  clock_->AdvanceTimeMilliseconds(33);
-  InsertPacket(6000, 6, true, false, kVideoFrameDelta);
-  InsertPacket(6000, 7, false, false, kVideoFrameDelta);
-  InsertPacket(6000, 8, false, true, kVideoFrameDelta);
-  EXPECT_EQ(VCM_OK, vcm_->Decode(0));  // Decode timestamp 3000 incomplete.
-  vcm_->Process();
-
-  clock_->AdvanceTimeMilliseconds(10);
-  EXPECT_EQ(VCM_OK, vcm_->Decode(23));  // Decode timestamp 6000 complete.
-  vcm_->Process();
-
-  clock_->AdvanceTimeMilliseconds(23);
-  InsertPacket(3000, 4, false, false, kVideoFrameDelta);
-
-  InsertPacket(9000, 9, true, false, kVideoFrameDelta);
-  InsertPacket(9000, 10, false, false, kVideoFrameDelta);
-  InsertPacket(9000, 11, false, true, kVideoFrameDelta);
-  EXPECT_EQ(VCM_OK, vcm_->Decode(33));  // Decode timestamp 9000 complete.
-}
-}  // namespace webrtc
diff --git a/webrtc/modules/video_coding/video_receiver.cc b/webrtc/modules/video_coding/video_receiver.cc
index d1992fb..84f5af5 100644
--- a/webrtc/modules/video_coding/video_receiver.cc
+++ b/webrtc/modules/video_coding/video_receiver.cc
@@ -129,8 +129,7 @@
 
 // Enable or disable a video protection method.
 // Note: This API should be deprecated, as it does not offer a distinction
-// between the protection method and decoding with or without errors. If such a
-// behavior is desired, use the following API: SetReceiverRobustnessMode.
+// between the protection method and decoding with or without errors.
 int32_t VideoReceiver::SetVideoProtection(VCMVideoProtection videoProtection,
                                           bool enable) {
   // By default, do not decode with errors.
@@ -412,8 +411,11 @@
 }
 
 int VideoReceiver::SetReceiverRobustnessMode(
-    ReceiverRobustness robustnessMode,
+    VideoCodingModule::ReceiverRobustness robustnessMode,
     VCMDecodeErrorMode decode_error_mode) {
+  RTC_DCHECK(construction_thread_.CalledOnValidThread());
+  // TODO(tommi): This method must only be called when the decoder thread
+  // is not running and we don't need to hold this lock.
   rtc::CritScope cs(&receive_crit_);
   switch (robustnessMode) {
     case VideoCodingModule::kNone:
@@ -423,27 +425,9 @@
       // Always wait for retransmissions (except when decoding with errors).
       _receiver.SetNackMode(kNack, -1, -1);
       break;
-    case VideoCodingModule::kSoftNack:
-#if 1
-      assert(false);  // TODO(hlundin): Not completed.
-      return VCM_NOT_IMPLEMENTED;
-#else
-      // Enable hybrid NACK/FEC. Always wait for retransmissions and don't add
-      // extra delay when RTT is above kLowRttNackMs.
-      _receiver.SetNackMode(kNack, media_optimization::kLowRttNackMs, -1);
-      break;
-#endif
-    case VideoCodingModule::kReferenceSelection:
-#if 1
-      assert(false);  // TODO(hlundin): Not completed.
-      return VCM_NOT_IMPLEMENTED;
-#else
-      if (decode_error_mode == kNoErrors) {
-        return VCM_PARAMETER_ERROR;
-      }
-      _receiver.SetNackMode(kNoNack, -1, -1);
-      break;
-#endif
+    default:
+      RTC_NOTREACHED();
+      return VCM_PARAMETER_ERROR;
   }
   _receiver.SetDecodeErrorMode(decode_error_mode);
   return VCM_OK;