#pragma once #include "MediaAsset.h" #include "Preloader.h" #include #include #include #include #include #include #include #include class Renderer { public: enum class AnimationMode { PAN = 0, ZOOM = 1, NONE = 2, RANDOM = 3, PAN_ONE_WAY = 4, PAGE_TURN = 5 }; Renderer(); ~Renderer(); void setNextMedia(int fd); void renderFrame(ANativeWindow* window); void release(); std::string getDebugInfo() const; void setAnimationSpeed(float speed); void setAnimationMode(int mode); void setFadeDuration(int durationMs); void setPageTurnDelay(int delayMs); // <-- 새로운 setter 선언 private: std::mutex renderMutex_; Preloader preloader_; MediaAsset currentMedia_; MediaAsset nextMedia_; AnimationMode configuredAnimationMode_ = AnimationMode::PAN; AnimationMode activeAnimationMode_ = AnimationMode::PAN; long long fadeDurationMs_ = 3000; long long pageTurnDelayMs_ = 5000; // <-- PAGE_TURN 모드 대기 시간 (기본 5초) float animationSpeed_ = 1.0f; // std::chrono::steady_clock::time_point transitionStartTime_; // <-- 삭제 // bool isTransitioning_ = false; // <-- 삭제 // float transitionProgress_ = 0.0f; // <-- 삭제 std::chrono::steady_clock::time_point fadeStartTime_; std::chrono::steady_clock::time_point pageTurnStartTime_; // <-- PAGE_TURN 대기 시작 시간 추가 bool isFading_ = false; float currentOffsetX_ = 0.0f; float currentOffsetY_ = 0.0f; int xDirection_ = 1; int yDirection_ = 1; float currentZoom_ = 1.0f; int zoomDirection_ = 1; bool animationCycleComplete_ = false; std::mt19937 randomEngine_; void determineActiveAnimationMode(); void calculateFitScaleAndOffset(const MediaAsset& media, int surfaceWidth, int surfaceHeight, float& outScale, float& outOffsetX, float& outOffsetY) const; void drawMedia(ANativeWindow_Buffer& buffer, MediaAsset& media, float alpha, float offsetX, float offsetY, float scaleMultiplier); void renderVideoFrame(MediaAsset& media, ANativeWindow_Buffer& buffer, float scale, float offsetX, float offsetY, float alpha); void renderImageFrame(const MediaAsset& media, ANativeWindow_Buffer& buffer, float scale, float offsetX, float offsetY, float alpha); };