From 49c293f03d8f593aa3aca282577fcb14daa63207 Mon Sep 17 00:00:00 2001 From: Philip Eliasson Date: Mon, 27 Jul 2020 13:54:46 +0000 Subject: [PATCH] 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 > Commit-Queue: Philip Eliasson > 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 Commit-Queue: Philip Eliasson Cr-Commit-Position: refs/heads/master@{#31794} --- api/video_codecs/BUILD.gn | 1 + api/video_codecs/video_decoder_factory.cc | 23 +++++++++++++++++++ api/video_codecs/video_decoder_factory.h | 6 +++++ call/video_receive_stream.h | 4 ++++ media/engine/webrtc_video_engine.cc | 1 + .../video/quality_analyzing_video_decoder.cc | 11 +++++++++ .../video/quality_analyzing_video_decoder.h | 3 +++ video/video_receive_stream.cc | 3 ++- video/video_receive_stream2.cc | 3 ++- 9 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 api/video_codecs/video_decoder_factory.cc diff --git a/api/video_codecs/BUILD.gn b/api/video_codecs/BUILD.gn index 33ed3e58f5..597478ba0a 100644 --- a/api/video_codecs/BUILD.gn +++ b/api/video_codecs/BUILD.gn @@ -21,6 +21,7 @@ rtc_library("video_codecs_api") { "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 0000000000..511a3c7e92 --- /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 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 4809bee40f..e4d83c2465 100644 --- a/api/video_codecs/video_decoder_factory.h +++ b/api/video_codecs/video_decoder_factory.h @@ -34,6 +34,12 @@ class RTC_EXPORT VideoDecoderFactory { virtual std::unique_ptr 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 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 1e063de3ae..388c28be24 100644 --- a/call/video_receive_stream.h +++ b/call/video_receive_stream.h @@ -252,6 +252,10 @@ class VideoReceiveStream { // 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 01eddbd8ac..26fa335cf6 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc @@ -2904,6 +2904,7 @@ void WebRtcVideoChannel::WebRtcVideoReceiveStream::RecreateWebRtcVideoStream() { } 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 bc36a654cb..196f900bd3 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 @@ QualityAnalyzingVideoDecoderFactory::CreateVideoDecoder( analyzer_); } +std::unique_ptr +QualityAnalyzingVideoDecoderFactory::LegacyCreateVideoDecoder( + const SdpVideoFormat& format, + const std::string& receive_stream_id) { + std::unique_ptr decoder = + delegate_->LegacyCreateVideoDecoder(format, receive_stream_id); + return std::make_unique( + 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 8771c92e62..2381f593b9 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 @@ class QualityAnalyzingVideoDecoderFactory : public VideoDecoderFactory { std::vector GetSupportedFormats() const override; std::unique_ptr CreateVideoDecoder( const SdpVideoFormat& format) override; + std::unique_ptr 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 effb81bcd4..b4c6ddf10f 100644 --- a/video/video_receive_stream.cc +++ b/video/video_receive_stream.cc @@ -338,7 +338,8 @@ void VideoReceiveStream::Start() { for (const Decoder& decoder : config_.decoders) { std::unique_ptr 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 10ae4a3389..9413b72354 100644 --- a/video/video_receive_stream2.cc +++ b/video/video_receive_stream2.cc @@ -314,7 +314,8 @@ void VideoReceiveStream2::Start() { for (const Decoder& decoder : config_.decoders) { std::unique_ptr 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