From a041114b38321fb217dc642c4bb113433a150f20 Mon Sep 17 00:00:00 2001 From: Emilian Peev Date: Fri, 12 Apr 2019 13:04:41 -0700 Subject: [PATCH] Check and configure pixel format when locking canvas When locking the canvas we assume that the surface always uses the default RGB pixel format. In some cases like the MediaRecorder input surface, the format could be entirely different which can cause issues when trying to generate SKIA content. To avoid this, check the surface format first and configure the default RGB in case the value is unexpected. Bug: 130385299 Test: Verified the output of: atest cts/tests/tests/media/src/android/media/cts/MediaRecorderTest.java#testSurfaceRecording test cts/tests/tests/media/src/android/media/cts/MediaRecorderTest.java#testPersistentSurfaceRecording atest cts/tests/tests/media/src/android/media/cts/MediaRecorderTest.java#testSurfaceRecordingTimeLapse atest cts/tests/tests/media/src/android/media/cts/MediaRecorderTest.java#testPersistentSurfaceRecordingTimeLapse atest cts/tests/tests/uirendering/src/android/uirendering/cts/testclasses/SurfaceViewTests.java atest cts/tests/tests/uirendering/src/android/uirendering/cts/testclasses/TextureViewTests.java atest cts/tests/tests/view/src/android/view/cts/SurfaceViewSyncTest.java atest cts/tests/tests/view/src/android/view/cts/ASurfaceControlTest.java Change-Id: I5459c52067725b0131010f362de5eb268fe7f9d9 --- core/jni/android_view_Surface.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index a9002945ff91c..ccadc7d7c22a8 100644 --- a/core/jni/android_view_Surface.cpp +++ b/core/jni/android_view_Surface.cpp @@ -212,6 +212,10 @@ static jlong nativeLockCanvas(JNIEnv* env, jclass clazz, return 0; } + if (convertPixelFormat(ANativeWindow_getFormat(surface.get())) == kUnknown_SkColorType) { + native_window_set_buffers_format(surface.get(), PIXEL_FORMAT_RGBA_8888); + } + Rect dirtyRect(Rect::EMPTY_RECT); Rect* dirtyRectPtr = NULL;