Fix for 4 bit screencap with odd numbered frame buffer width

pull/115/head
IanSB 2019-12-08 05:01:28 +00:00
rodzic 1012ce2d6a
commit c872ce15da
1 zmienionych plików z 29 dodań i 21 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", hscale, vscale);
//log_info("Scaling is %d/2 x %d/2 x=%d", hscale, vscale, capinfo->width);
uint8_t png_buffer[((width * hscale) >> 1) * ((height * vscale) >> 1)];
uint8_t *pp = png_buffer;
@ -100,17 +100,21 @@ static int generate_png(capture_info_t *capinfo, uint8_t **png, unsigned int *pn
for (int sy = 0; sy < (vscale >> 1); sy++) {
uint8_t *fp = capinfo->fb + capinfo->pitch * y;
for (int x = 0; x < (capinfo->width >> 1); x++) {
uint8_t single_pixel = 0;
for (int x = 0; x < capinfo->width; x++) {
uint8_t single_pixel = *fp++;
for (int sx = 0; sx < (hscale >> 1); sx++) {
*pp++ = single_pixel >> 4;
}
for (int sx = 0; sx < (hscale >> 1); sx++) {
*pp++ = single_pixel & 0x0f;
}
if ((hscale & 1) == 1 && (x & 1) == 1) {
*pp++ = single_pixel & 0x0f;
if ((x & 1) == 0) {
single_pixel= *fp++;
for (int sx = 0; sx < (hscale >> 1); sx++) {
*pp++ = single_pixel >> 4;
}
} else {
for (int sx = 0; sx < (hscale >> 1); sx++) {
*pp++ = single_pixel & 0x0f;
}
if ((hscale & 1) == 1) {
*pp++ = single_pixel & 0x0f;
}
}
}
}
@ -118,17 +122,21 @@ static int generate_png(capture_info_t *capinfo, uint8_t **png, unsigned int *pn
if ((vscale & 1) == 1 && (y & 1) == 1) {
uint8_t *fp = capinfo->fb + capinfo->pitch * y;
for (int x = 0; x < (capinfo->width >> 1); x++) {
uint8_t single_pixel = 0;
for (int x = 0; x < capinfo->width; x++) {
uint8_t single_pixel = *fp++;
for (int sx = 0; sx < (hscale >> 1); sx++) {
*pp++ = single_pixel & 0xf;
}
for (int sx = 0; sx < (hscale >> 1); sx++) {
*pp++ = single_pixel >> 4;
}
if ((hscale & 1) == 1 && (x & 1) == 1) {
*pp++ = single_pixel >> 4;
if ((x & 1) == 0) {
single_pixel= *fp++;
for (int sx = 0; sx < (hscale >> 1); sx++) {
*pp++ = single_pixel >> 4;
}
} else {
for (int sx = 0; sx < (hscale >> 1); sx++) {
*pp++ = single_pixel & 0x0f;
}
if ((hscale & 1) == 1) {
*pp++ = single_pixel & 0x0f;
}
}
}