diff --git a/src/defs.h b/src/defs.h index b0685db8..f809f7ff 100644 --- a/src/defs.h +++ b/src/defs.h @@ -12,8 +12,11 @@ // #define USE_PROPERTY_INTERFACE_FOR_FB -// Enable double buffering and vsync based page flipping -#define DOUBLE_BUFFER +// Enable multiple buffering and vsync based page flipping +#define MULTI_BUFFER + +// The number of buffers used by multi-buffering +#define NBUFFERS 3 #define VSYNCINT 16 @@ -35,12 +38,10 @@ #define BIT_CLEAR 0x100 #define BIT_SPARE 0x200 -#define OFFSET_LAST_BUFFER 10 -#define OFFSET_DISP_BUFFER 12 +#define OFFSET_LAST_BUFFER 12 #define OFFSET_CURR_BUFFER 14 #define MASK_LAST_BUFFER (3 << OFFSET_LAST_BUFFER) -#define MASK_DISP_BUFFER (3 << OFFSET_DISP_BUFFER) #define MASK_CURR_BUFFER (3 << OFFSET_CURR_BUFFER) // R0 return value bits diff --git a/src/osd.c b/src/osd.c index b30929f2..82549dca 100644 --- a/src/osd.c +++ b/src/osd.c @@ -189,9 +189,6 @@ void osd_clear() { if (active) { memset(buffer, 0, sizeof(buffer)); osd_update((uint32_t *)fb, pitch); -#ifdef DOUBLE_BUFFER - osd_update((uint32_t *)(fb + SCREEN_HEIGHT * pitch), pitch); -#endif active = 0; RPI_SetGpioValue(LED1_PIN, active); update_palette(); @@ -212,9 +209,6 @@ void osd_set(int line, int attr, char *text) { } strncpy(buffer + line * LINELEN, text, len); osd_update((uint32_t *)fb, pitch); -#ifdef DOUBLE_BUFFER - osd_update((uint32_t *)(fb + SCREEN_HEIGHT * pitch), pitch); -#endif } diff --git a/src/rgb_to_fb.S b/src/rgb_to_fb.S index f6dce3a5..216f8fea 100644 --- a/src/rgb_to_fb.S +++ b/src/rgb_to_fb.S @@ -22,7 +22,7 @@ ldr r0, [r0] tst r0, #(1<width = w; fbp->height = SCREEN_HEIGHT; fbp->virtual_width = w; -#ifdef DOUBLE_BUFFER - fbp->virtual_height = SCREEN_HEIGHT * 3; +#ifdef MULTI_BUFFER + fbp->virtual_height = SCREEN_HEIGHT * NBUFFERS; #else fbp->virtual_height = SCREEN_HEIGHT; #endif @@ -335,7 +335,7 @@ static int calibrate_clock() { // Correct for non-interlaced mode if (!(frame_time & INTERLACED_FLAG)) { - //f2 *= 625.0 / 624.0; + f2 *= 626.0 / 624.0; } // Dump the target PLL frequency @@ -738,7 +738,7 @@ int total_N_frames(int n, int mode7, int elk, int chars_per_line) { } #endif -#ifdef DOUBLE_BUFFER +#ifdef MULTI_BUFFER void swapBuffer(int buffer) { // Flush the previous response from the GPU->ARM mailbox // Doing it like this avoids stalling for the response