ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
cells.c File Reference

Go to the source code of this file.

Macros

#define CELLS(isa, mono, dot)
#define GLYPH_CORRELATION_X86   glyph_shape_correlation_scalar

Functions

int glyph_shape_correlation_scalar (const int16_t samples[16], const int16_t mask[16])
void simd_pack_scalar (const uint8_t *rgb, uint32_t *out, size_t count)
void simd_lookup_scalar (const uint8_t *luma, const uint32_t table[64], uint32_t *out, size_t count)
void simd_quantize_scalar (const uint32_t *rgb, uint32_t *out, size_t count, unsigned colors)
size_t simd_run_scalar (const uint32_t *glyph, const uint32_t *fg, const uint32_t *bg, size_t count)
void simd_halfblock_scalar (const uint32_t *top, const uint32_t *bottom, uint32_t *glyph, uint32_t *fg, uint32_t *bg, size_t count, unsigned mode, const uint32_t keys[5])
const simd_cells_t * simd_cells_backend (void)

Variables

const simd_cells_t simd_cells_scalar = {simd_luminance_scalar, simd_pack_scalar, simd_lookup_scalar, simd_quantize_scalar, simd_halfblock_scalar, simd_run_scalar, NULL, glyph_shape_correlation_scalar}

Macro Definition Documentation

◆ CELLS

#define CELLS ( isa,
mono,
dot )
Value:
{simd_luminance_##isa, \
simd_pack_##isa, \
simd_lookup_##isa, \
simd_quantize_##isa, \
simd_halfblock_##isa, \
simd_run_##isa, \
mono, \
dot}

Definition at line 42 of file cells.c.

42#define CELLS(isa, mono, dot) \
43 {simd_luminance_##isa, \
44 simd_pack_##isa, \
45 simd_lookup_##isa, \
46 simd_quantize_##isa, \
47 simd_halfblock_##isa, \
48 simd_run_##isa, \
49 mono, \
50 dot}

◆ GLYPH_CORRELATION_X86

#define GLYPH_CORRELATION_X86   glyph_shape_correlation_scalar

Definition at line 55 of file cells.c.

Function Documentation

◆ glyph_shape_correlation_scalar()

int glyph_shape_correlation_scalar ( const int16_t samples[16],
const int16_t mask[16] )

Definition at line 4 of file cells.c.

4 {
5 int dot = 0;
6 for (int i = 0; i < 16; ++i)
7 dot += samples[i] * mask[i];
8 return dot;
9}

Referenced by ascii_render_glyph_match_mode().

◆ simd_cells_backend()

const simd_cells_t * simd_cells_backend ( void )

Definition at line 70 of file cells.c.

70 {
72 (void)features;
73#if SIMD_SUPPORT_SSE2
74 if (features == CPU_FEATURE_SSE2)
75 return &simd_cells_sse2;
76#endif
77#if SIMD_SUPPORT_SSSE3
78 if (features == CPU_FEATURE_SSSE3)
79 return &simd_cells_ssse3;
80#endif
81#if SIMD_SUPPORT_AVX2
82 if (features == CPU_FEATURE_AVX2)
83 return &simd_cells_avx2;
84#endif
85#if SIMD_SUPPORT_NEON
86 if (features == CPU_FEATURE_NEON)
87 return &simd_cells_neon;
88#endif
89#if SIMD_SUPPORT_SVE
90 if (features == CPU_FEATURE_SVE)
91 return &simd_cells_sve;
92#endif
93 return &simd_cells_scalar;
94}
const simd_cells_t simd_cells_scalar
Definition cells.c:69
const simd_cells_t simd_cells_sve
const simd_cells_t simd_cells_sse2
const simd_cells_t simd_cells_avx2
const simd_cells_t simd_cells_ssse3
const simd_cells_t simd_cells_neon
const simd_backend_t * simd_backend(void)
Definition dispatch.c:36
unsigned int uint32_t
Definition common.h:62
uint32_t required_features
Definition dispatch.h:14

