Adjust FIFO player object ranges

A single object can be selected instead of 2 (it was already inclusive internally), and the maximum value is the highest number of objects in any frame (minus 1) to reduce jank when multiple frames are being played back.
This commit is contained in:
Pokechu22 2021-02-08 16:10:57 -08:00
parent 5ebe63b175
commit 263ca79aae
3 changed files with 18 additions and 5 deletions

View File

@ -189,6 +189,18 @@ bool FifoPlayer::IsRunningWithFakeVideoInterfaceUpdates() const
return m_File->ShouldGenerateFakeVIUpdates();
}
u32 FifoPlayer::GetMaxObjectCount() const
{
u32 result = 0;
for (auto& frame : m_FrameInfo)
{
const u32 count = static_cast<u32>(frame.objectStarts.size());
if (count > result)
result = count;
}
return result;
}
u32 FifoPlayer::GetFrameObjectCount() const
{
if (m_CurrentFrame < m_FrameInfo.size())

View File

@ -74,6 +74,7 @@ public:
bool IsPlaying() const;
FifoDataFile* GetFile() const { return m_File.get(); }
u32 GetMaxObjectCount() const;
u32 GetFrameObjectCount() const;
u32 GetCurrentFrameNum() const { return m_CurrentFrame; }
const AnalyzedFrameInfo& GetAnalyzedFrameInfo(u32 frame) const { return m_FrameInfo[frame]; }

View File

@ -298,16 +298,16 @@ void FIFOPlayerWindow::OnFIFOLoaded()
{
FifoDataFile* file = FifoPlayer::GetInstance().GetFile();
auto object_count = FifoPlayer::GetInstance().GetFrameObjectCount();
auto object_count = FifoPlayer::GetInstance().GetMaxObjectCount();
auto frame_count = file->GetFrameCount();
m_frame_range_to->setMaximum(frame_count);
m_object_range_to->setMaximum(object_count);
m_object_range_to->setMaximum(object_count - 1);
m_frame_range_from->setValue(0);
m_object_range_from->setValue(0);
m_frame_range_to->setValue(frame_count);
m_object_range_to->setValue(object_count);
m_object_range_to->setValue(object_count - 1);
UpdateInfo();
UpdateLimits();
@ -336,8 +336,8 @@ void FIFOPlayerWindow::UpdateLimits()
{
m_frame_range_from->setMaximum(std::max(m_frame_range_to->value() - 1, 0));
m_frame_range_to->setMinimum(m_frame_range_from->value() + 1);
m_object_range_from->setMaximum(std::max(m_object_range_to->value() - 1, 0));
m_object_range_to->setMinimum(m_object_range_from->value() + 1);
m_object_range_from->setMaximum(m_object_range_to->value());
m_object_range_to->setMinimum(m_object_range_from->value());
}
void FIFOPlayerWindow::UpdateControls()