Mercurial > hg > dmlib
comparison tools/lib64gfx.c @ 2329:0085ce04788b
Add return value (error code) to dmGenericRLEAnalyze() and pass it through where used.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 16 Sep 2019 10:24:49 +0300 |
parents | b57517a01960 |
children | 8f4cfe59b2bb |
comparison
equal
deleted
inserted
replaced
2328:b57517a01960 | 2329:0085ce04788b |
---|---|
365 | 365 |
366 return DMERR_OK; | 366 return DMERR_OK; |
367 } | 367 } |
368 | 368 |
369 | 369 |
370 void dmGenericRLEAnalyze(const DMGrowBuf *buf, DMCompParams *cfg) | 370 int dmGenericRLEAnalyze(const DMGrowBuf *buf, DMCompParams *cfg) |
371 { | 371 { |
372 #define DM_STAT_MAX 256 | 372 #define DM_STAT_MAX 256 |
373 size_t *stats; | 373 Uint8 *stats = NULL; |
374 | 374 |
375 // Allocate statistics counts buffer | 375 // Allocate statistics counts buffer |
376 if ((stats = dmMalloc0(DM_STAT_MAX * sizeof(size_t))) == NULL) | 376 if ((stats = dmMalloc0(DM_STAT_MAX * sizeof(Uint8))) == NULL) |
377 return; | 377 return DMERR_MALLOC; |
378 | 378 |
379 // Get statistics on the data | 379 // Get statistics on the data |
380 for (size_t offs = 0; offs < buf->len; offs++) | 380 for (size_t offs = 0; offs < buf->len; offs++) |
381 stats[buf->data[offs]]++; | 381 stats[buf->data[offs]]++; |
382 | 382 |
388 size_t selected = 0, | 388 size_t selected = 0, |
389 smallest = buf->len; | 389 smallest = buf->len; |
390 | 390 |
391 // Find least used byte value | 391 // Find least used byte value |
392 for (size_t n = 0; n < DM_STAT_MAX; n++) | 392 for (size_t n = 0; n < DM_STAT_MAX; n++) |
393 if (stats[n] < smallest) | |
393 { | 394 { |
394 if (stats[n] < smallest) | 395 switch (cfg->flags & DM_RLE_RUNS_MASK) |
395 { | 396 { |
396 switch (cfg->flags & DM_RLE_RUNS_MASK) | 397 case DM_RLE_BYTE_RUNS | DM_RLE_WORD_RUNS: |
397 { | 398 cfg->rleMarkerW = selected; |
398 case DM_RLE_BYTE_RUNS | DM_RLE_WORD_RUNS: | 399 cfg->rleMarkerB = selected = n; |
399 cfg->rleMarkerW = selected; | 400 break; |
400 cfg->rleMarkerB = selected = n; | 401 |
401 break; | 402 case DM_RLE_BYTE_RUNS: |
402 | 403 cfg->rleMarkerB = selected = n; |
403 case DM_RLE_BYTE_RUNS: | 404 break; |
404 cfg->rleMarkerB = selected = n; | 405 |
405 break; | 406 case DM_RLE_WORD_RUNS: |
406 | 407 cfg->rleMarkerW = selected = n; |
407 case DM_RLE_WORD_RUNS: | 408 break; |
408 cfg->rleMarkerW = selected = n; | |
409 break; | |
410 } | |
411 smallest = stats[n]; | |
412 } | 409 } |
410 smallest = stats[n]; | |
413 } | 411 } |
414 } | 412 } |
415 break; | 413 break; |
416 | 414 |
417 case DM_COMP_RLE_MASK: | 415 case DM_COMP_RLE_MASK: |
420 cfg->rleCountMask = 0x3f; | 418 cfg->rleCountMask = 0x3f; |
421 break; | 419 break; |
422 } | 420 } |
423 | 421 |
424 dmFree(stats); | 422 dmFree(stats); |
423 return DMERR_OK; | |
425 } | 424 } |
426 | 425 |
427 | 426 |
428 //#define RLE_DEBUG | 427 //#define RLE_DEBUG |
429 | 428 |