Utility/ImageStream: Use Time class instead of UInt64 for frametime
This commit is contained in:
parent
c144435d4a
commit
88a0bf95ca
|
|
@ -11,6 +11,7 @@
|
|||
#include <Nazara/Core/Resource.hpp>
|
||||
#include <Nazara/Core/ResourceLoader.hpp>
|
||||
#include <Nazara/Core/ResourceParameters.hpp>
|
||||
#include <Nazara/Core/Time.hpp>
|
||||
#include <Nazara/Math/Vector2.hpp>
|
||||
#include <Nazara/Utility/Config.hpp>
|
||||
#include <Nazara/Utility/Enums.hpp>
|
||||
|
|
@ -35,7 +36,7 @@ namespace Nz
|
|||
ImageStream() = default;
|
||||
virtual ~ImageStream();
|
||||
|
||||
virtual bool DecodeNextFrame(void* frameBuffer, UInt64* frameTime) = 0;
|
||||
virtual bool DecodeNextFrame(void* frameBuffer, Time* frameTime) = 0;
|
||||
|
||||
virtual UInt64 GetFrameCount() const = 0;
|
||||
virtual PixelFormat GetPixelFormat() const = 0;
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ namespace Nz
|
|||
return true;
|
||||
}
|
||||
|
||||
bool DecodeNextFrame(void* frameBuffer, UInt64* frameTime) override
|
||||
bool DecodeNextFrame(void* frameBuffer, Time* frameTime) override
|
||||
{
|
||||
if (m_currentFrame >= m_frames.size())
|
||||
{
|
||||
|
|
@ -288,7 +288,7 @@ namespace Nz
|
|||
bool hasPartialRendering = false;
|
||||
bool terminated = false;
|
||||
|
||||
UInt64 frameTime = 0;
|
||||
Time frameTime = Time::Zero();
|
||||
|
||||
FrameMetadata nextFrame;
|
||||
while (!terminated)
|
||||
|
|
@ -384,7 +384,7 @@ namespace Nz
|
|||
|
||||
nextFrame.disposalMethod = (flags & 0b0001'1100) >> 2;
|
||||
nextFrame.time = frameTime;
|
||||
frameTime += delay * 10;
|
||||
frameTime += Time::Milliseconds(delay * 10);
|
||||
|
||||
if (flags & 0b0000'0001)
|
||||
{
|
||||
|
|
@ -651,7 +651,7 @@ namespace Nz
|
|||
struct FrameMetadata
|
||||
{
|
||||
std::size_t transparentIndex = std::numeric_limits<std::size_t>::max();
|
||||
UInt64 time;
|
||||
Time time;
|
||||
UInt64 streamOffset;
|
||||
UInt8 disposalMethod = 0;
|
||||
};
|
||||
|
|
@ -700,7 +700,7 @@ namespace Nz
|
|||
Bitset<UInt64> m_affectedPixels;
|
||||
ByteStream m_byteStream;
|
||||
LogicalScreenDescriptor m_header;
|
||||
UInt64 m_endFrameTime;
|
||||
Time m_endFrameTime;
|
||||
bool m_requiresFrameHistory;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -19,12 +19,14 @@ void CompareFrames(const Nz::ImageStream& gif, std::vector<Nz::UInt8>& frameData
|
|||
|
||||
SCENARIO("Streamed images", "[Utility][ImageStream]")
|
||||
{
|
||||
using namespace Nz::Literals;
|
||||
|
||||
std::vector<Nz::UInt8> frameData;
|
||||
|
||||
struct ExpectedFrame
|
||||
{
|
||||
std::shared_ptr<Nz::Image> referenceImage;
|
||||
Nz::UInt64 time;
|
||||
Nz::Time time;
|
||||
};
|
||||
|
||||
std::filesystem::path resourcePath = GetAssetDir();
|
||||
|
|
@ -36,23 +38,23 @@ SCENARIO("Streamed images", "[Utility][ImageStream]")
|
|||
std::array expectedFrames = {
|
||||
ExpectedFrame{
|
||||
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_bgnd/0.png"),
|
||||
0
|
||||
0_ms
|
||||
},
|
||||
ExpectedFrame{
|
||||
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_bgnd/1.png"),
|
||||
1000
|
||||
1000_ms
|
||||
},
|
||||
ExpectedFrame{
|
||||
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_bgnd/2.png"),
|
||||
2000
|
||||
2000_ms
|
||||
},
|
||||
ExpectedFrame{
|
||||
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_bgnd/3.png"),
|
||||
3000
|
||||
3000_ms
|
||||
},
|
||||
ExpectedFrame{
|
||||
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_bgnd/4.png"),
|
||||
4000
|
||||
4000_ms
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -67,7 +69,7 @@ SCENARIO("Streamed images", "[Utility][ImageStream]")
|
|||
frameData.resize(Nz::PixelFormatInfo::ComputeSize(gif->GetPixelFormat(), size.x, size.y, 1));
|
||||
|
||||
// Decode all frames in order
|
||||
Nz::UInt64 frameTime;
|
||||
Nz::Time frameTime;
|
||||
for (ExpectedFrame& expectedFrame : expectedFrames)
|
||||
{
|
||||
REQUIRE(expectedFrame.referenceImage);
|
||||
|
|
@ -80,7 +82,7 @@ SCENARIO("Streamed images", "[Utility][ImageStream]")
|
|||
|
||||
// Decoding the post-the-end frame fails but gives the end frametime
|
||||
REQUIRE_FALSE(gif->DecodeNextFrame(frameData.data(), &frameTime));
|
||||
CHECK(frameTime == 5000);
|
||||
CHECK(frameTime == 5000_ms);
|
||||
|
||||
// Decode frames in arbitrary order, to ensure results are corrects
|
||||
for (std::size_t frameIndex : { 2, 0, 3, 1, 4 })
|
||||
|
|
@ -102,23 +104,23 @@ SCENARIO("Streamed images", "[Utility][ImageStream]")
|
|||
std::array expectedFrames = {
|
||||
ExpectedFrame{
|
||||
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_prev/0.png"),
|
||||
0
|
||||
0_ms
|
||||
},
|
||||
ExpectedFrame{
|
||||
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_prev/1.png"),
|
||||
100
|
||||
100_ms
|
||||
},
|
||||
ExpectedFrame{
|
||||
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_prev/2.png"),
|
||||
1100
|
||||
1100_ms
|
||||
},
|
||||
ExpectedFrame{
|
||||
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_prev/3.png"),
|
||||
2100
|
||||
2100_ms
|
||||
},
|
||||
ExpectedFrame{
|
||||
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_prev/4.png"),
|
||||
3100
|
||||
3100_ms
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -133,7 +135,7 @@ SCENARIO("Streamed images", "[Utility][ImageStream]")
|
|||
frameData.resize(Nz::PixelFormatInfo::ComputeSize(gif->GetPixelFormat(), size.x, size.y, 1));
|
||||
|
||||
// Decode all frames in order
|
||||
Nz::UInt64 frameTime;
|
||||
Nz::Time frameTime;
|
||||
for (ExpectedFrame& expectedFrame : expectedFrames)
|
||||
{
|
||||
REQUIRE(expectedFrame.referenceImage);
|
||||
|
|
@ -146,7 +148,7 @@ SCENARIO("Streamed images", "[Utility][ImageStream]")
|
|||
|
||||
// Decoding the post-the-end frame fails but gives the end frametime
|
||||
REQUIRE_FALSE(gif->DecodeNextFrame(frameData.data(), &frameTime));
|
||||
CHECK(frameTime == 4100);
|
||||
CHECK(frameTime == 4100_ms);
|
||||
|
||||
// Decode frames in arbitrary order, to ensure results are corrects
|
||||
for (std::size_t frameIndex : { 2, 0, 3, 1, 4 })
|
||||
|
|
|
|||
Loading…
Reference in New Issue