| 616 | } |
| 617 | |
| 618 | INLINE void GetClusterMean(CGV_FLOAT cluster_mean_out[SOURCE_BLOCK_SIZE][MAX_CHANNELS], |
| 619 | CGV_FLOAT image_src[SOURCE_BLOCK_SIZE * MAX_CHANNELS], |
| 620 | CGV_UINT8 index_in[MAX_SUBSET_SIZE], |
| 621 | CGV_INT numEntries, // < 16 |
| 622 | CGU_UINT8 channels3or4) |
| 623 | { // IN: 3 = RGB or 4 = RGBA (4 = MAX_CHANNELS) |
| 624 | // unused index values are underfined |
| 625 | CGV_UINT8 i_cnt[MAX_SUBSET_SIZE]; |
| 626 | CGV_UINT8 i_comp[MAX_SUBSET_SIZE]; |
| 627 | |
| 628 | for (CGV_INT i = 0; i < numEntries; i++) |
| 629 | for (CGU_UINT8 ch = 0; ch < channels3or4; ch++) |
| 630 | { |
| 631 | CGV_UINT8 idx = index_in[i] & 0x0F; |
| 632 | cluster_mean_out[idx][ch] = 0; |
| 633 | i_cnt[idx] = 0; |
| 634 | } |
| 635 | |
| 636 | CGV_UINT8 ic = 0; // was CGV_INT |
| 637 | for (CGV_INT i = 0; i < numEntries; i++) |
| 638 | { |
| 639 | CGV_UINT8 idx = index_in[i] & 0x0F; |
| 640 | if (i_cnt[idx] == 0) |
| 641 | i_comp[ic++] = idx; |
| 642 | i_cnt[idx]++; |
| 643 | |
| 644 | for (CGU_UINT8 ch = 0; ch < channels3or4; ch++) |
| 645 | { |
| 646 | cluster_mean_out[idx][ch] += image_src[i + (ch * SOURCE_BLOCK_SIZE)]; |
| 647 | } |
| 648 | } |
| 649 | |
| 650 | for (CGU_UINT8 ch = 0; ch < channels3or4; ch++) |
| 651 | for (CGU_INT i = 0; i < ic; i++) |
| 652 | { |
| 653 | if (i_cnt[i_comp[i]] != 0) |
| 654 | { |
| 655 | CGV_UINT8 icmp = i_comp[i]; |
| 656 | cluster_mean_out[icmp][ch] = (CGV_FLOAT)cmp_floor((cluster_mean_out[icmp][ch] / (CGV_FLOAT)i_cnt[icmp]) + 0.5F); |
| 657 | } |
| 658 | } |
| 659 | } |
| 660 | |
| 661 | INLINE void GetImageMean(CGV_FLOAT image_mean_out[SOURCE_BLOCK_SIZE * MAX_CHANNELS], |
| 662 | CGV_FLOAT image_src[SOURCE_BLOCK_SIZE * MAX_CHANNELS], |
no test coverage detected