mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-14 03:15:46 -04:00
Android: Add 'Sync To Host Refresh Rate' option
This commit is contained in:
@ -44,6 +44,7 @@ static jmethodID s_EmulationActivity_method_onEmulationStarted;
|
||||
static jmethodID s_EmulationActivity_method_onEmulationStopped;
|
||||
static jmethodID s_EmulationActivity_method_onGameTitleChanged;
|
||||
static jmethodID s_EmulationActivity_method_setVibration;
|
||||
static jmethodID s_EmulationActivity_method_getRefreshRate;
|
||||
static jclass s_PatchCode_class;
|
||||
static jmethodID s_PatchCode_constructor;
|
||||
static jclass s_GameListEntry_class;
|
||||
@ -223,6 +224,20 @@ std::unique_ptr<ByteStream> AndroidHostInterface::OpenPackageFile(const char* pa
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool AndroidHostInterface::GetMainDisplayRefreshRate(float* refresh_rate)
|
||||
{
|
||||
if (!m_emulation_activity_object)
|
||||
return false;
|
||||
|
||||
float value = AndroidHelpers::GetJNIEnv()->CallFloatMethod(m_emulation_activity_object,
|
||||
s_EmulationActivity_method_getRefreshRate);
|
||||
if (value <= 0.0f)
|
||||
return false;
|
||||
|
||||
*refresh_rate = value;
|
||||
return true;
|
||||
}
|
||||
|
||||
void AndroidHostInterface::SetUserDirectory()
|
||||
{
|
||||
// Already set in constructor.
|
||||
@ -881,6 +896,8 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
|
||||
env->GetMethodID(s_EmulationActivity_class, "onGameTitleChanged", "(Ljava/lang/String;)V")) == nullptr ||
|
||||
(s_EmulationActivity_method_setVibration = env->GetMethodID(emulation_activity_class, "setVibration", "(Z)V")) ==
|
||||
nullptr ||
|
||||
(s_EmulationActivity_method_getRefreshRate =
|
||||
env->GetMethodID(emulation_activity_class, "getRefreshRate", "()F")) == nullptr ||
|
||||
(s_PatchCode_constructor = env->GetMethodID(s_PatchCode_class, "<init>", "(ILjava/lang/String;Z)V")) == nullptr ||
|
||||
(s_GameListEntry_constructor = env->GetMethodID(
|
||||
s_GameListEntry_class, "<init>",
|
||||
|
@ -38,6 +38,7 @@ public:
|
||||
int GetIntSettingValue(const char* section, const char* key, int default_value = 0) override;
|
||||
float GetFloatSettingValue(const char* section, const char* key, float default_value = 0.0f) override;
|
||||
std::unique_ptr<ByteStream> OpenPackageFile(const char* path, u32 flags) override;
|
||||
bool GetMainDisplayRefreshRate(float* refresh_rate) override;
|
||||
|
||||
bool IsEmulationThreadRunning() const { return m_emulation_thread_running.load(); }
|
||||
bool IsEmulationThreadPaused() const;
|
||||
|
@ -11,10 +11,12 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Vibrator;
|
||||
import android.util.Log;
|
||||
import android.view.Display;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.SurfaceHolder;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.Toast;
|
||||
|
||||
@ -137,6 +139,21 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
|
||||
});
|
||||
}
|
||||
|
||||
public float getRefreshRate() {
|
||||
WindowManager windowManager = getWindowManager();
|
||||
if (windowManager == null) {
|
||||
windowManager = ((WindowManager) getSystemService(Context.WINDOW_SERVICE));
|
||||
if (windowManager == null)
|
||||
return -1.0f;
|
||||
}
|
||||
|
||||
Display display = windowManager.getDefaultDisplay();
|
||||
if (display == null)
|
||||
return -1.0f;
|
||||
|
||||
return display.getRefreshRate();
|
||||
}
|
||||
|
||||
private void doApplySettings() {
|
||||
AndroidHostInterface.getInstance().applySettings();
|
||||
updateRequestedOrientation();
|
||||
|
@ -191,4 +191,6 @@
|
||||
<string name="game_properties_tab_controller_settings">Controller Settings</string>
|
||||
<string name="settings_audio_resampling">Audio Resampling</string>
|
||||
<string name="settings_summary_audio_resampling">When running outside of 100% speed, resamples audio from the target speed instead of dropping frames. Produces much nicer fast forward/slowdown audio at a small cost to performance.</string>
|
||||
<string name="settings_general_sync_to_host_refresh_rate">Sync To Host Refresh Rate</string>
|
||||
<string name="settings_summary_general_sync_to_host_refresh_rate">Adjusts the emulation speed so the console\'s refresh rate matches the host\'s refresh rate, when VSync and Audio Resampling is enabled. This results in the smoothest animations possible, at the cost of potentially increasing the emulation speed by less than 1%.</string>
|
||||
</resources>
|
||||
|
@ -78,6 +78,13 @@
|
||||
app:defaultValue="false"
|
||||
app:summary="@string/settings_summary_video_sync"
|
||||
app:iconSpaceReserved="false" />
|
||||
<SwitchPreferenceCompat
|
||||
app:key="Main/SyncToHostRefreshRate"
|
||||
app:title="@string/settings_general_sync_to_host_refresh_rate"
|
||||
app:defaultValue="false"
|
||||
app:summary="@string/settings_summary_general_sync_to_host_refresh_rate"
|
||||
app:dependency="Display/VSync"
|
||||
app:iconSpaceReserved="false" />
|
||||
<ListPreference
|
||||
app:key="Console/Region"
|
||||
app:title="@string/settings_console_region"
|
||||
|
Reference in New Issue
Block a user