Revert "Removed VideoDecoderFactory::LegacyCreateVideoDecoder and VideoReceiveStream::Config::stream_id."

This reverts commit 4ba1044bae750ab8ee47b359c21f672386b7c3cd.

Reason for revert: Downstream projects require some updates.

Original change's description:
> Removed VideoDecoderFactory::LegacyCreateVideoDecoder and VideoReceiveStream::Config::stream_id.
> 
> Bug: webrtc:9106
> Change-Id: I7fa84095732c33d136a9354ae4f09266cffcf877
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180020
> Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
> Commit-Queue: Philip Eliasson <philipel@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#31793}

TBR=henrika@webrtc.org,magjed@webrtc.org,philipel@webrtc.org,mflodman@webrtc.org

Change-Id: I8c980266334cc9871b9076713da3c4df8f73f8ce
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:9106
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180344
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31794}
diff --git a/api/video_codecs/BUILD.gn b/api/video_codecs/BUILD.gn
index 33ed3e5..597478b 100644
--- a/api/video_codecs/BUILD.gn
+++ b/api/video_codecs/BUILD.gn
@@ -21,6 +21,7 @@
     "video_codec.h",
     "video_decoder.cc",
     "video_decoder.h",
+    "video_decoder_factory.cc",
     "video_decoder_factory.h",
     "video_encoder.cc",
     "video_encoder.h",
diff --git a/api/video_codecs/video_decoder_factory.cc b/api/video_codecs/video_decoder_factory.cc
new file mode 100644
index 0000000..511a3c7
--- /dev/null
+++ b/api/video_codecs/video_decoder_factory.cc
@@ -0,0 +1,23 @@
+/*
+ *  Copyright (c) 2018 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 "api/video_codecs/video_decoder_factory.h"
+
+#include "api/video_codecs/video_decoder.h"
+
+namespace webrtc {
+
+std::unique_ptr<VideoDecoder> VideoDecoderFactory::LegacyCreateVideoDecoder(
+    const SdpVideoFormat& format,
+    const std::string& receive_stream_id) {
+  return CreateVideoDecoder(format);
+}
+
+}  // namespace webrtc
diff --git a/api/video_codecs/video_decoder_factory.h b/api/video_codecs/video_decoder_factory.h
index 4809bee..e4d83c2 100644
--- a/api/video_codecs/video_decoder_factory.h
+++ b/api/video_codecs/video_decoder_factory.h
@@ -34,6 +34,12 @@
   virtual std::unique_ptr<VideoDecoder> CreateVideoDecoder(
       const SdpVideoFormat& format) = 0;
 
+  // Note: Do not call or override this method! This method is a legacy
+  // workaround and is scheduled for removal without notice.
+  virtual std::unique_ptr<VideoDecoder> LegacyCreateVideoDecoder(
+      const SdpVideoFormat& format,
+      const std::string& receive_stream_id);
+
   virtual ~VideoDecoderFactory() {}
 };
 
diff --git a/call/video_receive_stream.h b/call/video_receive_stream.h
index 1e063de..388c28b 100644
--- a/call/video_receive_stream.h
+++ b/call/video_receive_stream.h
@@ -252,6 +252,10 @@
     // used for streaming instead of a real-time call.
     int target_delay_ms = 0;
 
+    // TODO(nisse): Used with VideoDecoderFactory::LegacyCreateVideoDecoder.
+    // Delete when that method is retired.
+    std::string stream_id;
+
     // An optional custom frame decryptor that allows the entire frame to be
     // decrypted in whatever way the caller choses. This is not required by
     // default.
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index 01eddbd..26fa335 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -2904,6 +2904,7 @@
   }
   webrtc::VideoReceiveStream::Config config = config_.Copy();
   config.rtp.protected_by_flexfec = (flexfec_stream_ != nullptr);
+  config.stream_id = stream_params_.id;
   stream_ = call_->CreateVideoReceiveStream(std::move(config));
   if (base_minimum_playout_delay_ms) {
     stream_->SetBaseMinimumPlayoutDelayMs(
diff --git a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc
index bc36a65..196f900 100644
--- a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc
+++ b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc
@@ -258,5 +258,16 @@
       analyzer_);
 }
 
+std::unique_ptr<VideoDecoder>
+QualityAnalyzingVideoDecoderFactory::LegacyCreateVideoDecoder(
+    const SdpVideoFormat& format,
+    const std::string& receive_stream_id) {
+  std::unique_ptr<VideoDecoder> decoder =
+      delegate_->LegacyCreateVideoDecoder(format, receive_stream_id);
+  return std::make_unique<QualityAnalyzingVideoDecoder>(
+      id_generator_->GetNextId(), peer_name_, std::move(decoder), extractor_,
+      analyzer_);
+}
+
 }  // namespace webrtc_pc_e2e
 }  // namespace webrtc
diff --git a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h
index 8771c92..2381f59 100644
--- a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h
+++ b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h
@@ -143,6 +143,9 @@
   std::vector<SdpVideoFormat> GetSupportedFormats() const override;
   std::unique_ptr<VideoDecoder> CreateVideoDecoder(
       const SdpVideoFormat& format) override;
+  std::unique_ptr<VideoDecoder> LegacyCreateVideoDecoder(
+      const SdpVideoFormat& format,
+      const std::string& receive_stream_id) override;
 
  private:
   const std::string peer_name_;
diff --git a/video/video_receive_stream.cc b/video/video_receive_stream.cc
index effb81b..b4c6ddf 100644
--- a/video/video_receive_stream.cc
+++ b/video/video_receive_stream.cc
@@ -338,7 +338,8 @@
 
   for (const Decoder& decoder : config_.decoders) {
     std::unique_ptr<VideoDecoder> video_decoder =
-        decoder.decoder_factory->CreateVideoDecoder(decoder.video_format);
+        decoder.decoder_factory->LegacyCreateVideoDecoder(decoder.video_format,
+                                                          config_.stream_id);
     // If we still have no valid decoder, we have to create a "Null" decoder
     // that ignores all calls. The reason we can get into this state is that the
     // old decoder factory interface doesn't have a way to query supported
diff --git a/video/video_receive_stream2.cc b/video/video_receive_stream2.cc
index 10ae4a3..9413b72 100644
--- a/video/video_receive_stream2.cc
+++ b/video/video_receive_stream2.cc
@@ -314,7 +314,8 @@
 
   for (const Decoder& decoder : config_.decoders) {
     std::unique_ptr<VideoDecoder> video_decoder =
-        decoder.decoder_factory->CreateVideoDecoder(decoder.video_format);
+        decoder.decoder_factory->LegacyCreateVideoDecoder(decoder.video_format,
+                                                          config_.stream_id);
     // If we still have no valid decoder, we have to create a "Null" decoder
     // that ignores all calls. The reason we can get into this state is that the
     // old decoder factory interface doesn't have a way to query supported