Improve normal screencap scaling (follows pixel aspect ratio)

pull/117/head
IanSB 2019-12-21 17:40:06 +00:00
rodzic 4ece6c3716
commit 9b69a10755
2 zmienionych plików z 20 dodań i 16 usunięć

Wyświetl plik

@ -51,7 +51,7 @@ static int generate_png(capture_info_t *capinfo, uint8_t **png, unsigned int *pn
int hscale = get_hscale();
int vscale = get_vscale();
//log_info("Scaling is %d/2 x %d/2 x=%d", hscale, vscale, capinfo->width);
log_info("Scaling is %d/2 x %d/2 x=%d y=%d", hscale, vscale, capinfo->width, capinfo->height );
uint8_t png_buffer[((width * hscale) >> 1) * ((height * vscale) >> 1)];
uint8_t *pp = png_buffer;

Wyświetl plik

@ -481,9 +481,19 @@ void geometry_get_fb_params(capture_info_t *capinfo) {
//log_info("scaling h = %d, %d, %f, %d, %d, %d, %d",h_size, h_size43, hscalef, hscale, hborder, hborder43, newhborder43);
//log_info("scaling v = %d, %d, %f, %d, %d, %d, %d",v_size, v_size43, vscalef, vscale, vborder, vborder43, newvborder43);
caphscale = 2;
capvscale = 2;
caphscale = h_aspect << 1;
capvscale = v_aspect << 1;
if (double_width) {
caphscale >>= 1;
}
if (double_height) {
capvscale >>= 1;
}
if (caphscale >= 4 && capvscale >= 4) {
caphscale >>= 1;
capvscale >>= 1;
}
int standard_width = geometry_min_h_width;
if (m7scaling == M7_UNEVEN) {
standard_width = mode7 ? (geometry_min_h_width * 4 / 3) : geometry_min_h_width; // workaround mode 7 width so it looks like other modes
@ -512,8 +522,10 @@ void geometry_get_fb_params(capture_info_t *capinfo) {
capinfo->width = adjusted_width + hborder;
capinfo->height = adjusted_height + vborder;
caphscale = (h_size << 1) / capinfo->width;
capvscale = (v_size << 1) / capinfo->height;
if (capscale != 0) {
caphscale = (h_size << 1) / capinfo->width;
capvscale = (v_size << 1) / capinfo->height;
}
}
break;
case SCALING_MANUAL43:
@ -549,18 +561,10 @@ void geometry_get_fb_params(capture_info_t *capinfo) {
}
int get_hscale() {
if (capscale == 0) {
return 2;
} else {
return caphscale;
}
return caphscale;
}
int get_vscale() {
if (capscale == 0) {
return 2;
} else {
return capvscale;
}
return capvscale;
}
void geometry_get_clk_params(clk_info_t *clkinfo) {