References simd_backend_t::required_features, simd_backend(), simd_cells_avx2, simd_cells_neon, simd_cells_scalar, simd_cells_sse2, simd_cells_ssse3, and simd_cells_sve.

Referenced by ascii_convert(), ascii_convert_with_buffers_stabilized(), image_print(), image_print_16color(), image_print_16color_dithered(), image_print_16color_dithered_with_background(), image_print_256color(), image_print_color(), image_print_color_background(), image_print_color_simd(), image_print_color_utf8(), and image_print_with_capabilities().

◆ simd_halfblock_scalar()

void simd_halfblock_scalar ( const uint32_t * top,
const uint32_t * bottom,
uint32_t * glyph,
uint32_t * fg,
uint32_t * bg,
size_t count,
unsigned mode,
const uint32_t keys[5] )

Definition at line 30 of file cells.c.

31 {
32 for (size_t i = 0; i < count; ++i) {
33 uint32_t t = top[i], b = bottom[i];
34 unsigned yt = (76 * (t >> 16) + 150 * ((t >> 8) & 255) + 29 * (t & 255)) >> 8;
35 unsigned yb = (76 * (b >> 16) + 150 * ((b >> 8) & 255) + 29 * (b & 255)) >> 8;
36 bool transparent = mode == 0 ? yt < 16 && yb < 16 : t == 0 && b == 0;
37 glyph[i] = transparent ? (uint32_t)' ' : mode == 0 ? keys[yt >> 6] : keys[4];
38 if (mode == 0 || transparent)
39 fg[i] = bg[i] = UINT32_MAX;
40 }
41}

Referenced by simd_halfblock_SIMD_CELL_ISA().

◆ simd_lookup_scalar()

void simd_lookup_scalar ( const uint8_t * luma,
const uint32_t table[64],
uint32_t * out,
size_t count )

Definition at line 14 of file cells.c.

14 {
15 for (size_t i = 0; i < count; ++i)
16 out[i] = table[luma[i] >> 2];
17}
static bool size_t gotel_query_t * out
Definition queries.h:8

References out.

Referenced by simd_lookup_SIMD_CELL_ISA().

◆ simd_pack_scalar()

void simd_pack_scalar ( const uint8_t * rgb,
uint32_t * out,
size_t count )

Definition at line 10 of file cells.c.

10 {
11 for (size_t i = 0; i < count; ++i)
12 out[i] = ((uint32_t)rgb[3 * i] << 16) | ((uint32_t)rgb[3 * i + 1] << 8) | rgb[3 * i + 2];
13}

References out.

Referenced by simd_pack_SIMD_CELL_ISA().

◆ simd_quantize_scalar()

void simd_quantize_scalar ( const uint32_t * rgb,
uint32_t * out,
size_t count,
unsigned colors )

Definition at line 18 of file cells.c.

18 {
19 for (size_t i = 0; i < count; ++i) {
20 uint8_t r = (uint8_t)(rgb[i] >> 16), g = (uint8_t)(rgb[i] >> 8), b = (uint8_t)rgb[i];
21 out[i] = colors == 16 ? rgb_to_16color(r, g, b) : rgb_to_256color(r, g, b);
22 }
23}
unsigned char colors[(512 *256 *2) *3]
Definition fft.c:22
uint8_t rgb_to_16color(uint8_t r, uint8_t g, uint8_t b)
Definition ansi.c:354
uint8_t rgb_to_256color(uint8_t r, uint8_t g, uint8_t b)
Definition ansi.c:251
unsigned char uint8_t
Definition common.h:60

References colors, out, rgb_to_16color(), and rgb_to_256color().

Referenced by simd_quantize_SIMD_CELL_ISA().

◆ simd_run_scalar()

size_t simd_run_scalar ( const uint32_t * glyph,
const uint32_t * fg,
const uint32_t * bg,
size_t count )

Definition at line 24 of file cells.c.

24 {
25 size_t i = 1;
26 for (; i < count && glyph[i] == glyph[0] && fg[i] == fg[0] && bg[i] == bg[0]; ++i) {
27 }
28 return count ? i : 0;
29}

Variable Documentation

◆ simd_cells_scalar