36 lines
1.1 KiB
C
36 lines
1.1 KiB
C
|
|
#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);
|
||
|
|
};
|