Compare commits

...
Sign in to create a new pull request.

4 commits

Author SHA1 Message Date
Henrik Rydgård
61a13beeeb Address feedback 2023-05-26 00:25:15 +02:00
Henrik Rydgård
602f4cf3e2 Add experimental, disabled XOR mode, leaving all compression to ZSTD. Seems to perform worse. 2023-05-26 00:25:15 +02:00
Henrik Rydgård
bd75b2dc6b Add ZSTD compression on top of the redundancy compression 2023-05-26 00:25:15 +02:00
Henrik Rydgård
6cea1f73f6 Remove "mem hog" comment from snapshot frequency 2023-05-26 00:25:12 +02:00
38 changed files with 153 additions and 90 deletions

View file

@ -250,7 +250,6 @@ public:
}
}
// Load file template
template<class T>
static Error Load(const Path &filename, std::string *gitVersion, T& _class, std::string *failureReason)

View file

@ -20,6 +20,8 @@
#include <thread>
#include <mutex>
#include <zstd.h>
#include "Common/Data/Text/I18n.h"
#include "Common/Thread/ThreadUtil.h"
#include "Common/Data/Text/Parsers.h"
@ -99,6 +101,17 @@ namespace SaveState
return CChunkFileReader::LoadPtr(&data[0], state, errorString);
}
struct StateBuffer {
void Clear() {
zstd_compressed.clear();
decompressed_size = 0;
compressed_size = 0;
}
std::vector<u8> zstd_compressed;
size_t decompressed_size = 0;
size_t compressed_size = 0;
};
// This ring buffer of states is for rewind save states, which are kept in RAM.
// Save states are compressed against one of two reference saves (bases_), and the reference
// is switched to a fresh save every N saves, where N is BASE_USAGE_INTERVAL.
@ -150,7 +163,7 @@ namespace SaveState
if (err == CChunkFileReader::ERROR_NONE)
ScheduleCompress(&states_[n], compressBuffer, &bases_[base_]);
else
states_[n].clear();
states_[n].zstd_compressed.clear();
baseMapping_[n] = base_;
return err;
@ -165,17 +178,26 @@ namespace SaveState
return CChunkFileReader::ERROR_BAD_FILE;
int n = (--next_ + size_) % size_;
if (states_[n].empty())
if (states_[n].zstd_compressed.empty())
return CChunkFileReader::ERROR_BAD_FILE;
static std::vector<u8> buffer;
LockedDecompress(buffer, states_[n], bases_[baseMapping_[n]]);
if (LockedDecompress(buffer, states_[n], bases_[baseMapping_[n]])) {
CChunkFileReader::Error error = LoadFromRam(buffer, errorString);
if (error == CChunkFileReader::ERROR_NONE) {
INFO_LOG(SAVESTATE, "Rewinding to recent savestate snapshot (%d bytes compressed)", states_[n].zstd_compressed.size());
rewindLastTime_ = time_now_d();
}
return error;
} else {
WARN_LOG(SAVESTATE, "Failed to load rewind savestate");
// Unclear what CChunkFileReader error code we should pass in this case, which I'm not sure will
// happen in practice barring memory corruption.
}
return CChunkFileReader::ERROR_NONE;
}
void ScheduleCompress(std::vector<u8> *result, const std::vector<u8> *state, const std::vector<u8> *base)
void ScheduleCompress(StateBuffer *result, const std::vector<u8> *state, const std::vector<u8> *base)
{
if (compressThread_.joinable())
compressThread_.join();
@ -183,11 +205,13 @@ namespace SaveState
SetCurrentThreadName("SaveStateCompress");
// Should do no I/O, so no JNI thread context needed.
Compress(*result, *state, *base);
Compress(result, *state, *base);
});
}
void Compress(std::vector<u8> &result, const std::vector<u8> &state, const std::vector<u8> &base)
const bool USE_XOR = false;
void Compress(StateBuffer *result, const std::vector<u8> &state, const std::vector<u8> &base)
{
std::lock_guard<std::mutex> guard(lock_);
// Bail if we were cleared before locking.
@ -195,42 +219,82 @@ namespace SaveState
return;
double start_time = time_now_d();
result.clear();
result.reserve(512 * 1024);
std::vector<u8> compressed;
if (USE_XOR) {
compressed.resize(state.size());
for (size_t i = 0; i < state.size(); i++) {
if (i >= base.size()) {
compressed[i] = state[i];
} else {
compressed[i] = base[i] ^ state[i];
}
}
} else {
compressed.reserve(512 * 1024);
for (size_t i = 0; i < state.size(); i += BLOCK_SIZE)
{
int blockSize = std::min(BLOCK_SIZE, (int)(state.size() - i));
if (i + blockSize > base.size() || memcmp(&state[i], &base[i], blockSize) != 0)
{
result.push_back(1);
result.insert(result.end(), state.begin() + i, state.begin() + i + blockSize);
compressed.push_back(1);
compressed.insert(compressed.end(), state.begin() + i, state.begin() + i + blockSize);
} else {
compressed.push_back(0);
}
}
else
result.push_back(0);
}
double taken_s = time_now_d() - start_time;
DEBUG_LOG(SAVESTATE, "Rewind: Compressed save from %d bytes to %d in %0.2f ms.", (int)state.size(), (int)result.size(), taken_s * 1000.0);
DEBUG_LOG(SAVESTATE, "Rewind: Compressed save from %d bytes to %d in %0.2f ms.", (int)state.size(), (int)compressed.size(), taken_s * 1000.0);
// Temporarily allocate a buffer to do compression in.
size_t compressCapacity = ZSTD_compressBound(compressed.size());
result->zstd_compressed.resize(compressCapacity);
result->compressed_size = ZSTD_compress(&result->zstd_compressed[0], compressCapacity, compressed.data(), compressed.size(), 1);
if (result->compressed_size) {
result->zstd_compressed.resize(result->compressed_size);
result->decompressed_size = compressed.size();
}
void LockedDecompress(std::vector<u8> &result, const std::vector<u8> &compressed, const std::vector<u8> &base)
double zstd_s = time_now_d() - start_time - taken_s;
DEBUG_LOG(SAVESTATE, "Rewind: ZSTD compressed to %d in %0.2f ms.", (int)result->compressed_size, zstd_s * 1000.0);
}
bool LockedDecompress(std::vector<u8> &result, const StateBuffer &buffer, const std::vector<u8> &base)
{
result.clear();
result.reserve(base.size());
auto basePos = base.begin();
for (size_t i = 0; i < compressed.size(); )
{
if (compressed[i] == 0)
{
// OK, zstd decompress first.
std::vector<u8> compressed = std::vector<u8>(buffer.decompressed_size, 0);
size_t retval = ZSTD_decompress(&compressed[0], compressed.size(), buffer.zstd_compressed.data(), buffer.zstd_compressed.size());
if (ZSTD_isError(retval)) {
WARN_LOG(SAVESTATE, "Failed to decompress zstd-compressed rewind savestate");
return false;
}
if (USE_XOR) {
result.resize(compressed.size());
for (size_t i = 0; i < compressed.size(); i++) {
if (i < base.size()) {
result[i] = compressed[i] ^ base[i];
} else {
result[i] = compressed[i];
}
}
} else {
for (size_t i = 0; i < compressed.size(); ) {
if (compressed[i] == 0) {
++i;
int blockSize = std::min(BLOCK_SIZE, (int)(base.size() - result.size()));
_dbg_assert_(blockSize >= 0);
result.insert(result.end(), basePos, basePos + blockSize);
basePos += blockSize;
}
else
{
} else {
++i;
int blockSize = std::min(BLOCK_SIZE, (int)(compressed.size() - i));
if (blockSize > 0) {
result.insert(result.end(), compressed.begin() + i, compressed.begin() + i + blockSize);
i += blockSize;
// This check is to avoid advancing basePos out of range, which MSVC catches.
@ -241,6 +305,9 @@ namespace SaveState
}
}
}
}
return true;
}
void Clear()
{
@ -257,7 +324,7 @@ namespace SaveState
baseMapping_.clear();
baseMapping_.resize(size_);
for (auto &s : states_) {
s.clear();
s.Clear();
}
buffer_.clear();
base_ = -1;
@ -296,14 +363,12 @@ namespace SaveState
// TODO: Instead, based on size of compressed state?
const int BASE_USAGE_INTERVAL = 15;
typedef std::vector<u8> StateBuffer;
int first_ = 0;
int next_ = 0;
int size_;
std::vector<StateBuffer> states_;
StateBuffer bases_[2];
std::vector<u8> bases_[2];
std::vector<int> baseMapping_;
std::mutex lock_;
std::thread compressThread_;
@ -312,7 +377,7 @@ namespace SaveState
int base_ = -1;
int baseUsage_ = 0;
double rewindLastTime_ = 0.0f;
double rewindLastTime_ = 0.0;
};
static bool needsProcess = false;
@ -1012,7 +1077,6 @@ namespace SaveState
break;
case SAVESTATE_REWIND:
INFO_LOG(SAVESTATE, "Rewinding to recent savestate snapshot");
result = rewindStates.Restore(&errorString);
if (result == CChunkFileReader::ERROR_NONE) {
callbackMessage = sc->T("Loaded State");

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Restore PPSSPP's settings to default
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = Savestate slot

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Възстанови първоначалните настройки на PPSSPP
Rewind Snapshot Interval = Rewind snapshot честота („яде“ памет)
Rewind Snapshot Interval = Rewind snapshot честота
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = слот за запазено състояние

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Restore PPSSPP's settings to default
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = Savestate slot

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Obnovit výchozí nastavení PPSSPP
Rewind Snapshot Interval = Četnost snímků přetočení (žrout paměti)
Rewind Snapshot Interval = Četnost snímků přetočení
Save path in installed.txt = Cesta pro uložení dat je installed.txt
Save path in My Documents = Cesta pro uložení dat je v Dokumentech
Savestate Slot = Pozice uložené hry

View file

@ -1173,7 +1173,7 @@ Record Audio = Optag lyd
Record Display = Optag skærm
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Sæt PPSSPP's indstillinger tilbage til standard
Rewind Snapshot Interval = Tilbagespol snapshot frekvens (mem hog)
Rewind Snapshot Interval = Tilbagespol snapshot interval
Save path in installed.txt = Gem sti i installed.txt
Save path in My Documents = Gem sti i Mine Dokumenter
Savestate Slot = Lagerplads for spil-status

View file

@ -1173,7 +1173,7 @@ Record Audio = Ton aufzeichnen
Record Display = Bildschirm aufzeichnen
Reset Recording on Save/Load State = Zurücksetzen der Aufnahme bei Laden/Speichern eines Standes
Restore Default Settings = Auf Standardeinstellungen zurücksetzen
Rewind Snapshot Interval = Zurückspulen-Snapshot Frequenz (Speicherfresser)
Rewind Snapshot Interval = Zurückspulen-Snapshot Frequenz
Save path in installed.txt = Speicherpfad in installed.txt
Save path in My Documents = Speicherpfad in "Meine Dokumente"
Savestate Slot = Speicherplatz

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Restore PPSSPP's settings to default
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = Savestate slot

View file

@ -1188,7 +1188,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Restore PPSSPP's settings to default
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = Savestate slot

View file

@ -1173,7 +1173,7 @@ Record Audio = Grabar Audio
Record Display = Grabar pantalla
Reset Recording on Save/Load State = Reiniciar grabación al abrir/guardar estados
Restore Default Settings = Reestablecer ajustes
Rewind Snapshot Interval = Frecuencia de rebobinado\n(consume memoria)
Rewind Snapshot Interval = Intervalo de rebobinado
Save path in installed.txt = Guardar ruta en installed.txt
Save path in My Documents = Guardar ruta en\n"C:/Users/(tu usuario)/Documents"
Savestate Slot = Ranura de estado guardado

View file

@ -1173,7 +1173,7 @@ Record Audio = ‎ضبط صدا
Record Display = ‎ضبط صفحه
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = ‎به حالت اولیه PPSSPP بازگشت تنظیمات
Rewind Snapshot Interval = ‎تعداد فریم ذخیره شده برای به عقب رفتن (مصرف زیاد رم)
Rewind Snapshot Interval = ‎تعداد فریم ذخیره شده برای به عقب رفتن
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = ذخیره در داکیومنت ها
Savestate Slot = Savestate slot

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Restore PPSSPP's settings to default
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = Savestate slot

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Reestablecer axustes
Rewind Snapshot Interval = Frecuencia de rebobinado de instantánea (mem hog)
Rewind Snapshot Interval = Frecuencia de rebobinado de instantánea
Save path in installed.txt = Carpeta de gardado en installed.txt
Save path in My Documents = Carpeta de gardado en Meus documentos
Savestate Slot = Ranura de estado gardado

View file

@ -1173,7 +1173,7 @@ Record Audio = Καταγραφή Ήχου
Record Display = Καταγραφή Εικόνας
Reset Recording on Save/Load State = Επαναφορά της εγγραφής κατή την Αποθήκευση/Φόρτωση σημείου αποθήκευσης
Restore Default Settings = Επαναφορά προεπιλεγμένων ρυθμίσεων του PPSSPP
Rewind Snapshot Interval = Συχνότητα Αντιστροφής Στιγμιότυπου (mem hog)
Rewind Snapshot Interval = Συχνότητα Αντιστροφής Στιγμιότυπου
Save path in installed.txt = Αποθήκευση διαδρομής στο installed.txt
Save path in My Documents = Αποθήκευση διαδρομής στα Έγγραφα μου
Savestate Slot = Slot Σημείου Αποθήκευσης

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Restore PPSSPP's settings to default
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = Savestate slot

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Restore PPSSPP's settings to default
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = Savestate slot

View file

@ -1173,7 +1173,7 @@ Record Audio = Snimi audio
Record Display = Snimi prikaz
Reset Recording on Save/Load State = Ponovo postavi snimak na Save/Load state
Restore Default Settings = Vrati PPSSPP opcije na zadano
Rewind Snapshot Interval = Vrati snapshot frekvenciju (mem hog)
Rewind Snapshot Interval = Vrati snapshot frekvenciju
Save path in installed.txt = Spremi put u installed.txt
Save path in My Documents = Spremi put u My Documents
Savestate Slot = Savestate mjesto

View file

@ -1173,7 +1173,7 @@ Record Audio = Audió felvétele
Record Display = Videó felvétele
Reset Recording on Save/Load State = Felvétel leállítása állapotmentés készítésekor vagy betöltésekor
Restore Default Settings = PPSSPP beállításainak alapértelmezettre állítása
Rewind Snapshot Interval = Visszatekerési állapotmentések gyakorisága (sok memória kell)
Rewind Snapshot Interval = Visszatekerési állapotmentések gyakorisága
Save path in installed.txt = Mentés helye installed.txt-ben
Save path in My Documents = Mentés helye a Dokumentumok mappában
Savestate Slot = Állapotmentés sorszáma

View file

@ -1173,7 +1173,7 @@ Record Audio = Rekam suara
Record Display = Rekam tampilan
Reset Recording on Save/Load State = Atur ulang rekaman pada status simpan/muat
Restore Default Settings = Atur ulang pengaturan PPSSPP ke awal
Rewind Snapshot Interval = Putar ulang frekuensi foto (memory hog)
Rewind Snapshot Interval = Putar ulang frekuensi foto
Save path in installed.txt = Simpan jalur dalam installed.txt
Save path in My Documents = Simpan jalur dalam dokumen saya
Savestate Slot = Slot simpanan status

View file

@ -1179,7 +1179,7 @@ Record Audio = Registra Audio
Record Display = Registra Display
Reset Recording on Save/Load State = Reset della registrazione al Salvataggio/Caricamento stato
Restore Default Settings = Ripristina Impostazioni di PPSSPP
Rewind Snapshot Interval = Frequenza riavvolgimento snapshot (+ memoria)
Rewind Snapshot Interval = Frequenza riavvolgimento snapshot
Save path in installed.txt = Salva il percorso in "installed.txt"
Save path in My Documents = Salva il percorso in "Documenti"
Savestate Slot = Slot di salvataggio stato

View file

@ -1173,7 +1173,7 @@ Record Audio = オーディオを記録する
Record Display = 画面を記録する
Reset Recording on Save/Load State = ステートをセーブ/ロードしたら記録をリセットする
Restore Default Settings = 設定をデフォルトに戻す
Rewind Snapshot Interval = スナップショットの巻き戻し頻度 (メモリを消費)
Rewind Snapshot Interval = スナップショットの巻き戻し頻度
Save path in installed.txt = パスを installed.txt に保存する
Save path in My Documents = パスを My Documents に保存する
Savestate Slot = セーブステートのスロット

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Mulihake setelan PPSSPP kanggo gawan
Rewind Snapshot Interval = Frekuensi gambar asli seko mundur (mem hog)
Rewind Snapshot Interval = Frekuensi gambar asli seko mundur
Save path in installed.txt = Nyimpen path ing installed.txt
Save path in My Documents = Nyimpen path ing Dokumen kulo
Savestate Slot = Savestate slot

View file

@ -1154,7 +1154,7 @@ Record Audio = 오디오 녹음
Record Display = 녹화 표시
Reset Recording on Save/Load State = 저장/불러오기 상태에서 녹화 재설정
Restore Default Settings = PPSSPP의 설정을 기본값으로 복원
Rewind Snapshot Interval = 되감기 스냅샷 빈도 (메모리 호그)
Rewind Snapshot Interval = 되감기 스냅샷 빈도
Save path in installed.txt = install.txt에 경로 저장
Save path in My Documents = 내 문서에 경로 저장
Savestate Slot = 저장 상태 슬롯

View file

@ -1173,7 +1173,7 @@ Record Audio = ບັນທຶກສຽງ Audio
Record Display = ບັນທຶກພາບ Display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = "ຄືນຄ່າການຕັ້ງຄ່າຂອງ PPSSPP ເປັນຄ່າເລີ່ມຕົ້ນ"
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = ບັນທຶກຂໍ້ມູນໃນ installed.txt
Save path in My Documents = ບັນທຶກຂໍ້ມູນໄວ້ທີ່ My Documents
Savestate Slot = ຊ່ອງເກັບເຊບ

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Nustatyti "PPSSPP" parametrus į numatytuosius
Rewind Snapshot Interval = "Vėjinti" momentinės nuotraukos dažnį (atminties "rijikas")
Rewind Snapshot Interval = "Vėjinti" momentinės nuotraukos dažnį
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = Išsaugojimo statuso vieta

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Kembalikan tetapan PPSSPP ke lalai
Rewind Snapshot Interval = Kekerapan pusingan gambar skrin (mem hog)
Rewind Snapshot Interval = Kekerapan pusingan gambar skrin
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = Slot Savestate

View file

@ -1173,7 +1173,7 @@ Record Audio = Audio opnemen
Record Display = Scherm opnemen
Reset Recording on Save/Load State = Opname opnieuw opstarten bij opslaan/laden van states
Restore Default Settings = PPSSPP's standaardinstellingen herstellen
Rewind Snapshot Interval = Terugspoelfrequentie (kost geheugen)
Rewind Snapshot Interval = Terugspoelfrequentie
Save path in installed.txt = Opslagpad in installed.txt
Save path in My Documents = Opslagpad in Mijn documenten
Savestate Slot = Savestatesleuf

View file

@ -1173,7 +1173,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Restore PPSSPP's settings to default
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = Savestate slot

View file

@ -1173,7 +1173,7 @@ Record Audio = Nagrywaj dźwięk
Record Display = Nagrywaj obraz
Reset Recording on Save/Load State = Resetuj nagrywanie przy zapisie/wczytaniu stanu
Restore Default Settings = Przywróć domyślne ustawienia
Rewind Snapshot Interval = Częstotl. zapisu stanów przewijania (wymaga pamięci)
Rewind Snapshot Interval = Częstotl. zapisu stanów przewijania
Save path in installed.txt = Ścieżka zapisu w installed.txt
Save path in My Documents = Ścieżka zapisu w Dokumentach
Savestate Slot = Slot zapisu stanu

View file

@ -1187,7 +1187,7 @@ Record Audio = Gravar áudio
Record Display = Gravar tela
Reset Recording on Save/Load State = Resetar a gravação ao salvar/carregar o state
Restore Default Settings = Restaurar as configurações do PPSSPP para os padrões
Rewind Snapshot Interval = Retroceder a frequência dos snapshots (consome muita memória)
Rewind Snapshot Interval = Retroceder a frequência dos snapshots
Save path in installed.txt = Caminho do save em installed.txt
Save path in My Documents = Caminho do save em Meus Documentos
Savestate Slot = Slot do state salvo

View file

@ -1188,7 +1188,7 @@ Record Audio = Gravar áudio
Record Display = Gravar tela
Reset Recording on Save/Load State = Reiniciar a gravação ao salvar/carregar o estado
Restore Default Settings = Restaurar as Definições do PPSSPP para os padrões
Rewind Snapshot Interval = Rebobinar frequência dos snapshots (consome memória)
Rewind Snapshot Interval = Rebobinar frequência dos snapshots
Save path in installed.txt = Caminho do save em installed.txt
Save path in My Documents = Caminho do save em Meus Documentos
Savestate Slot = Espaço do estado salvo

View file

@ -1174,7 +1174,7 @@ Record Audio = Record audio
Record Display = Record display
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Adu la setări PPSSPP inițiale
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = Save path in installed.txt
Save path in My Documents = Save path in My Documents
Savestate Slot = Slot salvare

View file

@ -1173,7 +1173,7 @@ Record Audio = Spela in audio till fil
Record Display = Spela in video till fil
Reset Recording on Save/Load State = Reset recording on Save/Load state
Restore Default Settings = Återställ standard-inställningar
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = Sparkatalog från installed.txt
Save path in My Documents = Sparkatalog i Dokument
Savestate Slot = Savestate slot

View file

@ -1173,7 +1173,7 @@ Record Audio = I-record ang Audio
Record Display = I-record ang Display
Reset Recording on Save/Load State = Reset Recording on Save/Load state
Restore Default Settings = Ibalik ang settings sa dati nitong ayos
Rewind Snapshot Interval = Rewind Snapshot Interval (mem hog)
Rewind Snapshot Interval = Rewind Snapshot Interval
Save path in installed.txt = I-save sa direksyon na installed.txt
Save path in My Documents = I-save sa direksyon na "Aking Dokumento"
Savestate Slot = Savestate Slot

View file

@ -1174,7 +1174,7 @@ Record Audio = อัดบันทึกเสียง
Record Display = อัดบันทึกวีดีโอ
Reset Recording on Save/Load State = เริ่มการอัดบันทึกไฟล์ใหม่ เมื่อกดเซฟ/โหลดสเตทเกม
Restore Default Settings = รีเซ็ตการตั้งค่าของ PPSSPP ทั้งหมด
Rewind Snapshot Interval = เซฟสเตทพื้นหลังแบบอัตโนมัติ (สูบแรม)
Rewind Snapshot Interval = เซฟสเตทพื้นหลังแบบอัตโนมัติ
Save path in installed.txt = บันทึกข้อมูลตามเส้นทางที่เลือกไว้
Save path in My Documents = บันทึกข้อมูลไว้ที่ My Documents
Savestate Slot = ช่องเก็บเซฟสเตทเกม

View file

@ -1174,7 +1174,7 @@ Record Audio = Sesi kaydet
Record Display = Görüntüyü kaydet
Reset Recording on Save/Load State = Kaydet/Yükle durumunda kaydı sıfırla
Restore Default Settings = Varsayılan ayarları yükle
Rewind Snapshot Interval = Geri sarma görüntüsü sıklığı (mem hog)
Rewind Snapshot Interval = Geri sarma görüntüsü sıklığı
Save path in installed.txt = Yolu installed.txt'ye kaydet
Save path in My Documents = Dosyaları "Belgeler"'e kaydet
Savestate Slot = Durum kaydı yeri

View file

@ -1173,7 +1173,7 @@ Record Audio = Запис аудіо
Record Display = Запис відео
Reset Recording on Save/Load State = Скидати запис при збереженні / завантаженні
Restore Default Settings = Скинути налаштування
Rewind Snapshot Interval = Змінити частоту кадрів (багато пам'яті)
Rewind Snapshot Interval = Змінити частоту кадрів
Save path in installed.txt = Шлях до збережень в installed.txt
Save path in My Documents = Шлях до збережень в Моїх документах
Savestate Slot = Слот пам'яті