comparison tools/lib64gfx.c @ 1818:7bafe5f0998d

Implement DM_RLE_ZERO_COUNT_MAX support in the generic RLE compressor.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 22 Jun 2018 09:56:32 +0300
parents 0b7062d874ef
children bea67833b9fa
comparison
equal deleted inserted replaced
1817:ca9fe688ab6b 1818:7bafe5f0998d
558 { 558 {
559 case DM_COMP_RLE_MARKER: 559 case DM_COMP_RLE_MARKER:
560 if ((cfg->flags & DM_RLE_WORD_RUNS) && 560 if ((cfg->flags & DM_RLE_WORD_RUNS) &&
561 (count >= cfg->rleMinCountW || data == cfg->rleMarkerW)) 561 (count >= cfg->rleMinCountW || data == cfg->rleMarkerW))
562 { 562 {
563 // A simple marker byte RLE variant: [Marker] [count] [data] 563 if (count == 65536 && (cfg->flags & DM_RLE_ZERO_COUNT_MAX))
564 count = 0;
565
564 if (!dmGrowBufPutU8(dst, cfg->rleMarkerW)) 566 if (!dmGrowBufPutU8(dst, cfg->rleMarkerW))
565 goto err; 567 goto err;
566 568
567 switch (cfg->flags & DM_RLE_ORDER_MASK) 569 switch (cfg->flags & DM_RLE_ORDER_MASK)
568 { 570 {
581 } 583 }
582 else 584 else
583 if ((cfg->flags & DM_RLE_BYTE_RUNS) && 585 if ((cfg->flags & DM_RLE_BYTE_RUNS) &&
584 (count >= cfg->rleMinCountB || data == cfg->rleMarkerB)) 586 (count >= cfg->rleMinCountB || data == cfg->rleMarkerB))
585 { 587 {
586 // A simple marker byte RLE variant: [Marker] [count] [data] 588 if (count == 256 && (cfg->flags & DM_RLE_ZERO_COUNT_MAX))
589 count = 0;
590
587 if (!dmGrowBufPutU8(dst, cfg->rleMarkerB)) 591 if (!dmGrowBufPutU8(dst, cfg->rleMarkerB))
588 goto err; 592 goto err;
589 593
590 switch (cfg->flags & DM_RLE_ORDER_MASK) 594 switch (cfg->flags & DM_RLE_ORDER_MASK)
591 { 595 {