comparison tools/lib64gfx.c @ 1713:0a9110b4d036

Add few RLE helper functions.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 06 Jun 2018 14:31:04 +0300
parents 1f0fac3af8e3
children c0c6fd8b288a
comparison
equal deleted inserted replaced
1712:1f4ed247763d 1713:0a9110b4d036
325 325
326 dmFree(stats); 326 dmFree(stats);
327 } 327 }
328 328
329 329
330 static void dmSetupRLEBuffers(DMGrowBuf *dst, DMGrowBuf *src, const DMCompParams *cfg) 330 void dmSetupRLEBuffers(DMGrowBuf *dst, DMGrowBuf *src, const DMCompParams *cfg)
331 { 331 {
332 if (cfg->flags & DM_RLE_BACKWARDS_INPUT) 332 if (cfg->flags & DM_RLE_BACKWARDS_INPUT)
333 { 333 {
334 src->offs = src->len - 1; 334 src->offs = src->len - 1;
335 src->backwards = TRUE; 335 src->backwards = TRUE;
338 if (cfg->flags & DM_RLE_BACKWARDS_OUTPUT) 338 if (cfg->flags & DM_RLE_BACKWARDS_OUTPUT)
339 { 339 {
340 dst->backwards = TRUE; 340 dst->backwards = TRUE;
341 dst->offs = dst->size - 1; 341 dst->offs = dst->size - 1;
342 } 342 }
343 void dmFinishRLEBuffers(DMGrowBuf *dst, DMGrowBuf *src, const DMCompParams *cfg)
344 {
345 if (cfg->flags & DM_RLE_BACKWARDS_OUTPUT)
346 {
347 memmove(dst->data, dst->data + dst->offs, dst->len);
348 dst->offs = 0;
349 }
350 }
351
352
353 int dmGenericRLEOutputRun(DMGrowBuf *dst, const DMCompParams *cfg, const Uint8 data, const unsigned int count)
354 {
355 unsigned int scount;
356 for (scount = count; scount; scount--)
357 {
358 if (!dmGrowBufPutU8(dst, data))
359 {
360 return dmError(DMERR_MALLOC,
361 "%s: RLE: Could not output RLE run %d x 0x%02x @ "
362 "offs=0x%" DM_PRIx_SIZE_T ", size=0x%" DM_PRIx_SIZE_T ".\n",
363 cfg->func, count, data, dst->offs, dst->size);
364 }
365 }
366 return DMERR_OK;
343 } 367 }
344 368
345 369
346 int dmDecodeGenericRLE(DMGrowBuf *dst, const DMGrowBuf *psrc, const DMCompParams *cfg) 370 int dmDecodeGenericRLE(DMGrowBuf *dst, const DMGrowBuf *psrc, const DMCompParams *cfg)
347 { 371 {