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