Mercurial > hg > dmlib
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 { |