Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(775)

Unified Diff: webrtc/video/encoder_state_feedback.cc

Issue 1706803002: Simplify EncoderStateFeedback. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: remove unused headers Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/video/encoder_state_feedback.h ('k') | webrtc/video/encoder_state_feedback_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/encoder_state_feedback.cc
diff --git a/webrtc/video/encoder_state_feedback.cc b/webrtc/video/encoder_state_feedback.cc
index f0b03a13fef4a15f3206d74bd17cd62b7d5ced27..0240e487a6a7090d0c8919683948322f5451932a 100644
--- a/webrtc/video/encoder_state_feedback.cc
+++ b/webrtc/video/encoder_state_feedback.cc
@@ -10,113 +10,75 @@
#include "webrtc/video/encoder_state_feedback.h"
-#include <assert.h>
-
#include "webrtc/base/checks.h"
-#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "webrtc/video/vie_encoder.h"
namespace webrtc {
-// Helper class registered at the RTP module relaying callbacks to
-// EncoderStatFeedback.
-class EncoderStateFeedbackObserver : public RtcpIntraFrameObserver {
- public:
- explicit EncoderStateFeedbackObserver(EncoderStateFeedback* owner)
- : owner_(owner) {}
- ~EncoderStateFeedbackObserver() {}
-
- // Implements RtcpIntraFrameObserver.
- virtual void OnReceivedIntraFrameRequest(uint32_t ssrc) {
- owner_->OnReceivedIntraFrameRequest(ssrc);
- }
- virtual void OnReceivedSLI(uint32_t ssrc, uint8_t picture_id) {
- owner_->OnReceivedSLI(ssrc, picture_id);
- }
- virtual void OnReceivedRPSI(uint32_t ssrc, uint64_t picture_id) {
- owner_->OnReceivedRPSI(ssrc, picture_id);
- }
-
- virtual void OnLocalSsrcChanged(uint32_t old_ssrc, uint32_t new_ssrc) {
- owner_->OnLocalSsrcChanged(old_ssrc, new_ssrc);
- }
-
- private:
- EncoderStateFeedback* owner_;
-};
-
-EncoderStateFeedback::EncoderStateFeedback()
- : observer_(new EncoderStateFeedbackObserver(this)) {}
+EncoderStateFeedback::EncoderStateFeedback() : vie_encoder_(nullptr) {}
-EncoderStateFeedback::~EncoderStateFeedback() {
- assert(encoders_.empty());
-}
-
-void EncoderStateFeedback::AddEncoder(const std::vector<uint32_t>& ssrcs,
- ViEEncoder* encoder) {
+void EncoderStateFeedback::Init(const std::vector<uint32_t>& ssrcs,
+ ViEEncoder* encoder) {
RTC_DCHECK(!ssrcs.empty());
rtc::CritScope lock(&crit_);
- for (uint32_t ssrc : ssrcs) {
- RTC_DCHECK(encoders_.find(ssrc) == encoders_.end());
- encoders_[ssrc] = encoder;
- }
+ ssrcs_ = ssrcs;
+ vie_encoder_ = encoder;
}
-void EncoderStateFeedback::RemoveEncoder(const ViEEncoder* encoder) {
+void EncoderStateFeedback::TearDown() {
rtc::CritScope lock(&crit_);
- SsrcEncoderMap::iterator it = encoders_.begin();
- while (it != encoders_.end()) {
- if (it->second == encoder) {
- encoders_.erase(it++);
- } else {
- ++it;
- }
- }
+ RTC_DCHECK(vie_encoder_);
+ ssrcs_.clear();
+ vie_encoder_ = nullptr;
}
-RtcpIntraFrameObserver* EncoderStateFeedback::GetRtcpIntraFrameObserver() {
- return observer_.get();
+bool EncoderStateFeedback::HasSsrc(uint32_t ssrc) {
+ for (uint32_t registered_ssrc : ssrcs_) {
+ if (registered_ssrc == ssrc)
+ return true;
+ }
+ return false;
}
void EncoderStateFeedback::OnReceivedIntraFrameRequest(uint32_t ssrc) {
rtc::CritScope lock(&crit_);
- SsrcEncoderMap::iterator it = encoders_.find(ssrc);
- if (it == encoders_.end())
+ if (!HasSsrc(ssrc))
return;
+ RTC_DCHECK(vie_encoder_);
- it->second->OnReceivedIntraFrameRequest(ssrc);
+ vie_encoder_->OnReceivedIntraFrameRequest(ssrc);
}
void EncoderStateFeedback::OnReceivedSLI(uint32_t ssrc, uint8_t picture_id) {
rtc::CritScope lock(&crit_);
- SsrcEncoderMap::iterator it = encoders_.find(ssrc);
- if (it == encoders_.end())
+ if (!HasSsrc(ssrc))
return;
+ RTC_DCHECK(vie_encoder_);
- it->second->OnReceivedSLI(ssrc, picture_id);
+ vie_encoder_->OnReceivedSLI(ssrc, picture_id);
}
void EncoderStateFeedback::OnReceivedRPSI(uint32_t ssrc, uint64_t picture_id) {
rtc::CritScope lock(&crit_);
- SsrcEncoderMap::iterator it = encoders_.find(ssrc);
- if (it == encoders_.end())
+ if (!HasSsrc(ssrc))
return;
+ RTC_DCHECK(vie_encoder_);
- it->second->OnReceivedRPSI(ssrc, picture_id);
+ vie_encoder_->OnReceivedRPSI(ssrc, picture_id);
}
+// Sending SSRCs for this encoder should never change since they are configured
+// once and not reconfigured.
void EncoderStateFeedback::OnLocalSsrcChanged(uint32_t old_ssrc,
uint32_t new_ssrc) {
+ if (!RTC_DCHECK_IS_ON)
+ return;
rtc::CritScope lock(&crit_);
- SsrcEncoderMap::iterator it = encoders_.find(old_ssrc);
- if (it == encoders_.end() || encoders_.find(new_ssrc) != encoders_.end()) {
+ if (ssrcs_.empty()) // Encoder not yet attached (or detached for teardown).
return;
- }
-
- ViEEncoder* encoder = it->second;
- encoders_.erase(it);
- encoders_[new_ssrc] = encoder;
- encoder->OnLocalSsrcChanged(old_ssrc, new_ssrc);
+ // SSRC shouldn't change to something we haven't already registered with the
+ // encoder.
+ RTC_DCHECK(HasSsrc(new_ssrc));
}
} // namespace webrtc
« no previous file with comments | « webrtc/video/encoder_state_feedback.h ('k') | webrtc/video/encoder_state_feedback_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698