Diff for /qemu/vnchextile.h between versions 1.1 and 1.1.1.7

version 1.1, 2018/04/24 16:40:52 version 1.1.1.7, 2018/04/24 17:35:01
Line 1 Line 1
 #define CONCAT_I(a, b) a ## b  #define CONCAT_I(a, b) a ## b
 #define CONCAT(a, b) CONCAT_I(a, b)  #define CONCAT(a, b) CONCAT_I(a, b)
 #define pixel_t CONCAT(uint, CONCAT(BPP, _t))  #define pixel_t CONCAT(uint, CONCAT(BPP, _t))
   #ifdef GENERIC
 static void CONCAT(send_hextile_tile_, BPP)(VncState *vs,  #define NAME CONCAT(generic_, BPP)
                                             int x, int y, int w, int h,  #else
                                             pixel_t *last_bg, pixel_t *last_fg,  #define NAME BPP
                                             int *has_bg, int *has_fg)  #endif
   
   static void CONCAT(send_hextile_tile_, NAME)(VncState *vs,
                                                int x, int y, int w, int h,
                                                void *last_bg_,
                                                void *last_fg_,
                                                int *has_bg, int *has_fg)
 {  {
     char *row = (vs->ds->data + y * vs->ds->linesize + x * vs->depth);      VncDisplay *vd = vs->vd;
       uint8_t *row = vd->server->data + y * ds_get_linesize(vs->ds) + x * ds_get_bytes_per_pixel(vs->ds);
     pixel_t *irow = (pixel_t *)row;      pixel_t *irow = (pixel_t *)row;
     int j, i;      int j, i;
       pixel_t *last_bg = (pixel_t *)last_bg_;
       pixel_t *last_fg = (pixel_t *)last_fg_;
     pixel_t bg = 0;      pixel_t bg = 0;
     pixel_t fg = 0;      pixel_t fg = 0;
     int n_colors = 0;      int n_colors = 0;
     int bg_count = 0;      int bg_count = 0;
     int fg_count = 0;      int fg_count = 0;
     int flags = 0;      int flags = 0;
     uint8_t data[(sizeof(pixel_t) + 2) * 16 * 16];      uint8_t data[(vs->clientds.pf.bytes_per_pixel + 2) * 16 * 16];
     int n_data = 0;      int n_data = 0;
     int n_subtiles = 0;      int n_subtiles = 0;
   
Line 49  static void CONCAT(send_hextile_tile_, B Line 58  static void CONCAT(send_hextile_tile_, B
         }          }
         if (n_colors > 2)          if (n_colors > 2)
             break;              break;
         irow += vs->ds->linesize / sizeof(pixel_t);          irow += ds_get_linesize(vs->ds) / sizeof(pixel_t);
     }      }
   
     if (n_colors > 1 && fg_count > bg_count) {      if (n_colors > 1 && fg_count > bg_count) {
Line 64  static void CONCAT(send_hextile_tile_, B Line 73  static void CONCAT(send_hextile_tile_, B
         *last_bg = bg;          *last_bg = bg;
     }      }
   
     if (!*has_fg || *last_fg != fg) {      if (n_colors < 3 && (!*has_fg || *last_fg != fg)) {
         flags |= 0x04;          flags |= 0x04;
         *has_fg = 1;          *has_fg = 1;
         *last_fg = fg;          *last_fg = fg;
Line 78  static void CONCAT(send_hextile_tile_, B Line 87  static void CONCAT(send_hextile_tile_, B
         flags |= 0x08;          flags |= 0x08;
   
         irow = (pixel_t *)row;          irow = (pixel_t *)row;
           
         for (j = 0; j < h; j++) {          for (j = 0; j < h; j++) {
             int min_x = -1;              int min_x = -1;
             for (i = 0; i < w; i++) {              for (i = 0; i < w; i++) {
Line 97  static void CONCAT(send_hextile_tile_, B Line 106  static void CONCAT(send_hextile_tile_, B
                 n_data += 2;                  n_data += 2;
                 n_subtiles++;                  n_subtiles++;
             }              }
             irow += vs->ds->linesize / sizeof(pixel_t);              irow += ds_get_linesize(vs->ds) / sizeof(pixel_t);
         }          }
         break;          break;
     case 3:      case 3:
Line 111  static void CONCAT(send_hextile_tile_, B Line 120  static void CONCAT(send_hextile_tile_, B
         for (j = 0; j < h; j++) {          for (j = 0; j < h; j++) {
             int has_color = 0;              int has_color = 0;
             int min_x = -1;              int min_x = -1;
             pixel_t color;              pixel_t color = 0; /* shut up gcc */
   
             for (i = 0; i < w; i++) {              for (i = 0; i < w; i++) {
                 if (!has_color) {                  if (!has_color) {
Line 122  static void CONCAT(send_hextile_tile_, B Line 131  static void CONCAT(send_hextile_tile_, B
                     has_color = 1;                      has_color = 1;
                 } else if (irow[i] != color) {                  } else if (irow[i] != color) {
                     has_color = 0;                      has_color = 0;
   #ifdef GENERIC
                       vnc_convert_pixel(vs, data + n_data, color);
                       n_data += vs->clientds.pf.bytes_per_pixel;
   #else
                     memcpy(data + n_data, &color, sizeof(color));                      memcpy(data + n_data, &color, sizeof(color));
                     hextile_enc_cord(data + n_data + sizeof(pixel_t), min_x, j, i - min_x, 1);                      n_data += sizeof(pixel_t);
                     n_data += 2 + sizeof(pixel_t);  #endif
                       hextile_enc_cord(data + n_data, min_x, j, i - min_x, 1);
                       n_data += 2;
                     n_subtiles++;                      n_subtiles++;
   
                     min_x = -1;                      min_x = -1;
Line 137  static void CONCAT(send_hextile_tile_, B Line 151  static void CONCAT(send_hextile_tile_, B
                 }                  }
             }              }
             if (has_color) {              if (has_color) {
                 memcpy(data + n_data, &color, sizeof(color));  #ifdef GENERIC
                 hextile_enc_cord(data + n_data + sizeof(pixel_t), min_x, j, i - min_x, 1);                  vnc_convert_pixel(vs, data + n_data, color);
                 n_data += 2 + sizeof(pixel_t);                  n_data += vs->clientds.pf.bytes_per_pixel;
   #else
                   memcpy(data + n_data, &color, sizeof(color));
                   n_data += sizeof(pixel_t);
   #endif
                   hextile_enc_cord(data + n_data, min_x, j, i - min_x, 1);
                   n_data += 2;
                 n_subtiles++;                  n_subtiles++;
             }              }
             irow += vs->ds->linesize / sizeof(pixel_t);              irow += ds_get_linesize(vs->ds) / sizeof(pixel_t);
         }          }
   
         /* A SubrectsColoured subtile invalidates the foreground color */  
         *has_fg = 0;  
         if (n_data > (w * h * sizeof(pixel_t))) {          if (n_data > (w * h * sizeof(pixel_t))) {
             n_colors = 4;              n_colors = 4;
             flags = 0x01;              flags = 0x01;
Line 169  static void CONCAT(send_hextile_tile_, B Line 187  static void CONCAT(send_hextile_tile_, B
     vnc_write_u8(vs, flags);      vnc_write_u8(vs, flags);
     if (n_colors < 4) {      if (n_colors < 4) {
         if (flags & 0x02)          if (flags & 0x02)
             vnc_write(vs, last_bg, sizeof(pixel_t));              vs->write_pixels(vs, last_bg, sizeof(pixel_t));
         if (flags & 0x04)          if (flags & 0x04)
             vnc_write(vs, last_fg, sizeof(pixel_t));              vs->write_pixels(vs, last_fg, sizeof(pixel_t));
         if (n_subtiles) {          if (n_subtiles) {
             vnc_write_u8(vs, n_subtiles);              vnc_write_u8(vs, n_subtiles);
             vnc_write(vs, data, n_data);              vnc_write(vs, data, n_data);
         }          }
     } else {      } else {
         for (j = 0; j < h; j++) {          for (j = 0; j < h; j++) {
             vnc_write(vs, row, w * vs->depth);              vs->write_pixels(vs, row, w * ds_get_bytes_per_pixel(vs->ds));
             row += vs->ds->linesize;              row += ds_get_linesize(vs->ds);
         }          }
     }      }
 }  }
   
   #undef NAME
 #undef pixel_t  #undef pixel_t
 #undef CONCAT_I  #undef CONCAT_I
 #undef CONCAT  #undef CONCAT

Removed from v.1.1  
changed lines
  Added in v.1.1.1.7


unix.superglobalmegacorp.com