Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FreeRDP/FreeRDP-old.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVic Lee <llyzs@163.com>2011-06-22 11:47:24 +0400
committerVic Lee <llyzs@163.com>2011-06-22 11:47:24 +0400
commita79037ca6d95aed69f01f702af0acc95d931b551 (patch)
treecee764e31d66d84fb6cbc1b4140d4c770f64694d
parent187b344622d55857e92bc29a50cb8eabb2009a7e (diff)
libfreerdp-rfx: simplify DWT working buffer.
It's not necessary to have one buffer per tile size 8/16/32, since the buffer is only a temporary calculation area between horizontal and vertical transformation and once done the data is useless. Allocate the maximum required buffer saves some memory usage.
-rw-r--r--cunit/test_librfx.c2
-rw-r--r--include/freerdp/rfx.h10
-rw-r--r--libfreerdp-rfx/librfx.c4
-rw-r--r--libfreerdp-rfx/rfx_decode.c2
-rw-r--r--libfreerdp-rfx/rfx_dwt.c16
-rw-r--r--libfreerdp-rfx/rfx_dwt.h4
-rw-r--r--libfreerdp-rfx/rfx_encode.c2
-rw-r--r--libfreerdp-rfx/sse/rfx_sse2.c8
-rw-r--r--libfreerdp-rfx/sse/rfx_sse2.h2
9 files changed, 22 insertions, 28 deletions
diff --git a/cunit/test_librfx.c b/cunit/test_librfx.c
index 584ac7a..78c453d 100644
--- a/cunit/test_librfx.c
+++ b/cunit/test_librfx.c
@@ -269,7 +269,7 @@ test_dwt(void)
RFX_CONTEXT * context;
context = rfx_context_new();
- rfx_dwt_2d_decode(buffer, context->dwt_buffer_8, context->dwt_buffer_16, context->dwt_buffer_32);
+ rfx_dwt_2d_decode(buffer, context->dwt_buffer);
//dump_buffer(buffer, 4096);
rfx_context_free(context);
}
diff --git a/include/freerdp/rfx.h b/include/freerdp/rfx.h
index 7cf309c..7b2fede 100644
--- a/include/freerdp/rfx.h
+++ b/include/freerdp/rfx.h
@@ -157,20 +157,16 @@ struct _RFX_CONTEXT
sint16 * cb_g_buffer;
sint16 * cr_b_buffer;
- sint16 dwt_mem_8[8*8*2*2 + 8]; /* sub-band width 8 */
- sint16 dwt_mem_16[16*16*2*2 + 8]; /* sub-band width 16 */
- sint16 dwt_mem_32[32*32*2*2 + 8]; /* sub-band width 32 */
+ sint16 dwt_mem[32*32*2*2 + 8]; /* maximum sub-band width is 32 */
- sint16 * dwt_buffer_8;
- sint16 * dwt_buffer_16;
- sint16 * dwt_buffer_32;
+ sint16 * dwt_buffer;
/* routines */
void (* decode_YCbCr_to_RGB)(sint16 * y_r_buf, sint16 * cb_g_buf, sint16 * cr_b_buf);
void (* encode_RGB_to_YCbCr)(sint16 * y_r_buf, sint16 * cb_g_buf, sint16 * cr_b_buf);
void (* quantization_decode)(sint16 * buffer, const uint32 * quantization_values);
void (* quantization_encode)(sint16 * buffer, const uint32 * quantization_values);
- void (* dwt_2d_decode)(sint16 * buffer, sint16 * dwt_buffer_8, sint16 * dwt_buffer_16, sint16 * dwt_buffer_32);
+ void (* dwt_2d_decode)(sint16 * buffer, sint16 * dwt_buffer);
/* profiler definitions */
PROFILER_DEFINE(prof_rfx_decode_rgb);
diff --git a/libfreerdp-rfx/librfx.c b/libfreerdp-rfx/librfx.c
index c8e5bee..1693bfb 100644
--- a/libfreerdp-rfx/librfx.c
+++ b/libfreerdp-rfx/librfx.c
@@ -135,9 +135,7 @@ rfx_context_new(void)
context->cb_g_buffer = (sint16 *)(((uintptr_t)context->cb_g_mem + 16) & ~ 0x0F);
context->cr_b_buffer = (sint16 *)(((uintptr_t)context->cr_b_mem + 16) & ~ 0x0F);
- context->dwt_buffer_8 = (sint16 *)(((uintptr_t)context->dwt_mem_8 + 16) & ~ 0x0F);
- context->dwt_buffer_16 = (sint16 *)(((uintptr_t)context->dwt_mem_16 + 16) & ~ 0x0F);
- context->dwt_buffer_32 = (sint16 *)(((uintptr_t)context->dwt_mem_32 + 16) & ~ 0x0F);
+ context->dwt_buffer = (sint16 *)(((uintptr_t)context->dwt_mem + 16) & ~ 0x0F);
/* create profilers for default decoding routines */
rfx_profiler_create(context);
diff --git a/libfreerdp-rfx/rfx_decode.c b/libfreerdp-rfx/rfx_decode.c
index aff61ef..8dc8853 100644
--- a/libfreerdp-rfx/rfx_decode.c
+++ b/libfreerdp-rfx/rfx_decode.c
@@ -120,7 +120,7 @@ rfx_decode_component(RFX_CONTEXT * context, const uint32 * quantization_values,
PROFILER_EXIT(context->prof_rfx_quantization_decode);
PROFILER_ENTER(context->prof_rfx_dwt_2d_decode);
- context->dwt_2d_decode(buffer, context->dwt_buffer_8, context->dwt_buffer_16, context->dwt_buffer_32);
+ context->dwt_2d_decode(buffer, context->dwt_buffer);
PROFILER_EXIT(context->prof_rfx_dwt_2d_decode);
PROFILER_EXIT(context->prof_rfx_decode_component);
diff --git a/libfreerdp-rfx/rfx_dwt.c b/libfreerdp-rfx/rfx_dwt.c
index 97b8ec6..5fc5f64 100644
--- a/libfreerdp-rfx/rfx_dwt.c
+++ b/libfreerdp-rfx/rfx_dwt.c
@@ -106,11 +106,11 @@ rfx_dwt_2d_decode_block(sint16 * buffer, sint16 * idwt, int subband_width)
}
void
-rfx_dwt_2d_decode(sint16 * buffer, sint16 * dwt_buffer_8, sint16 * dwt_buffer_16, sint16 * dwt_buffer_32)
+rfx_dwt_2d_decode(sint16 * buffer, sint16 * dwt_buffer)
{
- rfx_dwt_2d_decode_block(buffer + 3840, dwt_buffer_8, 8);
- rfx_dwt_2d_decode_block(buffer + 3072, dwt_buffer_16, 16);
- rfx_dwt_2d_decode_block(buffer, dwt_buffer_32, 32);
+ rfx_dwt_2d_decode_block(buffer + 3840, dwt_buffer, 8);
+ rfx_dwt_2d_decode_block(buffer + 3072, dwt_buffer, 16);
+ rfx_dwt_2d_decode_block(buffer, dwt_buffer, 32);
}
void
@@ -190,9 +190,9 @@ rfx_dwt_2d_encode_block(sint16 * buffer, sint16 * dwt, int subband_width)
}
void
-rfx_dwt_2d_encode(sint16 * buffer, sint16 * dwt_buffer_8, sint16 * dwt_buffer_16, sint16 * dwt_buffer_32)
+rfx_dwt_2d_encode(sint16 * buffer, sint16 * dwt_buffer)
{
- rfx_dwt_2d_encode_block(buffer, dwt_buffer_32, 32);
- rfx_dwt_2d_encode_block(buffer + 3072, dwt_buffer_16, 16);
- rfx_dwt_2d_encode_block(buffer + 3840, dwt_buffer_8, 8);
+ rfx_dwt_2d_encode_block(buffer, dwt_buffer, 32);
+ rfx_dwt_2d_encode_block(buffer + 3072, dwt_buffer, 16);
+ rfx_dwt_2d_encode_block(buffer + 3840, dwt_buffer, 8);
}
diff --git a/libfreerdp-rfx/rfx_dwt.h b/libfreerdp-rfx/rfx_dwt.h
index 6fee77d..449d61c 100644
--- a/libfreerdp-rfx/rfx_dwt.h
+++ b/libfreerdp-rfx/rfx_dwt.h
@@ -23,9 +23,9 @@
#include <freerdp/rfx.h>
void
-rfx_dwt_2d_decode(sint16 * buffer, sint16 * dwt_buffer_8, sint16 * dwt_buffer_16, sint16 * dwt_buffer_32);
+rfx_dwt_2d_decode(sint16 * buffer, sint16 * dwt_buffer);
void
-rfx_dwt_2d_encode(sint16 * buffer, sint16 * dwt_buffer_8, sint16 * dwt_buffer_16, sint16 * dwt_buffer_32);
+rfx_dwt_2d_encode(sint16 * buffer, sint16 * dwt_buffer);
#endif
diff --git a/libfreerdp-rfx/rfx_encode.c b/libfreerdp-rfx/rfx_encode.c
index e458dd1..ddb9d2d 100644
--- a/libfreerdp-rfx/rfx_encode.c
+++ b/libfreerdp-rfx/rfx_encode.c
@@ -132,7 +132,7 @@ rfx_encode_component(RFX_CONTEXT * context, const uint32 * quantization_values,
PROFILER_ENTER(context->prof_rfx_encode_component);
PROFILER_ENTER(context->prof_rfx_dwt_2d_encode);
- rfx_dwt_2d_encode(data, context->dwt_buffer_8, context->dwt_buffer_16, context->dwt_buffer_32);
+ rfx_dwt_2d_encode(data, context->dwt_buffer);
PROFILER_EXIT(context->prof_rfx_dwt_2d_encode);
PROFILER_ENTER(context->prof_rfx_quantization_encode);
diff --git a/libfreerdp-rfx/sse/rfx_sse2.c b/libfreerdp-rfx/sse/rfx_sse2.c
index 63dfdcf..a215f86 100644
--- a/libfreerdp-rfx/sse/rfx_sse2.c
+++ b/libfreerdp-rfx/sse/rfx_sse2.c
@@ -415,11 +415,11 @@ rfx_dwt_2d_decode_block_SSE2(sint16 * buffer, sint16 * idwt, int subband_width)
}
void
-rfx_dwt_2d_decode_SSE2(sint16 * buffer, sint16 * dwt_buffer_8, sint16 * dwt_buffer_16, sint16 * dwt_buffer_32)
+rfx_dwt_2d_decode_SSE2(sint16 * buffer, sint16 * dwt_buffer)
{
_mm_prefetch_buffer((char *) buffer, 4096 * sizeof(sint16));
- rfx_dwt_2d_decode_block_SSE2(buffer + 3840, dwt_buffer_8, 8);
- rfx_dwt_2d_decode_block_SSE2(buffer + 3072, dwt_buffer_16, 16);
- rfx_dwt_2d_decode_block_SSE2(buffer, dwt_buffer_32, 32);
+ rfx_dwt_2d_decode_block_SSE2(buffer + 3840, dwt_buffer, 8);
+ rfx_dwt_2d_decode_block_SSE2(buffer + 3072, dwt_buffer, 16);
+ rfx_dwt_2d_decode_block_SSE2(buffer, dwt_buffer, 32);
}
diff --git a/libfreerdp-rfx/sse/rfx_sse2.h b/libfreerdp-rfx/sse/rfx_sse2.h
index 8f35f7c..0fcf604 100644
--- a/libfreerdp-rfx/sse/rfx_sse2.h
+++ b/libfreerdp-rfx/sse/rfx_sse2.h
@@ -26,6 +26,6 @@ void rfx_decode_YCbCr_to_RGB_SSE2(sint16 * y_r_buffer, sint16 * cb_g_buffer, sin
void rfx_encode_RGB_to_YCbCr_SSE2(sint16 * y_r_buffer, sint16 * cb_g_buffer, sint16 * cr_b_buffer);
void rfx_quantization_decode_SSE2(sint16 * buffer, const uint32 * quantization_values);
void rfx_quantization_encode_SSE2(sint16 * buffer, const uint32 * quantization_values);
-void rfx_dwt_2d_decode_SSE2(sint16 * buffer, sint16 * dwt_buffer_8, sint16 * dwt_buffer_16, sint16 * dwt_buffer_32);
+void rfx_dwt_2d_decode_SSE2(sint16 * buffer, sint16 * dwt_buffer);
#endif /* __RFX_SSE2_H */