summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmds/screencap/screencap.cpp4
-rw-r--r--core/jni/android_window_ScreenCapture.cpp30
2 files changed, 19 insertions, 15 deletions
diff --git a/cmds/screencap/screencap.cpp b/cmds/screencap/screencap.cpp
index 7e4f95bc9274..01b20f4a5267 100644
--- a/cmds/screencap/screencap.cpp
+++ b/cmds/screencap/screencap.cpp
@@ -14,6 +14,9 @@
* limitations under the License.
*/
+#include <android/bitmap.h>
+#include <android/gui/DisplayCaptureArgs.h>
+#include <binder/ProcessState.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
@@ -33,7 +36,6 @@
#include <ftl/concat.h>
#include <ftl/optional.h>
-#include <gui/DisplayCaptureArgs.h>
#include <gui/ISurfaceComposer.h>
#include <gui/SurfaceComposerClient.h>
#include <gui/SyncScreenCaptureListener.h>
diff --git a/core/jni/android_window_ScreenCapture.cpp b/core/jni/android_window_ScreenCapture.cpp
index 1031542eb2e6..b1a2cea1ab5c 100644
--- a/core/jni/android_window_ScreenCapture.cpp
+++ b/core/jni/android_window_ScreenCapture.cpp
@@ -19,6 +19,7 @@
#include <android/gui/BnScreenCaptureListener.h>
#include <android_runtime/android_hardware_HardwareBuffer.h>
+#include <gui/AidlStatusUtil.h>
#include <gui/SurfaceComposerClient.h>
#include <jni.h>
#include <nativehelper/JNIHelp.h>
@@ -141,12 +142,13 @@ private:
};
static void getCaptureArgs(JNIEnv* env, jobject captureArgsObject, CaptureArgs& captureArgs) {
- captureArgs.pixelFormat = static_cast<ui::PixelFormat>(
+ captureArgs.pixelFormat = static_cast<int32_t>(
env->GetIntField(captureArgsObject, gCaptureArgsClassInfo.pixelFormat));
- captureArgs.sourceCrop =
+ const auto sourceCrop =
JNICommon::rectFromObj(env,
env->GetObjectField(captureArgsObject,
gCaptureArgsClassInfo.sourceCrop));
+ captureArgs.sourceCrop = gui::aidl_utils::toARect(sourceCrop);
captureArgs.frameScaleX =
env->GetFloatField(captureArgsObject, gCaptureArgsClassInfo.frameScaleX);
captureArgs.frameScaleY =
@@ -172,7 +174,7 @@ static void getCaptureArgs(JNIEnv* env, jobject captureArgsObject, CaptureArgs&
jniThrowNullPointerException(env, "Exclude layer is null");
return;
}
- captureArgs.excludeHandles.emplace(excludeObject->getHandle());
+ captureArgs.excludeHandles.emplace_back(excludeObject->getHandle());
}
}
captureArgs.hintForSeamlessTransition =
@@ -182,18 +184,18 @@ static void getCaptureArgs(JNIEnv* env, jobject captureArgsObject, CaptureArgs&
static DisplayCaptureArgs displayCaptureArgsFromObject(JNIEnv* env,
jobject displayCaptureArgsObject) {
- DisplayCaptureArgs captureArgs;
- getCaptureArgs(env, displayCaptureArgsObject, captureArgs);
+ DisplayCaptureArgs displayCaptureArgs;
+ getCaptureArgs(env, displayCaptureArgsObject, displayCaptureArgs.captureArgs);
- captureArgs.displayToken =
+ displayCaptureArgs.displayToken =
ibinderForJavaObject(env,
env->GetObjectField(displayCaptureArgsObject,
gDisplayCaptureArgsClassInfo.displayToken));
- captureArgs.width =
+ displayCaptureArgs.width =
env->GetIntField(displayCaptureArgsObject, gDisplayCaptureArgsClassInfo.width);
- captureArgs.height =
+ displayCaptureArgs.height =
env->GetIntField(displayCaptureArgsObject, gDisplayCaptureArgsClassInfo.height);
- return captureArgs;
+ return displayCaptureArgs;
}
static jint nativeCaptureDisplay(JNIEnv* env, jclass clazz, jobject displayCaptureArgsObject,
@@ -212,8 +214,8 @@ static jint nativeCaptureDisplay(JNIEnv* env, jclass clazz, jobject displayCaptu
static jint nativeCaptureLayers(JNIEnv* env, jclass clazz, jobject layerCaptureArgsObject,
jlong screenCaptureListenerObject, jboolean sync) {
- LayerCaptureArgs captureArgs;
- getCaptureArgs(env, layerCaptureArgsObject, captureArgs);
+ LayerCaptureArgs layerCaptureArgs;
+ getCaptureArgs(env, layerCaptureArgsObject, layerCaptureArgs.captureArgs);
SurfaceControl* layer = reinterpret_cast<SurfaceControl*>(
env->GetLongField(layerCaptureArgsObject, gLayerCaptureArgsClassInfo.layer));
@@ -221,13 +223,13 @@ static jint nativeCaptureLayers(JNIEnv* env, jclass clazz, jobject layerCaptureA
return BAD_VALUE;
}
- captureArgs.layerHandle = layer->getHandle();
- captureArgs.childrenOnly =
+ layerCaptureArgs.layerHandle = layer->getHandle();
+ layerCaptureArgs.childrenOnly =
env->GetBooleanField(layerCaptureArgsObject, gLayerCaptureArgsClassInfo.childrenOnly);
sp<gui::IScreenCaptureListener> captureListener =
reinterpret_cast<gui::IScreenCaptureListener*>(screenCaptureListenerObject);
- return ScreenshotClient::captureLayers(captureArgs, captureListener, sync);
+ return ScreenshotClient::captureLayers(layerCaptureArgs, captureListener, sync);
}
static jlong nativeCreateScreenCaptureListener(JNIEnv* env, jclass clazz, jobject consumerObj) {