[sixel] relaxation: don't double-count #1391

pull/1431/head
nick black 3 years ago committed by Nick Black
parent ac866655db
commit 69e4718e24

@ -181,26 +181,26 @@ unzip_color(const uint32_t* data, int linesize, int begy, int begx,
int didx = ctable_to_dtable(crec);
unsigned char* srcsixels = stab->data + stab->sixelcount * didx;
unsigned char* dstsixels = stab->data + stab->sixelcount * stab->colors;
fprintf(stderr, "counts: src: %d dst: %d\n", deets->count, targdeets->count);
fprintf(stderr, "counts: src: %d dst: %d src: %p dst: %p\n", deets->count, targdeets->count, srcsixels, dstsixels);
int sixel = 0;
int totalcount = 0;
memset(deets, 0, sizeof(*deets));
for(int visy = begy ; visy < (begy + leny) ; visy += 6){
for(int visx = begx ; visx < (begx + lenx) ; visx += 1, ++sixel){
if(srcsixels[sixel]){
for(int sy = visy ; sy < (begy + leny) && sy < visy + 6 ; ++sy){
if(srcsixels[sixel] & (1u << (sy - visy))){
++totalcount;
const uint32_t* rgb = (const uint32_t*)(data + (linesize / 4 * sy) + visx);
unsigned char comps[RGBSIZE];
break_sixel_comps(comps, *rgb, 0xff);
if(comps[0] > r || comps[1] > g || comps[2] > b){
++targdeets->count;
dstsixels[sixel] |= (1u << (sy - visy));
srcsixels[sixel] &= ~(1u << (sy - visy));
update_deets(*rgb, targdeets);
//fprintf(stderr, "%u/%u/%u comps: [%u/%u/%u]\n", r, g, b, comps[0], comps[1], comps[2]);
//fprintf(stderr, "match sixel %d %u %u\n", sixel, srcsixels[sixel], 1u << (sy - visy));
}else{
++deets->count;
update_deets(*rgb, deets);
}
}
@ -208,7 +208,7 @@ fprintf(stderr, "counts: src: %d dst: %d\n", deets->count, targdeets->count);
}
}
}
fprintf(stderr, "counts: src: %d dst: %d\n", deets->count, targdeets->count);
fprintf(stderr, "counts: src: %d dst: %d total: %d\n", deets->count, targdeets->count, totalcount);
}
// relax segment |coloridx|. we must have room for a new color. we find the
@ -423,7 +423,7 @@ int sixel_blit(ncplane* nc, int linesize, const void* data, int begy, int begx,
free(stable.deets);
return -1;
}
refine_color_table(data, linesize, begy, begx, leny, lenx, &stable);
//refine_color_table(data, linesize, begy, begx, leny, lenx, &stable);
int r = sixel_blit_inner(nc, leny, lenx, &stable, bargs);
free(stable.data);
free(stable.deets);

Loading…
Cancel
Save