Skip to content

Commit 5ede6cc

Browse files
committed
Added setFocusSelectedSource to DesktopCapturer and capture with DesktopAndCursorComposer
1 parent 4247a4e commit 5ede6cc

File tree

6 files changed

+42
-5
lines changed

6 files changed

+42
-5
lines changed

webrtc-jni/src/main/cpp/include/JNI_DesktopCapturer.h

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webrtc-jni/src/main/cpp/include/media/video/desktop/DesktopCapturer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,14 @@ namespace jni
4242
bool GetSourceList(SourceList * sources) override;
4343
bool SelectSource(SourceId id) override;
4444
bool FocusOnSelectedSource() override;
45+
void setFocusSelectedSource(bool focus);
4546
bool IsOccluded(const webrtc::DesktopVector & pos) override;
4647

4748
protected:
4849
std::unique_ptr<webrtc::DesktopCapturer> capturer;
4950

51+
bool focusSelectedSource;
52+
5053
#if defined(WEBRTC_WIN)
5154
private:
5255
ComInitializer comInitializer;

webrtc-jni/src/main/cpp/src/JNI_DesktopCapturer.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,15 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_video_desktop_DesktopCapture
7676
}
7777
}
7878

79+
JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_video_desktop_DesktopCapturer_setFocusSelectedSource
80+
(JNIEnv * env, jobject caller, jboolean focus)
81+
{
82+
jni::DesktopCapturer * capturer = GetHandle<jni::DesktopCapturer>(env, caller);
83+
CHECK_HANDLE(capturer);
84+
85+
capturer->setFocusSelectedSource(focus);
86+
}
87+
7988
JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_video_desktop_DesktopCapturer_start
8089
(JNIEnv * env, jobject caller, jobject jcallback)
8190
{

webrtc-jni/src/main/cpp/src/JNI_VideoDesktopSource.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_video_VideoDesktopSource_set
5454
JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_video_VideoDesktopSource_setFocusSelectedSource
5555
(JNIEnv * env, jobject caller, jboolean focus)
5656
{
57-
jni::VideoTrackDesktopSource* videoSource = GetHandle<jni::VideoTrackDesktopSource>(env, caller);
57+
jni::VideoTrackDesktopSource * videoSource = GetHandle<jni::VideoTrackDesktopSource>(env, caller);
5858
CHECK_HANDLE(videoSource);
5959

6060
videoSource->setFocusSelectedSource(focus);

webrtc-jni/src/main/cpp/src/media/video/desktop/DesktopCapturer.cpp

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@
1818

1919
#include "modules/desktop_capture/desktop_capturer.h"
2020
#include "modules/desktop_capture/desktop_capture_options.h"
21+
#include "modules/desktop_capture/desktop_and_cursor_composer.h"
2122

2223
namespace jni
2324
{
24-
DesktopCapturer::DesktopCapturer(bool screenCapturer)
25+
DesktopCapturer::DesktopCapturer(bool screenCapturer) :
26+
focusSelectedSource(false)
2527
{
2628
auto options = webrtc::DesktopCaptureOptions::CreateDefault();
27-
// Disable desktop effects.
29+
// Enable desktop effects.
2830
options.set_disable_effects(false);
2931

3032
#if defined(WEBRTC_WIN)
@@ -33,10 +35,14 @@ namespace jni
3335
#endif
3436

3537
if (screenCapturer) {
36-
capturer = webrtc::DesktopCapturer::CreateScreenCapturer(options);
38+
capturer.reset(new webrtc::DesktopAndCursorComposer(
39+
webrtc::DesktopCapturer::CreateScreenCapturer(options),
40+
options));
3741
}
3842
else {
39-
capturer = webrtc::DesktopCapturer::CreateWindowCapturer(options);
43+
capturer.reset(new webrtc::DesktopAndCursorComposer(
44+
webrtc::DesktopCapturer::CreateWindowCapturer(options),
45+
options));
4046
}
4147
}
4248

@@ -48,6 +54,10 @@ namespace jni
4854
void DesktopCapturer::Start(Callback * callback)
4955
{
5056
capturer->Start(callback);
57+
58+
if (focusSelectedSource) {
59+
capturer->FocusOnSelectedSource();
60+
}
5161
}
5262

5363
void DesktopCapturer::SetSharedMemoryFactory(std::unique_ptr<webrtc::SharedMemoryFactory> factory)
@@ -80,6 +90,11 @@ namespace jni
8090
return capturer->FocusOnSelectedSource();
8191
}
8292

93+
void DesktopCapturer::setFocusSelectedSource(bool focus)
94+
{
95+
this->focusSelectedSource = focus;
96+
}
97+
8398
bool DesktopCapturer::IsOccluded(const webrtc::DesktopVector & pos)
8499
{
85100
return capturer->IsOccluded(pos);

webrtc/src/main/java/dev/onvoid/webrtc/media/video/desktop/DesktopCapturer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ public enum Result {
6363

6464
public native void selectSource(DesktopSource source);
6565

66+
public native void setFocusSelectedSource(boolean focus);
67+
6668
public native void start(DesktopCaptureCallback callback);
6769

6870
public native void captureFrame();

0 commit comments

Comments
 (0)