diff --git a/Makefile b/Makefile index 4880988..534cfd5 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ debug: prepare release: BUILD_TYPE := release release: CXXFLAGS := -O3 -ffast-math -march=native -fno-plt -fno-rtti -flto -fdata-sections -ffunction-sections -DNDEBUG -release: LDFLAGS += -O3 -ffast-math -march=native -Wl, -flto +release: LDFLAGS += -O3 -ffast-math -march=native -Wl,--gc-sections -flto release: TARGET := $(TARGET_NAME) release: prepare diff --git a/src/application.cpp b/src/application.cpp index 2689841..041859c 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -334,7 +334,6 @@ void Application::loop() AVFrame *frame = nullptr; uint32_t frameid = 0; uint32_t latestFrameid = 0; - uint32_t requestFrameId = 0; uint32_t frameTargetTime = Settings::fps > 0 ? 1000 / Settings::fps : 1000; int frameDelay = 0; while (_active) @@ -354,16 +353,15 @@ void Application::loop() videoBuffer.consume(); } - if (_state.requestFrame > 0 && Settings::forceRedraw > 0 && ++_state.requestFrame > Settings::forceRedraw) + if (_state.requestFrame > 0 && Settings::forceRedraw > 0) { - if (latestFrameid == requestFrameId) + if (++_state.requestFrame % Settings::forceRedraw == 0) { + std::cout << "[App] Request screen update" << std::endl; protocol.send(Command::Control(BTN_SCREEN_REFRESH)); - _state.requestFrame = 1; - requestFrameId = latestFrameid; + if (_state.requestFrame >= Settings::forceRedraw * 3) + _state.requestFrame = 0; } - else - _state.requestFrame = 0; } } @@ -380,7 +378,6 @@ void Application::loop() if (processFrameEvents(protocol, interface) && Settings::forceRedraw > 0) { _state.requestFrame = 1; - requestFrameId = latestFrameid; } } @@ -394,8 +391,8 @@ void Application::loop() if (_active && !Settings::vsync) { Uint32 frameEnd = SDL_GetTicks(); - frameDelay = frameTargetTime - (frameEnd - frameStart); - if(latestFrameid > 0 && latestFrameid != videoBuffer.latestId()) + frameDelay = frameTargetTime - (frameEnd - frameStart); + if (latestFrameid > 0 && latestFrameid != videoBuffer.latestId()) { SDL_Delay(1); frameStart = frameEnd;