76 lines
2.4 KiB
C
Raw Normal View History

2025-08-27 15:09:05 +09:00
#pragma once
#include "MediaAsset.h"
2025-08-28 15:13:40 +09:00
#include "Preloader.h"
2025-08-27 15:09:05 +09:00
#include <string>
2025-08-28 15:13:40 +09:00
#include <sstream>
#include <iomanip>
#include <chrono>
2025-08-27 15:09:05 +09:00
#include <mutex>
2025-08-28 15:13:40 +09:00
#include <random>
2025-08-27 15:09:05 +09:00
#include <android/native_window.h>
#include <android/native_window_jni.h>
class Renderer {
public:
2025-08-28 15:13:40 +09:00
enum class AnimationMode {
PAN = 0,
ZOOM = 1,
NONE = 2,
RANDOM = 3,
PAN_ONE_WAY = 4,
PAGE_TURN = 5
};
2025-08-27 15:09:05 +09:00
Renderer();
~Renderer();
void setNextMedia(int fd);
void renderFrame(ANativeWindow* window);
void release();
2025-08-28 15:13:40 +09:00
std::string getDebugInfo() const;
void setAnimationSpeed(float speed);
void setAnimationMode(int mode);
void setFadeDuration(int durationMs);
void setPageTurnDelay(int delayMs); // <-- 새로운 setter 선언
2025-08-27 15:09:05 +09:00
private:
std::mutex renderMutex_;
2025-08-28 15:13:40 +09:00
Preloader preloader_;
2025-08-27 15:09:05 +09:00
MediaAsset currentMedia_;
MediaAsset nextMedia_;
2025-08-28 15:13:40 +09:00
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; // <-- 삭제
2025-08-27 15:09:05 +09:00
std::chrono::steady_clock::time_point fadeStartTime_;
2025-08-28 15:13:40 +09:00
std::chrono::steady_clock::time_point pageTurnStartTime_; // <-- PAGE_TURN 대기 시작 시간 추가
2025-08-27 15:09:05 +09:00
bool isFading_ = false;
2025-08-28 15:13:40 +09:00
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);
2025-08-27 15:09:05 +09:00
void renderImageFrame(const MediaAsset& media, ANativeWindow_Buffer& buffer, float scale, float offsetX, float offsetY, float alpha);
};