platform, fix vertical scaling, aspect ratio handling (gp2x, psp)
authorkub <derkub@gmail.com>
Wed, 10 Nov 2021 22:08:49 +0000 (23:08 +0100)
committerkub <derkub@gmail.com>
Wed, 10 Nov 2021 22:33:18 +0000 (23:33 +0100)
platform/gp2x/emu.c
platform/psp/emu.c

index 70c6d3d..d01da07 100644 (file)
@@ -256,8 +256,11 @@ static int ld_left, ld_lines; // numbers in Q1 format
 \r
 static int EmuScanBegin16_ld(unsigned int num)\r
 {\r
-       if ((signed int)(ld_counter - num) > 100)\r
-               ld_counter = 0;\r
+       if ((signed int)(ld_counter - num) > 100) {\r
+               // vsync, offset so that the upscaled image is centered\r
+               ld_counter = 120 - (120-num) * (ld_lines+2)/ld_lines;\r
+               ld_left = ld_lines;\r
+       }\r
 \r
        if (emu_scan_begin)\r
                return emu_scan_begin(ld_counter);\r
@@ -586,6 +589,12 @@ void emu_video_mode_change(int start_line, int line_count, int start_col, int co
        int scalex = 320, scaley = 240;\r
        int ln_offs = 0;\r
 \r
+       /* NTSC always has 224 visible lines, anything smaller has bars */\r
+       if (line_count < 224 && line_count > 144) {\r
+               start_line -= (224-line_count) /2;\r
+               line_count = 224;\r
+       }\r
+\r
        /* line doubling for swscaling, also needed for bg frames */\r
        if (currentConfig.vscaling == EOPT_SCALE_SW && line_count < 240) {\r
                ld_lines = ld_left = 2*line_count / (240 - line_count);\r
index 59ccab5..4b98db0 100644 (file)
@@ -679,6 +679,12 @@ void plat_update_volume(int has_changed, int is_up)
 /* prepare for MD screen mode change */
 void emu_video_mode_change(int start_line, int line_count, int start_col, int col_count)
 {
+       /* NTSC always has 224 visible lines, anything smaller has bars */
+       if (line_count < 224 && line_count > 144) {
+               start_line -= (224-line_count) /2;
+               line_count = 224;
+       }
+
        out_y = start_line; out_x = start_col;
        out_h = line_count; out_w = col_count;