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

Unified Diff: webrtc/modules/desktop_capture/win/screen_capturer_win_directx.cc

Issue 2781253002: ScreenCapturerWinDirectx flickers in Desktop Capturer Sample (Closed)
Patch Set: Resolve review comments Created 3 years, 9 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/modules/desktop_capture/win/screen_capturer_win_directx.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/desktop_capture/win/screen_capturer_win_directx.cc
diff --git a/webrtc/modules/desktop_capture/win/screen_capturer_win_directx.cc b/webrtc/modules/desktop_capture/win/screen_capturer_win_directx.cc
index 90bdeb6124cfd5634b0666e35b563ec398d34030..36e43fbad7e47e44452713d66a04e6c80a25e3c8 100644
--- a/webrtc/modules/desktop_capture/win/screen_capturer_win_directx.cc
+++ b/webrtc/modules/desktop_capture/win/screen_capturer_win_directx.cc
@@ -15,6 +15,7 @@
#include "webrtc/base/checks.h"
#include "webrtc/base/logging.h"
+#include "webrtc/base/ptr_util.h"
#include "webrtc/base/timeutils.h"
#include "webrtc/modules/desktop_capture/desktop_frame.h"
#include "webrtc/modules/desktop_capture/win/screen_capture_utils.h"
@@ -106,10 +107,15 @@ void ScreenCapturerWinDirectx::CaptureFrame() {
}
frames_.ReplaceCurrentFrame(SharedDesktopFrame::Wrap(std::move(new_frame)));
}
+ contexts_.MoveToNextFrame();
+ if (!contexts_.current_frame()) {
+ contexts_.ReplaceCurrentFrame(
+ rtc::MakeUnique<DxgiDuplicatorController::Context>());
+ }
if (current_screen_id_ == kFullDesktopScreenId) {
if (!DxgiDuplicatorController::Instance()->Duplicate(
- &context_, frames_.current_frame())) {
+ contexts_.current_frame(), frames_.current_frame())) {
// Screen size may be changed, so we need to reset the frames.
frames_.Reset();
resolution_change_detector_.Reset();
@@ -118,7 +124,8 @@ void ScreenCapturerWinDirectx::CaptureFrame() {
}
} else {
if (!DxgiDuplicatorController::Instance()->DuplicateMonitor(
- &context_, current_screen_id_, frames_.current_frame())) {
+ contexts_.current_frame(), current_screen_id_,
+ frames_.current_frame())) {
// Screen size may be changed, so we need to reset the frames.
frames_.Reset();
resolution_change_detector_.Reset();
@@ -158,14 +165,14 @@ bool ScreenCapturerWinDirectx::SelectSource(SourceId id) {
// frames only when a Duplicate() function call returns false.
if (id == kFullDesktopScreenId) {
current_screen_id_ = id;
- context_.Reset();
+ contexts_.Reset();
return true;
}
int screen_count = DxgiDuplicatorController::Instance()->ScreenCount();
if (id >= 0 && id < screen_count) {
current_screen_id_ = id;
- context_.Reset();
+ contexts_.Reset();
return true;
}
return false;
« no previous file with comments | « webrtc/modules/desktop_capture/win/screen_capturer_win_directx.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698