[PATCH 09/30] Encapsulate jpeg information in EncodersData structure

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

 



Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx>
---
 server/dcc-encoders.c | 16 ++++++++--------
 server/dcc-encoders.h |  5 +++++
 server/dcc.c          | 28 ++++++++++++++++------------
 server/dcc.h          |  3 ---
 4 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/server/dcc-encoders.c b/server/dcc-encoders.c
index 015f677..7d74ca3 100644
--- a/server/dcc-encoders.c
+++ b/server/dcc-encoders.c
@@ -360,14 +360,14 @@ static void dcc_init_glz_data(DisplayChannelClient *dcc)
     dcc->glz_data.usr.free_image = glz_usr_free_image;
 }
 
-static void dcc_init_jpeg(DisplayChannelClient *dcc)
+static void dcc_init_jpeg(EncodersData *enc)
 {
-    dcc->jpeg_data.usr.more_space = jpeg_usr_more_space;
-    dcc->jpeg_data.usr.more_lines = jpeg_usr_more_lines;
+    enc->jpeg_data.usr.more_space = jpeg_usr_more_space;
+    enc->jpeg_data.usr.more_lines = jpeg_usr_more_lines;
 
-    dcc->jpeg = jpeg_encoder_create(&dcc->jpeg_data.usr);
+    enc->jpeg = jpeg_encoder_create(&enc->jpeg_data.usr);
 
-    if (!dcc->jpeg) {
+    if (!enc->jpeg) {
         spice_critical("create jpeg encoder failed");
     }
 }
@@ -405,7 +405,7 @@ void dcc_encoders_init(DisplayChannelClient *dcc)
     dcc_init_glz_data(dcc);
     dcc_init_quic(enc);
     dcc_init_lz(enc);
-    dcc_init_jpeg(dcc);
+    dcc_init_jpeg(enc);
 #ifdef USE_LZ4
     dcc_init_lz4(dcc);
 #endif
@@ -422,8 +422,8 @@ void dcc_encoders_free(DisplayChannelClient *dcc)
     enc->quic = NULL;
     lz_destroy(enc->lz);
     enc->lz = NULL;
-    jpeg_encoder_destroy(dcc->jpeg);
-    dcc->jpeg = NULL;
+    jpeg_encoder_destroy(enc->jpeg);
+    enc->jpeg = NULL;
 #ifdef USE_LZ4
     lz4_encoder_destroy(dcc->lz4);
     dcc->lz4 = NULL;
diff --git a/server/dcc-encoders.h b/server/dcc-encoders.h
index f008bf6..9978a9c 100644
--- a/server/dcc-encoders.h
+++ b/server/dcc-encoders.h
@@ -168,6 +168,11 @@ struct EncodersData {
 
     LzData lz_data;
     LzContext  *lz;
+
+    int jpeg_quality;
+
+    JpegData jpeg_data;
+    JpegEncoderContext *jpeg;
 };
 
 typedef struct compress_send_data_t {
diff --git a/server/dcc.c b/server/dcc.c
index 7bdb2bd..89035be 100644
--- a/server/dcc.c
+++ b/server/dcc.c
@@ -379,7 +379,7 @@ DisplayChannelClient *dcc_new(DisplayChannel *display,
     dcc->jpeg_state = jpeg_state;
     dcc->zlib_glz_state = zlib_glz_state;
     // TODO: tune quality according to bandwidth
-    dcc->jpeg_quality = 85;
+    dcc->encoders.jpeg_quality = 85;
 
     size_t stream_buf_size;
     stream_buf_size = 32*1024;
@@ -784,13 +784,15 @@ glz:
     return TRUE;
 }
 
-static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest,
-                                   SpiceBitmap *src, compress_send_data_t* o_comp_data)
+static int dcc_compress_image_jpeg(EncodersData *enc, SpiceImage *dest,
+                                   SpiceBitmap *src, compress_send_data_t* o_comp_data,
+                                   stat_info_t *jpeg_stats, // FIXME put all stats in a structure
+                                   stat_info_t *jpeg_alpha_stats)
 {
-    JpegData *jpeg_data = &dcc->jpeg_data;
-    LzData *lz_data = &dcc->encoders.lz_data;
-    JpegEncoderContext *jpeg = dcc->jpeg;
-    LzContext *lz = dcc->encoders.lz;
+    JpegData *jpeg_data = &enc->jpeg_data;
+    LzData *lz_data = &enc->lz_data;
+    JpegEncoderContext *jpeg = enc->jpeg;
+    LzContext *lz = enc->lz;
     volatile JpegEncoderImageType jpeg_in_type;
     int jpeg_size = 0;
     volatile int has_alpha = FALSE;
@@ -800,7 +802,7 @@ static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest,
     int stride;
     uint8_t *lz_out_start_byte;
     stat_start_time_t start_time;
-    stat_start_time_init(&start_time, &DCC_TO_DC(dcc)->jpeg_alpha_stat);
+    stat_start_time_init(&start_time, jpeg_alpha_stats);
 
 #ifdef COMPRESS_DEBUG
     spice_info("JPEG compress");
@@ -846,7 +848,7 @@ static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest,
         jpeg_data->data.u.lines_data.reverse = 1;
         stride = -src->stride;
     }
-    jpeg_size = jpeg_encode(jpeg, dcc->jpeg_quality, jpeg_in_type,
+    jpeg_size = jpeg_encode(jpeg, enc->jpeg_quality, jpeg_in_type,
                             src->x, src->y, NULL,
                             0, stride, jpeg_data->data.bufs_head->buf.bytes,
                             sizeof(jpeg_data->data.bufs_head->buf));
@@ -864,7 +866,7 @@ static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest,
         o_comp_data->comp_buf_size = jpeg_size;
         o_comp_data->is_lossy = TRUE;
 
-        stat_compress_add(&DCC_TO_DC(dcc)->jpeg_stat, start_time, src->stride * src->y,
+        stat_compress_add(jpeg_stats, start_time, src->stride * src->y,
                           o_comp_data->comp_buf_size);
         return TRUE;
     }
@@ -904,7 +906,7 @@ static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest,
     o_comp_data->comp_buf = jpeg_data->data.bufs_head;
     o_comp_data->comp_buf_size = jpeg_size + alpha_lz_size;
     o_comp_data->is_lossy = TRUE;
-    stat_compress_add(&DCC_TO_DC(dcc)->jpeg_alpha_stat, start_time, src->stride * src->y,
+    stat_compress_add(jpeg_alpha_stats, start_time, src->stride * src->y,
                       o_comp_data->comp_buf_size);
     return TRUE;
 }
@@ -1063,7 +1065,9 @@ int dcc_compress_image(DisplayChannelClient *dcc,
     case SPICE_IMAGE_COMPRESSION_QUIC:
         if (can_lossy && display_channel->enable_jpeg &&
             (src->format != SPICE_BITMAP_FMT_RGBA || !bitmap_has_extra_stride(src))) {
-            success = dcc_compress_image_jpeg(dcc, dest, src, o_comp_data);
+            success = dcc_compress_image_jpeg(&dcc->encoders, dest, src, o_comp_data,
+                                              &display_channel->jpeg_stat,
+                                              &display_channel->jpeg_alpha_stat);
             break;
         }
         success = dcc_compress_image_quic(&dcc->encoders, dest, src, o_comp_data, &display_channel->quic_stat);
diff --git a/server/dcc.h b/server/dcc.h
index 532ce7b..b200d50 100644
--- a/server/dcc.h
+++ b/server/dcc.h
@@ -60,14 +60,11 @@ struct DisplayChannelClient {
     SpiceImageCompression image_compression;
     spice_wan_compression_t jpeg_state;
     spice_wan_compression_t zlib_glz_state;
-    int jpeg_quality;
 
     EncodersData encoders;
 
     int zlib_level;
 
-    JpegData jpeg_data;
-    JpegEncoderContext *jpeg;
 #ifdef USE_LZ4
     Lz4Data lz4_data;
     Lz4EncoderContext *lz4;
-- 
2.7.4

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




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