1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-02-01 12:57:51 +02:00

fix tutorial video

This commit is contained in:
Laserlicht 2024-12-07 00:08:19 +01:00
parent 3115894307
commit 2abfaa0853
2 changed files with 15 additions and 3 deletions

View File

@ -327,6 +327,11 @@ bool CVideoInstance::videoEnded()
return getCurrentFrame() == nullptr;
}
CVideoInstance::CVideoInstance()
: startTimeInitialized(false), deactivationStartTimeHandling(false)
{
}
CVideoInstance::~CVideoInstance()
{
sws_freeContext(sws);
@ -391,8 +396,11 @@ void CVideoInstance::tick(uint32_t msPassed)
if(videoEnded())
throw std::runtime_error("Video already ended!");
if(startTime == std::chrono::steady_clock::time_point())
if(!startTimeInitialized)
{
startTime = std::chrono::steady_clock::now();
startTimeInitialized = true;
}
auto nowTime = std::chrono::steady_clock::now();
double difference = std::chrono::duration_cast<std::chrono::milliseconds>(nowTime - startTime).count() / 1000.0;
@ -410,17 +418,18 @@ void CVideoInstance::tick(uint32_t msPassed)
void CVideoInstance::activate()
{
if(deactivationStartTime != std::chrono::steady_clock::time_point())
if(deactivationStartTimeHandling)
{
auto pauseDuration = std::chrono::steady_clock::now() - deactivationStartTime;
startTime += pauseDuration;
deactivationStartTime = std::chrono::steady_clock::time_point();
deactivationStartTimeHandling = false;
}
}
void CVideoInstance::deactivate()
{
deactivationStartTime = std::chrono::steady_clock::now();
deactivationStartTimeHandling = true;
}
struct FFMpegFormatDescription

View File

@ -78,6 +78,8 @@ class CVideoInstance final : public IVideoInstance, public FFMpegStream
Point dimensions;
/// video playback start time point
bool startTimeInitialized;
bool deactivationStartTimeHandling;
std::chrono::steady_clock::time_point startTime;
std::chrono::steady_clock::time_point deactivationStartTime;
@ -86,6 +88,7 @@ class CVideoInstance final : public IVideoInstance, public FFMpegStream
const int MAX_FRAMESKIP = 5;
public:
CVideoInstance();
~CVideoInstance();
void openVideo();