Removes caching SimulcastEncoderAdapter::GetEncoderInfo()

There are edge cases where the caching of encoder info will cause
issues. For instance if a sub-encoder fails en Encode call and falls
back to some other implementation, or if the fps targets shift due to
SetRates() triggering new layers to be enabled.

This CL forces a complete rebuild on every call to GetEncoderInfo().

It also adds new logging of when the info changes, as debugging issues
can be very time consuming if we can't tell that happened.

Bug: webrtc:11000
Change-Id: I7ec7962a589ccba0e188e60a11f851c9de874fab
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/160960
Commit-Queue: Erik Språng <sprang@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29938}
This commit is contained in:
Erik Språng
2019-11-27 17:26:58 +01:00
committed by Commit Bot
parent 840394c6eb
commit 7968530418
6 changed files with 198 additions and 58 deletions

View File

@ -47,7 +47,7 @@ class RTC_EXPORT SimulcastEncoderAdapter : public VideoEncoder {
SimulcastEncoderAdapter(VideoEncoderFactory* primary_factory,
VideoEncoderFactory* fallback_factory,
const SdpVideoFormat& format);
virtual ~SimulcastEncoderAdapter();
~SimulcastEncoderAdapter() override;
// Implements VideoEncoder.
void SetFecControllerOverride(
@ -119,7 +119,6 @@ class RTC_EXPORT SimulcastEncoderAdapter : public VideoEncoder {
VideoCodec codec_;
std::vector<StreamInfo> streaminfos_;
EncodedImageCallback* encoded_complete_callback_;
EncoderInfo encoder_info_;
// Used for checking the single-threaded access of the encoder interface.
SequenceChecker encoder_queue_;