remove update_param_range() clipping, replace with silent clipping

pull/58/head
IanSB 2019-03-23 03:25:24 +00:00
rodzic 0bd9863a00
commit e7c680fdfd
3 zmienionych plików z 14 dodań i 34 usunięć

Wyświetl plik

@ -63,25 +63,6 @@ static geometry_t default_geometry;
static geometry_t mode7_geometry; static geometry_t mode7_geometry;
static int scaling = 0; 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) { void geometry_init(int version) {
// These are Beeb specific defaults so the geometry property can be ommitted // These are Beeb specific defaults so the geometry property can be ommitted
mode7_geometry.v_offset = 128; mode7_geometry.v_offset = 128;
@ -129,8 +110,6 @@ void geometry_init(int version) {
void geometry_set_mode(int mode) { void geometry_set_mode(int mode) {
mode7 = mode; mode7 = mode;
geometry = mode ? &mode7_geometry : &default_geometry; geometry = mode ? &mode7_geometry : &default_geometry;
update_param_range();
} }
int geometry_get_value(int num) { int geometry_get_value(int num) {
@ -199,15 +178,12 @@ void geometry_set_value(int num, int value) {
break; break;
case FB_WIDTH: case FB_WIDTH:
geometry->fb_width = value; geometry->fb_width = value;
update_param_range();
break; break;
case FB_HEIGHT: case FB_HEIGHT:
geometry->fb_height = value; geometry->fb_height = value;
update_param_range();
break; break;
case FB_HEIGHTX2: case FB_HEIGHTX2:
geometry->fb_heightx2 = value; geometry->fb_heightx2 = value;
update_param_range();
break; break;
case FB_BPP: case FB_BPP:
geometry->fb_bpp = value; geometry->fb_bpp = value;
@ -260,6 +236,14 @@ void geometry_get_fb_params(capture_info_t *capinfo) {
capinfo->bpp = geometry->fb_bpp; capinfo->bpp = geometry->fb_bpp;
capinfo->px_sampling = geometry->px_sampling; 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 h_size = (*PIXELVALVE2_HORZB) & 0xFFFF;
uint32_t v_size = (*PIXELVALVE2_VERTB) & 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; 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 hscale = h_size43 / adjusted_width;
int hborder = (h_size - (adjusted_width * hscale)) / hscale; int hborder = (h_size - (adjusted_width * hscale)) / hscale;
int hborder43 = (h_size43 - (adjusted_width * hscale)) / hscale; int hborder43 = (h_size43 - (adjusted_width * hscale)) / hscale;

Wyświetl plik

@ -1332,7 +1332,7 @@ void get_props_sample_geometry(char *buffer)
{ {
char *prop; char *prop;
// Initialize the CPLD sampling points // 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++) { for (int m7 = 0; m7 <= 1; m7++) {
char *propname; char *propname;
if (m7) { if (m7) {
@ -1352,9 +1352,7 @@ void get_props_sample_geometry(char *buffer)
if (prop) { if (prop) {
cpld->set_mode(m7); cpld->set_mode(m7);
geometry_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, ","); char *prop2 = strtok(prop, ",");
int i = 0; int i = 0;
while (prop2) { while (prop2) {
@ -1373,9 +1371,7 @@ void get_props_sample_geometry(char *buffer)
log_info("cpld: %s = %d", param->name, val); log_info("cpld: %s = %d", param->name, val);
cpld->set_value(param->key, val); cpld->set_value(param->key, val);
} else { } 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); geometry_set_value(param->key, val);
} }
prop2 = strtok(NULL, ","); prop2 = strtok(NULL, ",");

Wyświetl plik

@ -81,7 +81,8 @@ rgb_to_fb:
str r2, param_v_adjust str r2, param_v_adjust
ldr r2, [r0, #O_FB_BASE] ldr r2, [r0, #O_FB_BASE]
str r2, param_framebuffer0 str r2, param_framebuffer0
// Sanity check chars_per_line <= fb_width / 8
// Sanity check chars_per_line <= fb_width
ldr r3, param_fb_width ldr r3, param_fb_width
lsr r3, r3, #3 lsr r3, r3, #3
ldr r2, param_chars_per_line ldr r2, param_chars_per_line