Revert "Moved VideoReceiveStream::Decoder::decoder_factory to VideoReceiveStream::Config::decoder_factory."
This reverts commit acb9d8365a5f9eb1e2a9e9902690d62dab1e5759.
Reason for revert: Break downstream stuff.
Original change's description:
> Moved VideoReceiveStream::Decoder::decoder_factory to VideoReceiveStream::Config::decoder_factory.
>
> Bug: webrtc:9106
> Change-Id: I85712f3ab6a734d3fad7819491d3b8e3388b47e7
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180342
> Reviewed-by: Niels Moller <nisse@webrtc.org>
> Reviewed-by: Magnus Flodman <mflodman@webrtc.org>
> Commit-Queue: Philip Eliasson <philipel@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#31834}
TBR=nisse@webrtc.org,philipel@webrtc.org,mflodman@webrtc.org
Change-Id: I6cfdb85a154a78135839f84edf5f69673d5ab715
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:9106
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180807
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31835}
diff --git a/call/bitrate_estimator_tests.cc b/call/bitrate_estimator_tests.cc
index 4634f6e..cd052dc 100644
--- a/call/bitrate_estimator_tests.cc
+++ b/call/bitrate_estimator_tests.cc
@@ -191,7 +191,7 @@
send_stream_->Start();
VideoReceiveStream::Decoder decoder;
- test_->receive_config_.decoder_factory = &decoder_factory_;
+ decoder.decoder_factory = &decoder_factory_;
decoder.payload_type = test_->GetVideoSendConfig()->rtp.payload_type;
decoder.video_format =
SdpVideoFormat(test_->GetVideoSendConfig()->rtp.payload_name);
diff --git a/call/video_receive_stream.h b/call/video_receive_stream.h
index 91c6371..388c28b 100644
--- a/call/video_receive_stream.h
+++ b/call/video_receive_stream.h
@@ -70,6 +70,10 @@
~Decoder();
std::string ToString() const;
+ // Ownership stays with WebrtcVideoEngine (delegated from PeerConnection).
+ // TODO(nisse): Move one level out, to VideoReceiveStream::Config, and later
+ // to the configuration of VideoStreamDecoder.
+ VideoDecoderFactory* decoder_factory = nullptr;
SdpVideoFormat video_format;
// Received RTP packets with this payload type will be sent to this decoder
@@ -169,9 +173,6 @@
// Decoders for every payload that we can receive.
std::vector<Decoder> decoders;
- // Ownership stays with WebrtcVideoEngine (delegated from PeerConnection).
- VideoDecoderFactory* decoder_factory = nullptr;
-
// Receive-stream specific RTP settings.
struct Rtp {
Rtp();
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index 0f08f87..26fa335 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -2769,12 +2769,12 @@
config_.decoders.clear();
config_.rtp.rtx_associated_payload_types.clear();
config_.rtp.raw_payload_types.clear();
- config_.decoder_factory = decoder_factory_;
for (const auto& recv_codec : recv_codecs) {
webrtc::SdpVideoFormat video_format(recv_codec.codec.name,
recv_codec.codec.params);
webrtc::VideoReceiveStream::Decoder decoder;
+ decoder.decoder_factory = decoder_factory_;
decoder.video_format = video_format;
decoder.payload_type = recv_codec.codec.id;
decoder.video_format =
diff --git a/rtc_tools/video_replay.cc b/rtc_tools/video_replay.cc
index 79fad70..90989db 100644
--- a/rtc_tools/video_replay.cc
+++ b/rtc_tools/video_replay.cc
@@ -335,6 +335,7 @@
for (auto& decoder : receive_config.decoders) {
decoder = test::CreateMatchingDecoder(decoder.payload_type,
decoder.video_format.name);
+ decoder.decoder_factory = stream_state->decoder_factory.get();
}
// Create a window for this config.
std::stringstream window_title;
@@ -343,7 +344,6 @@
test::VideoRenderer::Create(window_title.str().c_str(), 640, 480));
// Create a receive stream for this config.
receive_config.renderer = stream_state->sinks.back().get();
- receive_config.decoder_factory = stream_state->decoder_factory.get();
stream_state->receive_streams.emplace_back(
call->CreateVideoReceiveStream(std::move(receive_config)));
}
@@ -402,7 +402,7 @@
DecoderBitstreamFilename().c_str());
});
}
- receive_config.decoder_factory = stream_state->decoder_factory.get();
+ decoder.decoder_factory = stream_state->decoder_factory.get();
receive_config.decoders.push_back(decoder);
stream_state->receive_streams.emplace_back(
diff --git a/test/call_test.cc b/test/call_test.cc
index dd7c576..8d63b64 100644
--- a/test/call_test.cc
+++ b/test/call_test.cc
@@ -388,9 +388,9 @@
decoder.video_format = SdpVideoFormat(video_send_config.rtp.payload_name);
// Force fake decoders on non-selected simulcast streams.
if (!decode_sub_stream || i == *decode_sub_stream) {
- video_recv_config.decoder_factory = decoder_factory;
+ decoder.decoder_factory = decoder_factory;
} else {
- video_recv_config.decoder_factory = &fake_decoder_factory_;
+ decoder.decoder_factory = &fake_decoder_factory_;
}
video_recv_config.decoders.push_back(decoder);
receive_configs->emplace_back(std::move(video_recv_config));
diff --git a/test/fuzzers/utils/rtp_replayer.cc b/test/fuzzers/utils/rtp_replayer.cc
index a664adb..b7d51e3 100644
--- a/test/fuzzers/utils/rtp_replayer.cc
+++ b/test/fuzzers/utils/rtp_replayer.cc
@@ -113,6 +113,7 @@
for (auto& decoder : receive_config.decoders) {
decoder = test::CreateMatchingDecoder(decoder.payload_type,
decoder.video_format.name);
+ decoder.decoder_factory = stream_state->decoder_factory.get();
}
// Create the window to display the rendered video.
@@ -120,7 +121,6 @@
test::VideoRenderer::Create("Fuzzing WebRTC Video Config", 640, 480));
// Create a receive stream for this config.
receive_config.renderer = stream_state->sinks.back().get();
- receive_config.decoder_factory = stream_state->decoder_factory.get();
stream_state->receive_streams.emplace_back(
call->CreateVideoReceiveStream(std::move(receive_config)));
}
diff --git a/test/scenario/video_stream.cc b/test/scenario/video_stream.cc
index 09395f3..cad466e 100644
--- a/test/scenario/video_stream.cc
+++ b/test/scenario/video_stream.cc
@@ -323,7 +323,6 @@
VideoReceiveStream::Config CreateVideoReceiveStreamConfig(
VideoStreamConfig config,
Transport* feedback_transport,
- VideoDecoderFactory* decoder_factory,
VideoReceiveStream::Decoder decoder,
rtc::VideoSinkInterface<VideoFrame>* renderer,
uint32_t local_ssrc,
@@ -339,7 +338,6 @@
recv.rtp.nack.rtp_history_ms = config.stream.nack_history_time.ms();
recv.rtp.protected_by_flexfec = config.stream.use_flexfec;
recv.rtp.remote_ssrc = ssrc;
- recv.decoder_factory = decoder_factory;
recv.decoders.push_back(decoder);
recv.renderer = renderer;
if (config.stream.use_rtx) {
@@ -551,6 +549,7 @@
VideoReceiveStream::Decoder decoder =
CreateMatchingDecoder(CodecTypeToPayloadType(config.encoder.codec),
CodecTypeToPayloadString(config.encoder.codec));
+ decoder.decoder_factory = decoder_factory_.get();
size_t num_streams = 1;
if (config.encoder.codec == VideoStreamConfig::Encoder::Codec::kVideoCodecVP8)
num_streams = config.encoder.layers.spatial;
@@ -562,7 +561,7 @@
renderer = render_taps_.back().get();
}
auto recv_config = CreateVideoReceiveStreamConfig(
- config, feedback_transport, decoder_factory_.get(), decoder, renderer,
+ config, feedback_transport, decoder, renderer,
receiver_->GetNextVideoLocalSsrc(), send_stream->ssrcs_[i],
send_stream->rtx_ssrcs_[i]);
if (config.stream.use_flexfec) {
diff --git a/video/end_to_end_tests/codec_tests.cc b/video/end_to_end_tests/codec_tests.cc
index e4eabcf..d10e08d 100644
--- a/video/end_to_end_tests/codec_tests.cc
+++ b/video/end_to_end_tests/codec_tests.cc
@@ -84,7 +84,7 @@
send_config->rtp.payload_type;
(*receive_configs)[0].decoders[0].video_format =
SdpVideoFormat(send_config->rtp.payload_name);
- (*receive_configs)[0].decoder_factory = decoder_factory_;
+ (*receive_configs)[0].decoders[0].decoder_factory = decoder_factory_;
}
void OnFrame(const VideoFrame& video_frame) override {
diff --git a/video/end_to_end_tests/fec_tests.cc b/video/end_to_end_tests/fec_tests.cc
index 0d4ddac..c9e0226 100644
--- a/video/end_to_end_tests/fec_tests.cc
+++ b/video/end_to_end_tests/fec_tests.cc
@@ -120,7 +120,7 @@
encoder_config->codec_type = kVideoCodecVP8;
VideoReceiveStream::Decoder decoder =
test::CreateMatchingDecoder(*send_config);
- (*receive_configs)[0].decoder_factory = &decoder_factory_;
+ decoder.decoder_factory = &decoder_factory_;
(*receive_configs)[0].decoders.clear();
(*receive_configs)[0].decoders.push_back(decoder);
@@ -487,7 +487,7 @@
send_config->rtp.payload_type;
(*receive_configs)[0].decoders[0].video_format =
SdpVideoFormat(send_config->rtp.payload_name);
- (*receive_configs)[0].decoder_factory = &decoder_factory_;
+ (*receive_configs)[0].decoders[0].decoder_factory = &decoder_factory_;
}
void PerformTest() override {
diff --git a/video/end_to_end_tests/frame_encryption_tests.cc b/video/end_to_end_tests/frame_encryption_tests.cc
index df54337..44ac3ec 100644
--- a/video/end_to_end_tests/frame_encryption_tests.cc
+++ b/video/end_to_end_tests/frame_encryption_tests.cc
@@ -46,8 +46,8 @@
encoder_config->codec_type = kVideoCodecVP8;
VideoReceiveStream::Decoder decoder =
test::CreateMatchingDecoder(*send_config);
+ decoder.decoder_factory = &decoder_factory_;
for (auto& recv_config : *receive_configs) {
- recv_config.decoder_factory = &decoder_factory_;
recv_config.decoders.clear();
recv_config.decoders.push_back(decoder);
recv_config.renderer = this;
diff --git a/video/end_to_end_tests/multi_codec_receive_tests.cc b/video/end_to_end_tests/multi_codec_receive_tests.cc
index e529ae4..dc298a5 100644
--- a/video/end_to_end_tests/multi_codec_receive_tests.cc
+++ b/video/end_to_end_tests/multi_codec_receive_tests.cc
@@ -182,12 +182,12 @@
VideoDecoderFactory* decoder_factory) {
video_receive_configs_[0].decoders.clear();
// Placing the payload names in a std::set retains the unique names only.
- video_receive_configs_[0].decoder_factory = decoder_factory;
std::set<std::string> unique_payload_names;
for (const auto& config : configs)
if (unique_payload_names.insert(config.payload_name).second) {
VideoReceiveStream::Decoder decoder = test::CreateMatchingDecoder(
PayloadNameToPayloadType(config.payload_name), config.payload_name);
+ decoder.decoder_factory = decoder_factory;
video_receive_configs_[0].decoders.push_back(decoder);
}
diff --git a/video/end_to_end_tests/multi_stream_tester.cc b/video/end_to_end_tests/multi_stream_tester.cc
index 20e128c..c3d41c3 100644
--- a/video/end_to_end_tests/multi_stream_tester.cc
+++ b/video/end_to_end_tests/multi_stream_tester.cc
@@ -102,9 +102,9 @@
VideoReceiveStream::Config receive_config(receiver_transport.get());
receive_config.rtp.remote_ssrc = ssrc;
receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalVideoSsrc;
- receive_config.decoder_factory = &decoder_factory;
VideoReceiveStream::Decoder decoder =
test::CreateMatchingDecoder(send_config);
+ decoder.decoder_factory = &decoder_factory;
receive_config.decoders.push_back(decoder);
UpdateReceiveConfig(i, &receive_config);
diff --git a/video/video_receive_stream.cc b/video/video_receive_stream.cc
index 1aa2f4c..54b313c 100644
--- a/video/video_receive_stream.cc
+++ b/video/video_receive_stream.cc
@@ -238,9 +238,9 @@
network_sequence_checker_.Detach();
RTC_DCHECK(!config_.decoders.empty());
- RTC_CHECK(config_.decoder_factory);
std::set<int> decoder_payload_types;
for (const Decoder& decoder : config_.decoders) {
+ RTC_CHECK(decoder.decoder_factory);
RTC_CHECK(decoder_payload_types.find(decoder.payload_type) ==
decoder_payload_types.end())
<< "Duplicate payload type (" << decoder.payload_type
@@ -336,7 +336,7 @@
for (const Decoder& decoder : config_.decoders) {
std::unique_ptr<VideoDecoder> video_decoder =
- config_.decoder_factory->LegacyCreateVideoDecoder(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
diff --git a/video/video_receive_stream2.cc b/video/video_receive_stream2.cc
index 0cb3c47..e7961e2 100644
--- a/video/video_receive_stream2.cc
+++ b/video/video_receive_stream2.cc
@@ -235,9 +235,9 @@
module_process_sequence_checker_.Detach();
RTC_DCHECK(!config_.decoders.empty());
- RTC_CHECK(config_.decoder_factory);
std::set<int> decoder_payload_types;
for (const Decoder& decoder : config_.decoders) {
+ RTC_CHECK(decoder.decoder_factory);
RTC_CHECK(decoder_payload_types.find(decoder.payload_type) ==
decoder_payload_types.end())
<< "Duplicate payload type (" << decoder.payload_type
@@ -312,7 +312,7 @@
for (const Decoder& decoder : config_.decoders) {
std::unique_ptr<VideoDecoder> video_decoder =
- config_.decoder_factory->LegacyCreateVideoDecoder(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
diff --git a/video/video_receive_stream2_unittest.cc b/video/video_receive_stream2_unittest.cc
index c153cbb..3e8d971 100644
--- a/video/video_receive_stream2_unittest.cc
+++ b/video/video_receive_stream2_unittest.cc
@@ -105,12 +105,12 @@
config_.rtp.remote_ssrc = 1111;
config_.rtp.local_ssrc = 2222;
config_.renderer = &fake_renderer_;
- config_.decoder_factory = &h264_decoder_factory_;
VideoReceiveStream::Decoder h264_decoder;
h264_decoder.payload_type = 99;
h264_decoder.video_format = SdpVideoFormat("H264");
h264_decoder.video_format.parameters.insert(
{"sprop-parameter-sets", "Z0IACpZTBYmI,aMljiA=="});
+ h264_decoder.decoder_factory = &h264_decoder_factory_;
config_.decoders.push_back(h264_decoder);
clock_ = Clock::GetRealTimeClock();
@@ -244,10 +244,10 @@
config_.rtp.remote_ssrc = 1111;
config_.rtp.local_ssrc = 2222;
config_.renderer = &fake_renderer_;
- config_.decoder_factory = &fake_decoder_factory_;
VideoReceiveStream::Decoder fake_decoder;
fake_decoder.payload_type = 99;
fake_decoder.video_format = SdpVideoFormat("VP8");
+ fake_decoder.decoder_factory = &fake_decoder_factory_;
config_.decoders.push_back(fake_decoder);
clock_ = Clock::GetRealTimeClock();
ReCreateReceiveStream(VideoReceiveStream::RecordingState());
@@ -467,10 +467,10 @@
config.rtp.remote_ssrc = 1111;
config.rtp.local_ssrc = 2222;
config.renderer = renderer;
- config.decoder_factory = decoder_factory;
VideoReceiveStream::Decoder fake_decoder;
fake_decoder.payload_type = 99;
fake_decoder.video_format = SdpVideoFormat("VP8");
+ fake_decoder.decoder_factory = decoder_factory;
config.decoders.push_back(fake_decoder);
return config;
}
diff --git a/video/video_receive_stream_unittest.cc b/video/video_receive_stream_unittest.cc
index b1e1c55..611cffc 100644
--- a/video/video_receive_stream_unittest.cc
+++ b/video/video_receive_stream_unittest.cc
@@ -104,12 +104,12 @@
config_.rtp.remote_ssrc = 1111;
config_.rtp.local_ssrc = 2222;
config_.renderer = &fake_renderer_;
- config_.decoder_factory = &h264_decoder_factory_;
VideoReceiveStream::Decoder h264_decoder;
h264_decoder.payload_type = 99;
h264_decoder.video_format = SdpVideoFormat("H264");
h264_decoder.video_format.parameters.insert(
{"sprop-parameter-sets", "Z0IACpZTBYmI,aMljiA=="});
+ h264_decoder.decoder_factory = &h264_decoder_factory_;
config_.decoders.push_back(h264_decoder);
clock_ = Clock::GetRealTimeClock();
@@ -241,10 +241,10 @@
config_.rtp.remote_ssrc = 1111;
config_.rtp.local_ssrc = 2222;
config_.renderer = &fake_renderer_;
- config_.decoder_factory = &fake_decoder_factory_;
VideoReceiveStream::Decoder fake_decoder;
fake_decoder.payload_type = 99;
fake_decoder.video_format = SdpVideoFormat("VP8");
+ fake_decoder.decoder_factory = &fake_decoder_factory_;
config_.decoders.push_back(fake_decoder);
clock_ = Clock::GetRealTimeClock();
ReCreateReceiveStream(VideoReceiveStream::RecordingState());
@@ -463,10 +463,10 @@
config.rtp.remote_ssrc = 1111;
config.rtp.local_ssrc = 2222;
config.renderer = renderer;
- config.decoder_factory = decoder_factory;
VideoReceiveStream::Decoder fake_decoder;
fake_decoder.payload_type = 99;
fake_decoder.video_format = SdpVideoFormat("VP8");
+ fake_decoder.decoder_factory = decoder_factory;
config.decoders.push_back(fake_decoder);
return config;
}