refactor part 3
This commit is contained in:
parent
95c12d0f02
commit
04b1358957
@ -125,12 +125,6 @@ int main()
|
||||
printf("%i) frame %i/%i (%1.f%s)> done\n", chunk_counter, frame_counter, frame_total, ((float)frame_counter/frame_total)*100, "%");
|
||||
chunk_counter++;
|
||||
|
||||
// int size;
|
||||
// char *batch_map_compress = LZS_Fast(batch_map, 256*192, &size);
|
||||
|
||||
// out.write(reinterpret_cast<const char*>(&size), sizeof(size));
|
||||
// out.write(batch_map_compress, size);
|
||||
|
||||
if (chunk_counter >= chunk_size)
|
||||
{
|
||||
|
||||
@ -143,13 +137,13 @@ int main()
|
||||
if (isRLE)
|
||||
{
|
||||
char *temp = RLE_Code(compress_data, frame_size*chunk_size, (int*)&compress_size);
|
||||
compress_flag = (compress_size << 1) | 0x01;
|
||||
compress_flag = (compress_size << 2) | 0xfffffffd;
|
||||
|
||||
if (compress_size > frame_size*chunk_size)
|
||||
{
|
||||
free(temp);
|
||||
compress_size = frame_size*chunk_size;
|
||||
compress_flag = (compress_size << 1) | 0x10;
|
||||
compress_flag = (compress_size << 2) | 0xfffffffe;
|
||||
memcpy(compress_data, frame_map, compress_size);
|
||||
printf("raw > ");
|
||||
raw_total++;
|
||||
@ -166,12 +160,12 @@ int main()
|
||||
else
|
||||
{
|
||||
compress_size = fastlz_compress_level(1, frame_map, frame_size*chunk_size, compress_data);
|
||||
compress_flag = (compress_size << 1);
|
||||
compress_flag = (compress_size << 2);
|
||||
|
||||
if (compress_size > frame_size*chunk_size)
|
||||
{
|
||||
compress_size = frame_size*chunk_size;
|
||||
compress_flag = (compress_size << 1) | 0x10;
|
||||
compress_flag = (compress_size << 2) | 0xfffffffe;
|
||||
memcpy(compress_data, frame_map, compress_size);
|
||||
printf("raw > ");
|
||||
raw_total++;
|
||||
|
86
src/main.cpp
86
src/main.cpp
@ -5,8 +5,10 @@
|
||||
#include <mm_types.h>
|
||||
#include <nds.h>
|
||||
#include <filesystem.h>
|
||||
#include <nds/arm9/background.h>
|
||||
#include <nds/arm9/cache.h>
|
||||
#include <nds/arm9/decompress.h>
|
||||
#include <nds/arm9/video.h>
|
||||
#include <nds/bios.h>
|
||||
#include <nds/debug.h>
|
||||
#include <nds/dma.h>
|
||||
@ -15,6 +17,7 @@
|
||||
#include <stdio.h>
|
||||
#include <maxmod9.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/_intsup.h>
|
||||
#include <sys/_stdint.h>
|
||||
|
||||
#define TIMER_SPEED (BUS_CLOCK/1024)
|
||||
@ -43,7 +46,7 @@ public:
|
||||
|
||||
void push() {
|
||||
if (isFull()) {
|
||||
fprintf(stdout, "Queue is full. Cannot push\n");
|
||||
fprintf(stderr, "Queue is full. Cannot push\n");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -58,7 +61,7 @@ public:
|
||||
|
||||
void pop() {
|
||||
if (isEmpty()) {
|
||||
fprintf(stdout, "Queue is empty. Cannot pop\n");
|
||||
fprintf(stderr, "Queue is empty. Cannot pop\n");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -73,25 +76,25 @@ public:
|
||||
};
|
||||
|
||||
int ptr_background;
|
||||
int ptr_subbackground;
|
||||
volatile int file_image = -1;
|
||||
volatile int file_music = -1;
|
||||
|
||||
volatile bool noQueue = false;
|
||||
constexpr int queue_size = 6;
|
||||
|
||||
constexpr int chunk_size = 256*192*10;
|
||||
constexpr int chunk_total = 6;
|
||||
constexpr int chunk_size = 10;
|
||||
volatile int chunk_counter = 0;
|
||||
volatile int chunk_current = 0;
|
||||
|
||||
constexpr int frame_size = 256*192;
|
||||
volatile int frame_counter = 0;
|
||||
uint8_t frame_decompress[chunk_size];
|
||||
uint8_t frame_buffer[chunk_size*chunk_total];
|
||||
CircularQueue frame_queue(chunk_total);
|
||||
uint8_t frame_decompress[frame_size*chunk_size];
|
||||
uint8_t frame_buffer[frame_size*chunk_size*queue_size];
|
||||
CircularQueue frame_queue(queue_size);
|
||||
|
||||
constexpr int music_buffer_size = 4000*16;
|
||||
|
||||
|
||||
|
||||
mm_word on_stream_request( mm_word length, mm_addr dest, mm_stream_formats format ) {
|
||||
if(file_music){
|
||||
size_t samplesize = 1;
|
||||
@ -146,7 +149,7 @@ int main(void) {
|
||||
|
||||
// DC_FlushAll();
|
||||
|
||||
// fprintf(stdout, "start debug\n");
|
||||
// fprintf(stderr, "start debug\n");
|
||||
// int cframe = 0;
|
||||
// int hframe = 0;
|
||||
// int ticks = 0;
|
||||
@ -159,21 +162,21 @@ int main(void) {
|
||||
// ticks = timerStop(0);
|
||||
// int milis = ((ticks%TIMER_SPEED)*1000) /TIMER_SPEED;
|
||||
|
||||
// if (milis > 50) fprintf(stdout, "%i\n", cframe);
|
||||
// if (milis > 50) fprintf(stderr, "%i\n", cframe);
|
||||
// cframe++;
|
||||
// }
|
||||
|
||||
// fprintf(stdout, "%i\n", hframe);
|
||||
// fprintf(stderr, "%i\n", hframe);
|
||||
|
||||
|
||||
// fseek(in, 0, SEEK_SET);
|
||||
|
||||
fprintf(stdout, "preload start\n");
|
||||
fprintf(stderr, "preload start\n");
|
||||
while(!frame_queue.isFull()) {
|
||||
frame_queue.push();
|
||||
LoadNextChunk(&frame_buffer[chunk_size*frame_queue.rear]);
|
||||
LoadNextChunk(&frame_buffer[frame_size*chunk_size*frame_queue.rear]);
|
||||
}
|
||||
fprintf(stdout, "preload done %i\n", frame_queue.current);
|
||||
fprintf(stderr, "preload done %i\n", frame_queue.current);
|
||||
|
||||
DC_FlushAll();
|
||||
|
||||
@ -184,7 +187,6 @@ int main(void) {
|
||||
sys.fifo_channel = FIFO_MAXMOD;
|
||||
mmInit( &sys );
|
||||
|
||||
|
||||
mm_stream mystream;
|
||||
mystream.sampling_rate = 22050;
|
||||
mystream.buffer_length = music_buffer_size;
|
||||
@ -197,14 +199,17 @@ int main(void) {
|
||||
|
||||
mmStreamOpen( &mystream );
|
||||
|
||||
// free(pal);
|
||||
// free(sagiri_bg);
|
||||
|
||||
while(1) {
|
||||
|
||||
irqSet(IRQ_VBLANK, onVBL);
|
||||
|
||||
if (!frame_queue.isFull()) {
|
||||
frame_queue.push();
|
||||
LoadNextChunk(&frame_buffer[chunk_size*frame_queue.rear]);
|
||||
// fprintf(stdout, "read %i\n", queue.rear);
|
||||
LoadNextChunk(&frame_buffer[frame_size*chunk_size*frame_queue.rear]);
|
||||
// fprintf(stderr, "read %i\n", queue.rear);
|
||||
}
|
||||
|
||||
if (!(frame_counter % 4)) mmStreamUpdate();
|
||||
@ -216,23 +221,23 @@ int main(void) {
|
||||
void onVBL()
|
||||
{
|
||||
// DC_FlushRange(&chunk[256*192*4 * queue.front + 256*192*chunk_counter], 256*192*4);
|
||||
if (!noQueue) dmaCopyAsynch(&frame_buffer[chunk_size*frame_queue.front + 256*192*chunk_counter], bgGetGfxPtr(ptr_background), 256*192);
|
||||
if (frame_queue.current < frame_queue.size*0.4) {
|
||||
fprintf(stdout, "%i\n ", chunk_counter);
|
||||
// fprintf(stdout, "count: %i, %i\n ", chunk_counter, frame_queue.current);
|
||||
}
|
||||
dmaCopyAsynch(&frame_buffer[frame_size*chunk_size*frame_queue.front + frame_size*chunk_counter], bgGetGfxPtr(ptr_background), frame_size);
|
||||
// if (frame_queue.current < frame_queue.size*0.4) {
|
||||
// fprintf(stderr, "%i\n ", chunk_counter);
|
||||
// fprintf(stderr, "count: %i, %i\n ", chunk_counter, frame_queue.current);
|
||||
// }
|
||||
|
||||
chunk_counter++;
|
||||
frame_counter++;
|
||||
|
||||
if (chunk_counter >= 10) {
|
||||
if (chunk_counter >= chunk_size) {
|
||||
if (!frame_queue.isEmpty()) {
|
||||
frame_queue.pop();
|
||||
chunk_counter = 0;
|
||||
} else {
|
||||
chunk_counter = 10;
|
||||
chunk_counter = chunk_size;
|
||||
noQueue = true;
|
||||
fprintf(stdout, "NO QUEUE!!!!!\n");
|
||||
fprintf(stderr, "NO QUEUE!!!!!\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -241,24 +246,27 @@ void LoadNextChunk(void *output)
|
||||
{
|
||||
uint32_t compress_size;
|
||||
read(file_image, &compress_size, sizeof(uint32_t));
|
||||
|
||||
uint32_t flag = compress_size & 0x3;
|
||||
compress_size = compress_size >> 2;
|
||||
|
||||
bool isRLE = compress_size & 0x01;
|
||||
compress_size = compress_size >> 1;
|
||||
|
||||
if (frame_queue.current < frame_queue.size*0.4)
|
||||
fprintf(stdout, "%i\n ", chunk_current);
|
||||
|
||||
if (isRLE)
|
||||
if (flag == 0x01) // RLE
|
||||
{
|
||||
read(file_image, frame_decompress, compress_size);
|
||||
decompress(frame_decompress, output, RLE);
|
||||
// fprintf(stderr, "RLE\n");
|
||||
}
|
||||
else if (flag == 0x10) // RAW
|
||||
{
|
||||
read(file_image, output, compress_size);
|
||||
// fread(output, 1, chunk_len, input);
|
||||
// decompress(buffer, output, RLE);
|
||||
// fprintf(stderr, "RAW\n");
|
||||
}
|
||||
else
|
||||
else if (flag == 0x00) // fastlz
|
||||
{
|
||||
// fread(buffer, 1, chunk_len, input);
|
||||
read(file_image, frame_decompress, compress_size);
|
||||
fastlz_decompress(frame_decompress, compress_size, output, chunk_size);
|
||||
fastlz_decompress(frame_decompress, compress_size, output, frame_size*chunk_size);
|
||||
// fprintf(stderr, "fastlz\n");
|
||||
}
|
||||
chunk_current++;
|
||||
noQueue = false;
|
||||
@ -290,7 +298,7 @@ size_t LoadFile(const char* file, unsigned char **buffer)
|
||||
|
||||
void wait_forever(const char* msg)
|
||||
{
|
||||
fprintf(stdout, "%s\n", msg);
|
||||
fprintf(stdout, "%s\n", msg);
|
||||
fprintf(stderr, "%s\n", msg);
|
||||
fprintf(stderr, "%s\n", msg);
|
||||
while (1) swiWaitForVBlank();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user