#pragma once #include "MediaAsset.h" #include #include #include #include #include #include class Renderer { public: Renderer(); ~Renderer(); void setNextMedia(int fd); void renderFrame(ANativeWindow* window); void release(); private: std::mutex renderMutex_; MediaAsset currentMedia_; MediaAsset nextMedia_; std::string currentMediaPath_; std::chrono::steady_clock::time_point mediaStartTime_; std::chrono::steady_clock::time_point fadeStartTime_; bool isFading_ = false; void drawMedia(ANativeWindow_Buffer& buffer, const MediaAsset& media, float alpha, float offsetElapsedMs); void updateOffset(float& offsetX, float& offsetY, float overflowX, float overflowY, long long elapsedMs); void renderVideoFrame(const 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); };