diff --git a/include/Nazara/Utility/ImageStream.hpp b/include/Nazara/Utility/ImageStream.hpp index a5fdf448e..caf1413db 100644 --- a/include/Nazara/Utility/ImageStream.hpp +++ b/include/Nazara/Utility/ImageStream.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -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; diff --git a/src/Nazara/Utility/Formats/GIFLoader.cpp b/src/Nazara/Utility/Formats/GIFLoader.cpp index e92f83238..a8b86c64e 100644 --- a/src/Nazara/Utility/Formats/GIFLoader.cpp +++ b/src/Nazara/Utility/Formats/GIFLoader.cpp @@ -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::max(); - UInt64 time; + Time time; UInt64 streamOffset; UInt8 disposalMethod = 0; }; @@ -700,7 +700,7 @@ namespace Nz Bitset m_affectedPixels; ByteStream m_byteStream; LogicalScreenDescriptor m_header; - UInt64 m_endFrameTime; + Time m_endFrameTime; bool m_requiresFrameHistory; }; diff --git a/tests/UnitTests/Engine/Utility/ImageStreamLoading.cpp b/tests/UnitTests/Engine/Utility/ImageStreamLoading.cpp index 9a1aab4a9..75acbc7e4 100644 --- a/tests/UnitTests/Engine/Utility/ImageStreamLoading.cpp +++ b/tests/UnitTests/Engine/Utility/ImageStreamLoading.cpp @@ -19,12 +19,14 @@ void CompareFrames(const Nz::ImageStream& gif, std::vector& frameData SCENARIO("Streamed images", "[Utility][ImageStream]") { + using namespace Nz::Literals; + std::vector frameData; struct ExpectedFrame { std::shared_ptr 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 })