Index: webrtc/media/base/videobroadcaster.cc |
diff --git a/webrtc/media/base/videobroadcaster.cc b/webrtc/media/base/videobroadcaster.cc |
index 015f5206b676e239666e4fa5f374ebecb2a0270c..ed1a826de0323a0d9b6c2c30c40b58da19b42d7f 100644 |
--- a/webrtc/media/base/videobroadcaster.cc |
+++ b/webrtc/media/base/videobroadcaster.cc |
@@ -65,7 +65,11 @@ VideoSinkWants VideoBroadcaster::wants() const { |
void VideoBroadcaster::OnFrame(const cricket::VideoFrame& frame) { |
rtc::CritScope cs(&sinks_and_wants_lock_); |
for (auto& sink_pair : sinks_) { |
- sink_pair.sink->OnFrame(frame); |
+ if (sink_pair.wants.black_frames) { |
+ sink_pair.sink->OnFrame(GetBlackFrame(frame)); |
+ } else { |
+ sink_pair.sink->OnFrame(frame); |
+ } |
} |
} |
@@ -112,4 +116,21 @@ void VideoBroadcaster::UpdateWants() { |
current_wants_ = wants; |
} |
+const cricket::VideoFrame& VideoBroadcaster::GetBlackFrame( |
+ const cricket::VideoFrame& frame) { |
+ if (black_frame_ && black_frame_->GetWidth() == frame.GetWidth() && |
+ black_frame_->GetHeight() == frame.GetHeight() && |
+ black_frame_->GetVideoRotation() == frame.GetVideoRotation()) { |
+ black_frame_->SetTimeStamp(frame.GetTimeStamp()); |
+ return *black_frame_; |
+ } |
+ black_frame_.reset(new cricket::WebRtcVideoFrame( |
+ new rtc::RefCountedObject<webrtc::I420Buffer>( |
+ static_cast<int>(frame.GetWidth()), |
+ static_cast<int>(frame.GetHeight())), |
+ frame.GetTimeStamp(), frame.GetVideoRotation())); |
+ black_frame_->SetToBlack(); |
+ return *black_frame_; |
+} |
+ |
} // namespace rtc |