From a26a4e9ee2be42dfdba455d7c0136b90f888dd0b Mon Sep 17 00:00:00 2001 From: Philipp Wiesemann Date: Fri, 23 Jan 2015 20:29:08 +0100 Subject: [PATCH] Fixed bug 2816 - [patch] Android: Expose screen refresh rate Jonas Kulla Display::getRefreshRate() is available on all API levels. --- android-project/src/org/libsdl/app/SDLActivity.java | 4 ++-- src/core/android/SDL_android.c | 4 ++-- src/video/android/SDL_androidvideo.c | 7 +++++-- src/video/android/SDL_androidvideo.h | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/android-project/src/org/libsdl/app/SDLActivity.java b/android-project/src/org/libsdl/app/SDLActivity.java index f65a010502539..a864aa07a8d08 100644 --- a/android-project/src/org/libsdl/app/SDLActivity.java +++ b/android-project/src/org/libsdl/app/SDLActivity.java @@ -392,7 +392,7 @@ boolean sendCommand(int command, Object data) { public static native void nativeQuit(); public static native void nativePause(); public static native void nativeResume(); - public static native void onNativeResize(int x, int y, int format); + public static native void onNativeResize(int x, int y, int format, float rate); public static native int onNativePadDown(int device_id, int keycode); public static native int onNativePadUp(int device_id, int keycode); public static native void onNativeJoy(int device_id, int axis, @@ -1041,7 +1041,7 @@ public void surfaceChanged(SurfaceHolder holder, mWidth = width; mHeight = height; - SDLActivity.onNativeResize(width, height, sdlFormat); + SDLActivity.onNativeResize(width, height, sdlFormat, mDisplay.getRefreshRate()); Log.v("SDL", "Window size:" + width + "x"+height); // Set mIsSurfaceReady to 'true' *before* making a call to handleResume diff --git a/src/core/android/SDL_android.c b/src/core/android/SDL_android.c index e09b06d4e7298..a9089548b3b29 100644 --- a/src/core/android/SDL_android.c +++ b/src/core/android/SDL_android.c @@ -143,9 +143,9 @@ JNIEXPORT void JNICALL SDL_Android_Init(JNIEnv* mEnv, jclass cls) /* Resize */ JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeResize( JNIEnv* env, jclass jcls, - jint width, jint height, jint format) + jint width, jint height, jint format, jfloat rate) { - Android_SetScreenResolution(width, height, format); + Android_SetScreenResolution(width, height, format, rate); } /* Paddown */ diff --git a/src/video/android/SDL_androidvideo.c b/src/video/android/SDL_androidvideo.c index 05c07537d89bd..ed3d3b323d0a4 100644 --- a/src/video/android/SDL_androidvideo.c +++ b/src/video/android/SDL_androidvideo.c @@ -64,6 +64,8 @@ extern int Android_GLES_LoadLibrary(_THIS, const char *path); int Android_ScreenWidth = 0; int Android_ScreenHeight = 0; Uint32 Android_ScreenFormat = SDL_PIXELFORMAT_UNKNOWN; +int Android_ScreenRate = 0; + SDL_sem *Android_PauseSem = NULL, *Android_ResumeSem = NULL; /* Currently only one window */ @@ -166,7 +168,7 @@ Android_VideoInit(_THIS) mode.format = Android_ScreenFormat; mode.w = Android_ScreenWidth; mode.h = Android_ScreenHeight; - mode.refresh_rate = 0; + mode.refresh_rate = Android_ScreenRate; mode.driverdata = NULL; if (SDL_AddBasicVideoDisplay(&mode) < 0) { return -1; @@ -189,11 +191,12 @@ Android_VideoQuit(_THIS) /* This function gets called before VideoInit() */ void -Android_SetScreenResolution(int width, int height, Uint32 format) +Android_SetScreenResolution(int width, int height, Uint32 format, float rate) { Android_ScreenWidth = width; Android_ScreenHeight = height; Android_ScreenFormat = format; + Android_ScreenRate = rate; if (Android_Window) { SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESIZED, width, height); diff --git a/src/video/android/SDL_androidvideo.h b/src/video/android/SDL_androidvideo.h index ccd5d7a16cd6b..a403c81b53be3 100644 --- a/src/video/android/SDL_androidvideo.h +++ b/src/video/android/SDL_androidvideo.h @@ -28,7 +28,7 @@ #include "../SDL_sysvideo.h" /* Called by the JNI layer when the screen changes size or format */ -extern void Android_SetScreenResolution(int width, int height, Uint32 format); +extern void Android_SetScreenResolution(int width, int height, Uint32 format, float rate); /* Private display data */