mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-03 04:08:10 +03:00
196 lines
3.4 KiB
C++
196 lines
3.4 KiB
C++
/*
|
|
by korenkonder
|
|
GitHub/GitLab: korenkonder
|
|
*/
|
|
|
|
#include "aet.hpp"
|
|
#include "f2/struct.hpp"
|
|
#include "io/path.hpp"
|
|
#include "io/memory_stream.hpp"
|
|
|
|
static void aet_set_classic_read_inner(aet_set* as, stream& s);
|
|
static void aet_set_classic_write_inner(aet_set* as, stream& s);
|
|
static void aet_set_modern_read_inner(aet_set* as, stream& s);
|
|
static void aet_set_modern_write_inner(aet_set* as, stream& s);
|
|
|
|
aet_marker::aet_marker() : time() {
|
|
|
|
}
|
|
|
|
aet_marker::~aet_marker() {
|
|
|
|
}
|
|
|
|
aet_layer_video_3d::aet_layer_video_3d() {
|
|
|
|
}
|
|
|
|
aet_layer_video_3d::~aet_layer_video_3d() {
|
|
|
|
}
|
|
|
|
aet_transfer_mode::aet_transfer_mode() : mode(), flag(), matte() {
|
|
|
|
}
|
|
|
|
aet_layer_video::aet_layer_video() : _3d_init() {
|
|
|
|
}
|
|
|
|
aet_layer_video::~aet_layer_video() {
|
|
|
|
}
|
|
|
|
aet_layer_audio::aet_layer_audio() {
|
|
|
|
}
|
|
|
|
aet_layer_audio::~aet_layer_audio() {
|
|
|
|
}
|
|
|
|
aet_color::aet_color() : r(), g(), b() {
|
|
|
|
}
|
|
|
|
aet_video_src::aet_video_src() : sprite_index() {
|
|
|
|
}
|
|
|
|
aet_video_src::~aet_video_src() {
|
|
|
|
}
|
|
|
|
aet_video::aet_video() : width(), height(), fpf() {
|
|
|
|
}
|
|
|
|
aet_video::~aet_video() {
|
|
|
|
}
|
|
|
|
aet_audio::aet_audio() : sound_index() {
|
|
|
|
}
|
|
|
|
aet_layer::aet_layer() : start_time(), end_time(), offset_time(), time_scale(), flags(),
|
|
quality(), item_type(), item(), parent(), video(), video_init(), audio(), audio_init() {
|
|
|
|
}
|
|
|
|
aet_layer::~aet_layer() {
|
|
|
|
}
|
|
|
|
aet_camera::aet_camera() {
|
|
|
|
}
|
|
|
|
aet_camera::~aet_camera() {
|
|
|
|
}
|
|
|
|
aet_scene::aet_scene() : start_time(), end_time(), fps(), width(), height(), camera_init() {
|
|
|
|
}
|
|
|
|
aet_scene::~aet_scene() {
|
|
|
|
}
|
|
|
|
aet_set::aet_set() : ready(), modern(), big_endian(), is_x() {
|
|
|
|
}
|
|
|
|
aet_set::~aet_set() {
|
|
|
|
}
|
|
|
|
void aet_set::pack_file(void** data, size_t* size) {
|
|
if (!data || !ready)
|
|
return;
|
|
|
|
memory_stream s;
|
|
s.open();
|
|
if (!modern)
|
|
aet_set_classic_write_inner(this, s);
|
|
else
|
|
aet_set_modern_write_inner(this, s);
|
|
s.align_write(0x10);
|
|
s.copy(data, size);
|
|
}
|
|
|
|
void aet_set::unpack_file(const void* data, size_t size, bool modern) {
|
|
if (!data || !size)
|
|
return;
|
|
|
|
memory_stream s;
|
|
s.open(data, size);
|
|
if (!modern)
|
|
aet_set_classic_read_inner(this, s);
|
|
else
|
|
aet_set_modern_read_inner(this, s);
|
|
}
|
|
|
|
static void aet_set_classic_read_inner(aet_set* as, stream& s) {
|
|
as->ready = true;
|
|
as->modern = false;
|
|
as->big_endian = false;
|
|
as->is_x = false;
|
|
}
|
|
|
|
static void aet_set_classic_write_inner(aet_set* as, stream& s) {
|
|
|
|
}
|
|
|
|
static void aet_set_modern_read_inner(aet_set* as, stream& s) {
|
|
f2_struct st;
|
|
st.read(s);
|
|
if (st.header.signature != reverse_endianness_uint32_t('AETC') || !st.data.size())
|
|
return;
|
|
|
|
bool big_endian = st.header.use_big_endian;
|
|
|
|
memory_stream s_aetc;
|
|
s_aetc.open(st.data);
|
|
s_aetc.big_endian = big_endian;
|
|
|
|
bool is_x = false;
|
|
|
|
as->ready = true;
|
|
as->modern = true;
|
|
as->big_endian = big_endian;
|
|
as->is_x = is_x;
|
|
}
|
|
|
|
static void aet_set_modern_write_inner(aet_set* as, stream& s) {
|
|
bool big_endian = as->big_endian;
|
|
bool is_x = as->is_x;
|
|
|
|
memory_stream s_aetc;
|
|
s_aetc.open();
|
|
s_aetc.big_endian = big_endian;
|
|
|
|
uint32_t off;
|
|
enrs e;
|
|
enrs_entry ee;
|
|
pof pof;
|
|
|
|
off = align_val(0, 0x10);
|
|
|
|
f2_struct st;
|
|
s_aetc.align_write(0x10);
|
|
s_aetc.copy(st.data);
|
|
s_aetc.close();
|
|
|
|
st.enrs = e;
|
|
st.pof = pof;
|
|
|
|
st.header.signature = reverse_endianness_uint32_t('AETC');
|
|
st.header.length = 0x20;
|
|
st.header.use_big_endian = big_endian;
|
|
st.header.use_section_size = true;
|
|
|
|
st.write(s, true, is_x);
|
|
}
|