[spice-common v2 14/15] quic: Unify rgb/non-rgb macro declarations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Frediano Ziglio <fziglio@xxxxxxxxxx>

This commit adds a common block of macro declarations at the top of
quic_tmpl.c and quic_rgb_tmpl.c. This block is identical between the 2
files, and is one big step towards making the 2 files identical.

Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx>
Signed-off-by: Christophe Fergeau <cfergeau@xxxxxxxxxx>
---
 common/quic_rgb_tmpl.c |  49 +++++++++++++---
 common/quic_tmpl.c     | 127 ++++++++++++++++++++++++++++++++++++-----
 2 files changed, 154 insertions(+), 22 deletions(-)

diff --git a/common/quic_rgb_tmpl.c b/common/quic_rgb_tmpl.c
index 29f1cab..fbfd248 100644
--- a/common/quic_rgb_tmpl.c
+++ b/common/quic_rgb_tmpl.c
@@ -21,28 +21,59 @@
 
 #define COMPRESS_IMP
 
-#define FARGS_DECL(arg1, ...) (Encoder *encoder, arg1, ##__VA_ARGS__)
-#define FARGS_CALL(arg1, ...) (encoder, arg1, ##__VA_ARGS__)
-#define SAME_PIXEL(p1, p2)                                 \
+#if defined(ONE_BYTE) || defined(FOUR_BYTE)
+#  define FARGS_DECL(arg1, ...) (Encoder *encoder, Channel *channel_a, arg1, ##__VA_ARGS__)
+#  define FARGS_CALL(arg1, ...) (encoder, channel_a, arg1, ##__VA_ARGS__)
+#  define UNCOMPRESS_PIX_START(row) do { } while (0)
+#  define SET_a(pix, val) ((pix)->a = val)
+#  define GET_a(pix) ((pix)->a)
+#  define SAME_PIXEL(p1, p2) (GET_a(p1) == GET_a(p2))
+#  define COPY_PIXEL(dest, src) \
+    SET_a(dest, GET_a(src));
+#  define DECLARE_STATE_VARIABLES \
+    CommonState *state = &channel_a->state
+#  define DECLARE_CHANNEL_VARIABLES \
+    BYTE * const correlate_row_a = channel_a->correlate_row
+#  define APPLY_ALL_COMP(macro, ...) \
+    macro(a, ## __VA_ARGS__)
+#else
+#  define FARGS_DECL(arg1, ...) (Encoder *encoder, arg1, ##__VA_ARGS__)
+#  define FARGS_CALL(arg1, ...) (encoder, arg1, ##__VA_ARGS__)
+#  define SAME_PIXEL(p1, p2)                               \
     (GET_r(p1) == GET_r(p2) && GET_g(p1) == GET_g(p2) &&   \
      GET_b(p1) == GET_b(p2))
-#define COPY_PIXEL(dest, src) \
+#  define COPY_PIXEL(dest, src) \
     SET_r(dest, GET_r(src)); \
     SET_g(dest, GET_g(src)); \
     SET_b(dest, GET_b(src))
-#define DECLARE_STATE_VARIABLES \
+#  define DECLARE_STATE_VARIABLES \
     CommonState *state = &encoder->rgb_state
-#define DECLARE_CHANNEL_VARIABLES \
+#  define DECLARE_CHANNEL_VARIABLES \
     Channel * const channel_r = encoder->channels; \
     Channel * const channel_g = channel_r + 1; \
     Channel * const channel_b = channel_g + 1; \
     BYTE * const correlate_row_r = channel_r->correlate_row; \
     BYTE * const correlate_row_g = channel_g->correlate_row; \
     BYTE * const correlate_row_b = channel_b->correlate_row
-#define APPLY_ALL_COMP(macro, ...) \
+#  define APPLY_ALL_COMP(macro, ...) \
     macro(r, ## __VA_ARGS__); \
     macro(g, ## __VA_ARGS__); \
     macro(b, ## __VA_ARGS__)
+#endif
+
+#ifdef ONE_BYTE
+#undef ONE_BYTE
+#define FNAME(name) quic_one_##name
+#define PIXEL one_byte_t
+#define BPC 8
+#endif
+
+#ifdef FOUR_BYTE
+#undef FOUR_BYTE
+#define FNAME(name) quic_four_##name
+#define PIXEL four_bytes_t
+#define BPC 8
+#endif
 
 #ifdef QUIC_RGB32
 #undef QUIC_RGB32
@@ -91,7 +122,7 @@
 #define PIXEL rgb32_pixel_t
 #define FNAME(name) quic_rgb16_to_32_##name
 #define BPC 5
-#define COMPRESS_IMP
+#undef COMPRESS_IMP
 #define SET_r(pix, val) ((pix)->r = ((val) << 3) | (((val) & 0x1f) >> 2))
 #define GET_r(pix) ((pix)->r >> 3)
 #define SET_g(pix, val) ((pix)->g = ((val) << 3) | (((val) & 0x1f) >> 2))
@@ -628,6 +659,8 @@ static void FNAME_DECL(uncompress_row)(const PIXEL * const prev_row,
 #undef GET_g
 #undef SET_b
 #undef GET_b
+#undef SET_a
+#undef GET_a
 #undef UNCOMPRESS_PIX_START
 #undef UPDATE_MODEL_COMP
 #undef APPLY_ALL_COMP
diff --git a/common/quic_tmpl.c b/common/quic_tmpl.c
index 96db766..c2a1b66 100644
--- a/common/quic_tmpl.c
+++ b/common/quic_tmpl.c
@@ -19,28 +19,53 @@
 #include <config.h>
 #endif
 
-#define FARGS_DECL(...) (Encoder *encoder, Channel *channel_a, ##__VA_ARGS__)
-#define FARGS_CALL(...) (encoder, channel_a, ##__VA_ARGS__)
-#define UNCOMPRESS_PIX_START(row) do { } while (0)
-#define SET_a(pix, val) ((pix)->a = val)
-#define GET_a(pix) ((pix)->a)
-#define SAME_PIXEL(p1, p2)                                 \
-     (GET_a(p1) == GET_a(p2))
-#define COPY_PIXEL(dest, src) \
+#define COMPRESS_IMP
+
+#if defined(ONE_BYTE) || defined(FOUR_BYTE)
+#  define FARGS_DECL(arg1, ...) (Encoder *encoder, Channel *channel_a, arg1, ##__VA_ARGS__)
+#  define FARGS_CALL(arg1, ...) (encoder, channel_a, arg1, ##__VA_ARGS__)
+#  define UNCOMPRESS_PIX_START(row) do { } while (0)
+#  define SET_a(pix, val) ((pix)->a = val)
+#  define GET_a(pix) ((pix)->a)
+#  define SAME_PIXEL(p1, p2) (GET_a(p1) == GET_a(p2))
+#  define COPY_PIXEL(dest, src) \
     SET_a(dest, GET_a(src));
-#define DECLARE_STATE_VARIABLES \
+#  define DECLARE_STATE_VARIABLES \
     CommonState *state = &channel_a->state
-#define DECLARE_CHANNEL_VARIABLES \
+#  define DECLARE_CHANNEL_VARIABLES \
     BYTE * const correlate_row_a = channel_a->correlate_row
-#define APPLY_ALL_COMP(macro, ...) \
+#  define APPLY_ALL_COMP(macro, ...) \
     macro(a, ## __VA_ARGS__)
+#else
+#  define FARGS_DECL(arg1, ...) (Encoder *encoder, arg1, ##__VA_ARGS__)
+#  define FARGS_CALL(arg1, ...) (encoder, arg1, ##__VA_ARGS__)
+#  define SAME_PIXEL(p1, p2)                               \
+    (GET_r(p1) == GET_r(p2) && GET_g(p1) == GET_g(p2) &&   \
+     GET_b(p1) == GET_b(p2))
+#  define COPY_PIXEL(dest, src) \
+    SET_r(dest, GET_r(src)); \
+    SET_g(dest, GET_g(src)); \
+    SET_b(dest, GET_b(src))
+#  define DECLARE_STATE_VARIABLES \
+    CommonState *state = &encoder->rgb_state
+#  define DECLARE_CHANNEL_VARIABLES \
+    Channel * const channel_r = encoder->channels; \
+    Channel * const channel_g = channel_r + 1; \
+    Channel * const channel_b = channel_g + 1; \
+    BYTE * const correlate_row_r = channel_r->correlate_row; \
+    BYTE * const correlate_row_g = channel_g->correlate_row; \
+    BYTE * const correlate_row_b = channel_b->correlate_row
+#  define APPLY_ALL_COMP(macro, ...) \
+    macro(r, ## __VA_ARGS__); \
+    macro(g, ## __VA_ARGS__); \
+    macro(b, ## __VA_ARGS__)
+#endif
 
 #ifdef ONE_BYTE
 #undef ONE_BYTE
 #define FNAME(name) quic_one_##name
 #define PIXEL one_byte_t
 #define BPC 8
-
 #endif
 
 #ifdef FOUR_BYTE
@@ -48,13 +73,76 @@
 #define FNAME(name) quic_four_##name
 #define PIXEL four_bytes_t
 #define BPC 8
+#endif
 
+#ifdef QUIC_RGB32
+#undef QUIC_RGB32
+#define PIXEL rgb32_pixel_t
+#define FNAME(name) quic_rgb32_##name
+#define BPC 8
+#define SET_r(pix, val) ((pix)->r = val)
+#define GET_r(pix) ((pix)->r)
+#define SET_g(pix, val) ((pix)->g = val)
+#define GET_g(pix) ((pix)->g)
+#define SET_b(pix, val) ((pix)->b = val)
+#define GET_b(pix) ((pix)->b)
+#define UNCOMPRESS_PIX_START(pix) ((pix)->pad = 0)
+#endif
+
+#ifdef QUIC_RGB24
+#undef QUIC_RGB24
+#define PIXEL rgb24_pixel_t
+#define FNAME(name) quic_rgb24_##name
+#define BPC 8
+#define SET_r(pix, val) ((pix)->r = val)
+#define GET_r(pix) ((pix)->r)
+#define SET_g(pix, val) ((pix)->g = val)
+#define GET_g(pix) ((pix)->g)
+#define SET_b(pix, val) ((pix)->b = val)
+#define GET_b(pix) ((pix)->b)
+#define UNCOMPRESS_PIX_START(pix)
+#endif
+
+#ifdef QUIC_RGB16
+#undef QUIC_RGB16
+#define PIXEL rgb16_pixel_t
+#define FNAME(name) quic_rgb16_##name
+#define BPC 5
+#define SET_r(pix, val) (*(pix) = (*(pix) & ~(0x1f << 10)) | ((val) << 10))
+#define GET_r(pix) ((*(pix) >> 10) & 0x1f)
+#define SET_g(pix, val) (*(pix) = (*(pix) & ~(0x1f << 5)) | ((val) << 5))
+#define GET_g(pix) ((*(pix) >> 5) & 0x1f)
+#define SET_b(pix, val) (*(pix) = (*(pix) & ~0x1f) | (val))
+#define GET_b(pix) (*(pix) & 0x1f)
+#define UNCOMPRESS_PIX_START(pix) (*(pix) = 0)
+#endif
+
+#ifdef QUIC_RGB16_TO_32
+#undef QUIC_RGB16_TO_32
+#define PIXEL rgb32_pixel_t
+#define FNAME(name) quic_rgb16_to_32_##name
+#define BPC 5
+#undef COMPRESS_IMP
+#define SET_r(pix, val) ((pix)->r = ((val) << 3) | (((val) & 0x1f) >> 2))
+#define GET_r(pix) ((pix)->r >> 3)
+#define SET_g(pix, val) ((pix)->g = ((val) << 3) | (((val) & 0x1f) >> 2))
+#define GET_g(pix) ((pix)->g >> 3)
+#define SET_b(pix, val) ((pix)->b = ((val) << 3) | (((val) & 0x1f) >> 2))
+#define GET_b(pix) ((pix)->b >> 3)
+#define UNCOMPRESS_PIX_START(pix) ((pix)->pad = 0)
 #endif
 
 #define FNAME_DECL(name) FNAME(name) FARGS_DECL
 #define FNAME_CALL(name) FNAME(name) FARGS_CALL
 
-#if BPC == 8
+#if BPC == 5
+#  define golomb_coding golomb_coding_5bpc
+#  define golomb_decoding golomb_decoding_5bpc
+#  define update_model update_model_5bpc
+#  define find_bucket find_bucket_5bpc
+#  define family family_5bpc
+#  define BPC_MASK 0x1fU
+#elif BPC == 8
 #  define golomb_coding golomb_coding_8bpc
 #  define golomb_decoding golomb_decoding_8bpc
 #  define update_model update_model_8bpc
@@ -62,7 +150,7 @@
 #  define family family_8bpc
 #  define BPC_MASK 0xffU
 #else
-#  error BPC must be 8
+#  error BPC must be 5 or 8
 #endif
 
 #define _PIXEL_A(channel, curr) ((unsigned int)GET_##channel((curr) - 1))
@@ -111,6 +199,8 @@ if (SAME_PIXEL(&prev_row[i - 1], &prev_row[i])) {
     }                                                                               \
 }
 
+#ifdef COMPRESS_IMP
+
 static void FNAME_DECL(compress_row0_seg)(int i,
                                           const PIXEL * const cur_row,
                                           const int end,
@@ -302,6 +392,8 @@ static void FNAME_DECL(compress_row)(const PIXEL * const prev_row,
     spice_assert(DEFwminext > 0);
 }
 
+#endif
+
 #define UNCOMPRESS_ONE_ROW0_0(channel)                                                                      \
     correlate_row_##channel[0] = (BYTE)golomb_decoding(find_bucket(channel_##channel,                       \
                                                                    correlate_row_##channel[-1])->bestcode,  \
@@ -559,6 +651,13 @@ static void FNAME_DECL(uncompress_row)(const PIXEL * const prev_row,
 #undef family
 #undef BPC
 #undef BPC_MASK
+#undef COMPRESS_IMP
+#undef SET_r
+#undef GET_r
+#undef SET_g
+#undef GET_g
+#undef SET_b
+#undef GET_b
 #undef SET_a
 #undef GET_a
 #undef UNCOMPRESS_PIX_START
-- 
2.17.1

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux Virtualization]     [Linux Virtualization]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]