From e7c680fdfd958eab93cbee1d5a89c677fed190dc Mon Sep 17 00:00:00 2001 From: IanSB Date: Sat, 23 Mar 2019 03:25:24 +0000 Subject: [PATCH] remove update_param_range() clipping, replace with silent clipping --- src/geometry.c | 35 +++++++++-------------------------- src/osd.c | 10 +++------- src/rgb_to_fb.S | 3 ++- 3 files changed, 14 insertions(+), 34 deletions(-) diff --git a/src/geometry.c b/src/geometry.c index e5127357..a9e1b35d 100644 --- a/src/geometry.c +++ b/src/geometry.c @@ -63,25 +63,6 @@ static geometry_t default_geometry; static geometry_t mode7_geometry; static int scaling = 0; -static void update_param_range() { - int max; - // Set the range of the H_WIDTH param based on FB_WIDTH - max = geometry->fb_width; - params[H_WIDTH].max = max; - if (geometry->h_width > max) { - geometry->h_width = max; - } - // Set the range of the V_HEIGHT param based on FB_HEIGHT - max = geometry->fb_height; - - params[V_HEIGHT].max = max; - if (geometry->v_height > max) { - geometry->v_height = max; - - } - -} - void geometry_init(int version) { // These are Beeb specific defaults so the geometry property can be ommitted mode7_geometry.v_offset = 128; @@ -129,8 +110,6 @@ void geometry_init(int version) { void geometry_set_mode(int mode) { mode7 = mode; geometry = mode ? &mode7_geometry : &default_geometry; - update_param_range(); - } int geometry_get_value(int num) { @@ -199,15 +178,12 @@ void geometry_set_value(int num, int value) { break; case FB_WIDTH: geometry->fb_width = value; - update_param_range(); break; case FB_HEIGHT: geometry->fb_height = value; - update_param_range(); break; case FB_HEIGHTX2: geometry->fb_heightx2 = value; - update_param_range(); break; case FB_BPP: geometry->fb_bpp = value; @@ -260,6 +236,14 @@ void geometry_get_fb_params(capture_info_t *capinfo) { capinfo->bpp = geometry->fb_bpp; capinfo->px_sampling = geometry->px_sampling; + if (capinfo->chars_per_line > (geometry->fb_width >> 3)) { + capinfo->chars_per_line = geometry->fb_width >> 3; + } + + if (capinfo->nlines > geometry->fb_height) { + capinfo->nlines = geometry->fb_height; + } + uint32_t h_size = (*PIXELVALVE2_HORZB) & 0xFFFF; uint32_t v_size = (*PIXELVALVE2_VERTB) & 0xFFFF; @@ -276,8 +260,7 @@ void geometry_get_fb_params(capture_info_t *capinfo) { v_size43 = h_size * 3 / 4; } - int adjusted_width = mode7 ? geometry->h_width * 4 / 3 : geometry->h_width; // workaround mode 7 width so it looks like other modes - + int adjusted_width = mode7 ? geometry->h_width * 4 / 3 : geometry->h_width; // workaround mode 7 width so it looks like other modes int hscale = h_size43 / adjusted_width; int hborder = (h_size - (adjusted_width * hscale)) / hscale; int hborder43 = (h_size43 - (adjusted_width * hscale)) / hscale; diff --git a/src/osd.c b/src/osd.c index 9308e479..c97c8969 100644 --- a/src/osd.c +++ b/src/osd.c @@ -1332,7 +1332,7 @@ void get_props_sample_geometry(char *buffer) { char *prop; // Initialize the CPLD sampling points - for (int p = 0; p < 3; p++) { //reads geometry twice to workaround limiting problem + for (int p = 0; p < 2; p++) { //reads geometry twice to workaround limiting problem for (int m7 = 0; m7 <= 1; m7++) { char *propname; if (m7) { @@ -1352,9 +1352,7 @@ void get_props_sample_geometry(char *buffer) if (prop) { cpld->set_mode(m7); geometry_set_mode(m7); - if (p != 1) { - log_info("config.txt: %s = %s", propname, prop); - } + log_info("config.txt: %s = %s", propname, prop); char *prop2 = strtok(prop, ","); int i = 0; while (prop2) { @@ -1373,9 +1371,7 @@ void get_props_sample_geometry(char *buffer) log_info("cpld: %s = %d", param->name, val); cpld->set_value(param->key, val); } else { - if (p != 1) { - log_info("geometry: %s = %d", param->name, val); - } + log_info("geometry: %s = %d", param->name, val); geometry_set_value(param->key, val); } prop2 = strtok(NULL, ","); diff --git a/src/rgb_to_fb.S b/src/rgb_to_fb.S index e38f37e3..11ad6bf5 100644 --- a/src/rgb_to_fb.S +++ b/src/rgb_to_fb.S @@ -81,7 +81,8 @@ rgb_to_fb: str r2, param_v_adjust ldr r2, [r0, #O_FB_BASE] str r2, param_framebuffer0 - // Sanity check chars_per_line <= fb_width / 8 + + // Sanity check chars_per_line <= fb_width ldr r3, param_fb_width lsr r3, r3, #3 ldr r2, param_chars_per_line