diff --git a/sdk/android/api/org/webrtc/VideoSource.java b/sdk/android/api/org/webrtc/VideoSource.java index 1b40231083..6c528fd05b 100644 --- a/sdk/android/api/org/webrtc/VideoSource.java +++ b/sdk/android/api/org/webrtc/VideoSource.java @@ -114,6 +114,10 @@ public class VideoSource extends MediaSource { maxLandscapePixelCount, targetPortraitAspectRatio, maxPortraitPixelCount, maxFps); } + public void setIsScreencast(boolean isScreencast) { + nativeAndroidVideoTrackSource.setIsScreencast(isScreencast); + } + /** * Hook for injecting a custom video processor before frames are passed onto WebRTC. The frames * will be cropped and scaled depending on CPU and network conditions before they are passed to diff --git a/sdk/android/src/java/org/webrtc/NativeAndroidVideoTrackSource.java b/sdk/android/src/java/org/webrtc/NativeAndroidVideoTrackSource.java index 48690fb8b7..cdc9b53554 100644 --- a/sdk/android/src/java/org/webrtc/NativeAndroidVideoTrackSource.java +++ b/sdk/android/src/java/org/webrtc/NativeAndroidVideoTrackSource.java @@ -72,6 +72,10 @@ class NativeAndroidVideoTrackSource { targetPortraitAspectRatio.height, maxPortraitPixelCount, maxFps); } + public void setIsScreencast(boolean isScreencast) { + nativeSetIsScreencast(nativeAndroidVideoTrackSource, isScreencast); + } + @CalledByNative static VideoProcessor.FrameAdaptationParameters createFrameAdaptationParameters(int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight, long timestampNs, @@ -80,6 +84,8 @@ class NativeAndroidVideoTrackSource { cropX, cropY, cropWidth, cropHeight, scaleWidth, scaleHeight, timestampNs, drop); } + private static native void nativeSetIsScreencast( + long nativeAndroidVideoTrackSource, boolean isScreencast); private static native void nativeSetState(long nativeAndroidVideoTrackSource, boolean isLive); private static native void nativeAdaptOutputFormat(long nativeAndroidVideoTrackSource, int landscapeWidth, int landscapeHeight, @Nullable Integer maxLandscapePixelCount, diff --git a/sdk/android/src/jni/android_video_track_source.cc b/sdk/android/src/jni/android_video_track_source.cc index df0f72284c..b9e056284d 100644 --- a/sdk/android/src/jni/android_video_track_source.cc +++ b/sdk/android/src/jni/android_video_track_source.cc @@ -86,6 +86,11 @@ bool AndroidVideoTrackSource::remote() const { return false; } +void AndroidVideoTrackSource::SetIsScreencast(JNIEnv* env, + jboolean j_is_screencast) { + is_screencast_ = j_is_screencast; +} + ScopedJavaLocalRef AndroidVideoTrackSource::AdaptFrame( JNIEnv* env, jint j_width, diff --git a/sdk/android/src/jni/android_video_track_source.h b/sdk/android/src/jni/android_video_track_source.h index d272275aed..6fcf5cd6fc 100644 --- a/sdk/android/src/jni/android_video_track_source.h +++ b/sdk/android/src/jni/android_video_track_source.h @@ -84,10 +84,12 @@ class AndroidVideoTrackSource : public rtc::AdaptedVideoTrackSource { const JavaRef& j_max_portrait_pixel_count, const JavaRef& j_max_fps); + void SetIsScreencast(JNIEnv* env, jboolean j_is_screencast); + private: rtc::Thread* signaling_thread_; std::atomic state_; - const bool is_screencast_; + bool is_screencast_; rtc::TimestampAligner timestamp_aligner_; const bool align_timestamps_; };