Skip to content

Commit

Permalink
Merge branch 'scene_cache'
Browse files Browse the repository at this point in the history
  • Loading branch information
ePi5131 committed Jul 8, 2023
2 parents 9030cc5 + cb6c0f7 commit 789fb40
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 9 deletions.
1 change: 1 addition & 0 deletions patch/offset_address.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ namespace OFS {
constexpr i32 memory_ptr = 0x01a5328;

constexpr i32 fast_process = 0x2308a0;
constexpr i32 is_saving = 0x1a52e4;

constexpr i32 CreateFigure_var_ptr = 0x1e4798;
constexpr i32 CreateFigure_circle_func_call = 0x073882;
Expand Down
25 changes: 20 additions & 5 deletions patch/patch_scene_cache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,30 @@
#include "patch_scene_cache.hpp"

#ifdef PATCH_SWITCH_SCENE_CACHE


static int get_state_idx(bool is_saving, bool fast_process) {
if (is_saving) return 1;
if (fast_process) return 2;
return 0;
};

static AviUtl::SharedMemoryInfo* smem_info[50][3] = {};

namespace patch {

void* __cdecl scene_cache_t::get_scene_image_wrap(ExEdit::ObjectFilterIndex ofi, ExEdit::FilterProcInfo* efpip, int scene_idx, int frame, int subframe, int* w, int* h) {
int* SceneDisplaying = (int*)(GLOBAL::exedit_base + OFS::ExEdit::SceneDisplaying);
if (*SceneDisplaying != 0) {
return get_scene_image(ofi, efpip, scene_idx, frame, subframe, w, h);
}

auto a_exfunc = (AviUtl::ExFunc*)(GLOBAL::aviutl_base + OFS::AviUtl::exfunc);

void* smem_ptr = a_exfunc->get_shared_mem(make_cache_key1(scene_idx), (frame << 7) | subframe, nullptr);
auto state_idx = get_state_idx(*(int*)(GLOBAL::exedit_base + OFS::ExEdit::is_saving), *(int*)(GLOBAL::exedit_base + OFS::ExEdit::fast_process));
auto& smem = smem_info[scene_idx][state_idx];

void* smem_ptr = a_exfunc->get_shared_mem(std::bit_cast<int32_t>(&smem), (frame << 7) | subframe, smem);
if (smem_ptr != nullptr) {
reinterpret_cast<void(__cdecl*)(int, int*, int*, ExEdit::FilterProcInfo*)>(GLOBAL::exedit_base + OFS::ExEdit::get_scene_size)(scene_idx, w, h, efpip);
return smem_ptr;
Expand All @@ -45,9 +58,8 @@ namespace patch {
yc_size = 6;
flag = 0x13000002;
}
void* smem_ptr = a_exfunc->create_shared_mem(make_cache_key1(scene_idx), (frame << 7) | subframe, *h * efpip->scene_line * yc_size, nullptr);
void* smem_ptr = a_exfunc->create_shared_mem(std::bit_cast<int32_t>(&smem), (frame << 7) | subframe, *h * efpip->scene_line * yc_size, &smem);
if (smem_ptr == nullptr) return img_ptr;

memcpy(smem_ptr, img_ptr, *h * efpip->scene_line * yc_size);
}
return img_ptr;
Expand All @@ -56,7 +68,10 @@ namespace patch {
void scene_cache_t::delete_scene_cache() {
auto a_exfunc = (AviUtl::ExFunc*)(GLOBAL::aviutl_base + OFS::AviUtl::exfunc);
for (int i = 1; i < 50; i++) {
a_exfunc->delete_shared_mem(make_cache_key1(i), nullptr);
for (int state = 0; state < 2; state++) {
auto& smem = smem_info[i][state];
a_exfunc->delete_shared_mem(std::bit_cast<int32_t>(&smem), smem);
}
}
}

Expand Down
5 changes: 1 addition & 4 deletions patch/patch_scene_cache.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,7 @@ namespace patch {
bool enabled_i;
inline static const char key[] = "scene_cache";

inline static int make_cache_key1(int idx) {
return reinterpret_cast<int>(&scene_cache_t::get_scene_image) + idx;
}
public:
public:

void init() {
enabled_i = enabled;
Expand Down

0 comments on commit 789fb40

Please sign in to comment.