Reland "Moved VideoReceiveStream::Decoder::decoder_factory to VideoReceiveStream::Config::decoder_factory."
This reverts commit a4f23ad0ce4382e3a11bc6a8c1f9f6183e722fd8.
Reason for revert: Downstream fix landed.
TBR=mflodman@webrtc.org
Original change's description:
> 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}
TBR=nisse@webrtc.org,philipel@webrtc.org,mflodman@webrtc.org
# Not skipping CQ checks because this is a reland.
Bug: webrtc:9106
Change-Id: I03b3e68532107bec37bcc6e47a5489c84fe91ef9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180808
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31866}
diff --git a/call/bitrate_estimator_tests.cc b/call/bitrate_estimator_tests.cc
index cd052dc..4634f6e 100644
--- a/call/bitrate_estimator_tests.cc
+++ b/call/bitrate_estimator_tests.cc
@@ -191,7 +191,7 @@
send_stream_->Start();
VideoReceiveStream::Decoder decoder;
- decoder.decoder_factory = &decoder_factory_;
+ test_->receive_config_.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 388c28b..91c6371 100644
--- a/call/video_receive_stream.h
+++ b/call/video_receive_stream.h
@@ -70,10 +70,6 @@
~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
@@ -173,6 +169,9 @@
// 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 a075f7b..c9d98fe 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -2771,12 +2771,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 90989db..79fad70 100644
--- a/rtc_tools/video_replay.cc
+++ b/rtc_tools/video_replay.cc
@@ -335,7 +335,6 @@
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;
@@ -344,6 +343,7 @@
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());
});
}
- decoder.decoder_factory = stream_state->decoder_factory.get();
+ receive_config.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 8d63b64..dd7c576 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) {
- decoder.decoder_factory = decoder_factory;
+ video_recv_config.decoder_factory = decoder_factory;
} else {
- decoder.decoder_factory = &fake_decoder_factory_;
+ video_recv_config.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 b7d51e3..a664adb 100644
--- a/test/fuzzers/utils/rtp_replayer.cc
+++ b/test/fuzzers/utils/rtp_replayer.cc
@@ -113,7 +113,6 @@
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.
@@ -121,6 +120,7 @@
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 cad466e..09395f3 100644
--- a/test/scenario/video_stream.cc
+++ b/test/scenario/video_stream.cc
@@ -323,6 +323,7 @@
VideoReceiveStream::Config CreateVideoReceiveStreamConfig(
VideoStreamConfig config,
Transport* feedback_transport,
+ VideoDecoderFactory* decoder_factory,
VideoReceiveStream::Decoder decoder,
rtc::VideoSinkInterface<VideoFrame>* renderer,
uint32_t local_ssrc,
@@ -338,6 +339,7 @@
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) {
@@ -549,7 +551,6 @@
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;
@@ -561,7 +562,7 @@
renderer = render_taps_.back().get();
}
auto recv_config = CreateVideoReceiveStreamConfig(
- config, feedback_transport, decoder, renderer,
+ config, feedback_transport, decoder_factory_.get(), 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 d10e08d..e4eabcf 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].decoders[0].decoder_factory = decoder_factory_;
+ (*receive_configs)[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 c9e0226..0d4ddac 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);
- decoder.decoder_factory = &decoder_factory_;
+ (*receive_configs)[0].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].decoders[0].decoder_factory = &decoder_factory_;
+ (*receive_configs)[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 44ac3ec..df54337 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 dc298a5..e529ae4 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 c3d41c3..20e128c 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 54b313c..1aa2f4c 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 =
- decoder.decoder_factory->LegacyCreateVideoDecoder(decoder.video_format,
+ config_.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 e7961e2..0cb3c47 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 =
- decoder.decoder_factory->LegacyCreateVideoDecoder(decoder.video_format,
+ config_.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 3e8d971..c153cbb 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 611cffc..b1e1c55 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;
}