Gave access to rewind to earliest spot left.

This commit is contained in:
n-a-c-h
2005-04-10 13:47:44 +00:00
parent 2ee4e8184e
commit a6a4c5934b

View File

@@ -195,6 +195,7 @@ extern unsigned char RewindStates;
unsigned char *StateBackup = 0; unsigned char *StateBackup = 0;
unsigned char AllocatedRewindStates, LatestRewindPos, EarliestRewindPos; unsigned char AllocatedRewindStates, LatestRewindPos, EarliestRewindPos;
bool RewindPosPassed;
size_t rewind_state_size, cur_zst_size, old_zst_size; size_t rewind_state_size, cur_zst_size, old_zst_size;
@@ -214,10 +215,17 @@ void BackupCVFrame()
else if (MovieProcessing == 2) { zmv_rewind_save(LatestRewindPos, false); } else if (MovieProcessing == 2) { zmv_rewind_save(LatestRewindPos, false); }
copy_state_data(RewindBufferPos, memcpyinc, false); copy_state_data(RewindBufferPos, memcpyinc, false);
LatestRewindPos = (LatestRewindPos != AllocatedRewindStates-1) ? LatestRewindPos+1 : 0; if (RewindPosPassed)
if (LatestRewindPos == EarliestRewindPos)
{ {
EarliestRewindPos = (EarliestRewindPos != AllocatedRewindStates-1) ? EarliestRewindPos+1 : 0; EarliestRewindPos = (EarliestRewindPos != AllocatedRewindStates-1) ? EarliestRewindPos+1 : 0;
RewindPosPassed = false;
}
LatestRewindPos = (LatestRewindPos != AllocatedRewindStates-1) ? LatestRewindPos+1 : 0;
if (LatestRewindPos == EarliestRewindPos)
{
RewindPosPassed = true;
} }
RewindTimer = ActualRewindFrames; RewindTimer = ActualRewindFrames;
@@ -227,9 +235,10 @@ void RestoreCVFrame()
{ {
unsigned char *RewindBufferPos; unsigned char *RewindBufferPos;
if (LatestRewindPos != EarliestRewindPos) if (LatestRewindPos != EarliestRewindPos || RewindPosPassed)
{ {
LatestRewindPos = (LatestRewindPos) ? LatestRewindPos-1 : AllocatedRewindStates-1; LatestRewindPos = (LatestRewindPos) ? LatestRewindPos-1 : AllocatedRewindStates-1;
RewindPosPassed = false;
} }
RewindBufferPos = StateBackup + LatestRewindPos*rewind_state_size; RewindBufferPos = StateBackup + LatestRewindPos*rewind_state_size;
@@ -276,6 +285,7 @@ void InitRewindVars()
SetupRewindBuffer(); SetupRewindBuffer();
LatestRewindPos = 0; LatestRewindPos = 0;
EarliestRewindPos = 0; EarliestRewindPos = 0;
RewindPosPassed = false;
RewindTimer = 1; RewindTimer = 1;
} }