36 lines
1.1 KiB
C
Raw Normal View History

2025-08-27 15:09:05 +09:00
#pragma once
#include "MediaAsset.h"
#include <chrono>
#include <string>
#include <vector>
#include <mutex>
#include <android/native_window.h>
#include <android/native_window_jni.h>
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);
};