mirror of
https://github.com/vgmstream/vgmstream.git
synced 2025-02-14 09:52:32 +01:00
doc
This commit is contained in:
parent
2928d402a0
commit
e3f714b818
@ -15,7 +15,7 @@
|
|||||||
* OG code isn't too optimized though.
|
* OG code isn't too optimized though.
|
||||||
*
|
*
|
||||||
* Reverse engineered from exes, thanks to Kelebek1 and AceKombat for help and debugging.
|
* Reverse engineered from exes, thanks to Kelebek1 and AceKombat for help and debugging.
|
||||||
* Output has been compared to memdumps and should be accurate with minor +-diffs.
|
* Output has been compared to memdumps and should be accurate with minor +-diffs (vs MSVC 22 /O2).
|
||||||
*
|
*
|
||||||
* Even though some parts can be simplified/optimized code tries to emulate what source code
|
* Even though some parts can be simplified/optimized code tries to emulate what source code
|
||||||
* may look like, undoing unrolled/vectorized parts. Functions marked as 'inline' don't exist in
|
* may look like, undoing unrolled/vectorized parts. Functions marked as 'inline' don't exist in
|
||||||
@ -147,7 +147,7 @@ static inline int unpack_get_bits(uint8_t* src, int* p_byte_pos, int* p_bit_pos,
|
|||||||
//
|
//
|
||||||
// Bands encode less coefs than dst may hold, so 'positions' are used to put coefs
|
// Bands encode less coefs than dst may hold, so 'positions' are used to put coefs
|
||||||
// non-linearly, where unset indexes are 0 (dst must be memset before calling unpack frame).
|
// non-linearly, where unset indexes are 0 (dst must be memset before calling unpack frame).
|
||||||
// dst should be 1024, though usually only lower 512 (max step is 390 + ((1<<7) - 1)).
|
// dst should be 1024, though usually only lower 512 are used (max step is 390 + ((1<<7) - 1)).
|
||||||
static void unpack_frame(uint8_t* src, float* dst, int steps_size, void* unused, int bitrate_index) {
|
static void unpack_frame(uint8_t* src, float* dst, int steps_size, void* unused, int bitrate_index) {
|
||||||
|
|
||||||
// copy coefs counts as they may be modified below
|
// copy coefs counts as they may be modified below
|
||||||
@ -461,7 +461,7 @@ void transform_frame(void* unused1, float* src, float* dst, void* unused2, float
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Reorder output (input buf may be reused as output here as there is no overlap).
|
// Reorder output (input buf may be reused as output here as there is no overlap).
|
||||||
// Note that input is 512 coefs but output is 1024 samples (externally combined with samples)
|
// Note that input is 512 coefs but output is 1024 samples (externally combined with prev samples)
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
for (int i = 0; i < 128; i++) {
|
for (int i = 0; i < 128; i++) {
|
||||||
dst[pos++] = real[128 + i];
|
dst[pos++] = real[128 + i];
|
||||||
@ -522,13 +522,13 @@ static void decode_frame(unsigned char* src, int tracks, int channels, float* ds
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setup_flag) // MOD: expect only 1 block per call
|
if (setup_flag) // OG MOD: changed to expect only 1 block per call
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// decode 'current block of frames' (writes 512 samples, plus setups 'prev' buf)
|
// decode 'current block of frames' (writes 512 samples, plus setups 'prev' buf)
|
||||||
{
|
{
|
||||||
//uint8_t* src_block = &src[channels * tracks * frame_size]; // 2nd block in src in OG code
|
//uint8_t* src_block = &src[channels * tracks * frame_size]; // 2nd block in src in OG code
|
||||||
uint8_t* src_block = &src[0]; // MOD: expect only 1 block per call
|
uint8_t* src_block = &src[0]; // OG MOD: changed to expect only 1 block per call
|
||||||
|
|
||||||
for (int track = 0; track < tracks; track++) {
|
for (int track = 0; track < tracks; track++) {
|
||||||
int frame_num = channels * track;
|
int frame_num = channels * track;
|
||||||
@ -568,7 +568,7 @@ struct ka1a_handle_t {
|
|||||||
|
|
||||||
// state
|
// state
|
||||||
bool setup_flag; // next frame will be used as setup and won't output samples
|
bool setup_flag; // next frame will be used as setup and won't output samples
|
||||||
float temp[1024 * 2]; // fft + coef buf
|
float temp[1024 * 2]; // fft + spectrum coefs buf
|
||||||
float* prev; // at least samples * channels * tracks
|
float* prev; // at least samples * channels * tracks
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user