/[rdesktop]/jpeg/rdesktop/trunk/orders.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /jpeg/rdesktop/trunk/orders.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 683 by n-ki, Tue Apr 27 12:55:33 2004 UTC revision 725 by jsorg71, Sun Jun 27 17:51:54 2004 UTC
# Line 670  process_raw_bmpcache(STREAM s) Line 670  process_raw_bmpcache(STREAM s)
670    
671          bitmap = ui_create_bitmap(width, height, inverted);          bitmap = ui_create_bitmap(width, height, inverted);
672          xfree(inverted);          xfree(inverted);
673          cache_put_bitmap(cache_id, cache_idx, bitmap);          cache_put_bitmap(cache_id, cache_idx, bitmap, 0);
674  }  }
675    
676  /* Process a bitmap cache order */  /* Process a bitmap cache order */
# Line 695  process_bmpcache(STREAM s) Line 695  process_bmpcache(STREAM s)
695          in_uint16_le(s, bufsize);       /* bufsize */          in_uint16_le(s, bufsize);       /* bufsize */
696          in_uint16_le(s, cache_idx);          in_uint16_le(s, cache_idx);
697    
698          if (!g_use_rdp5)          if (g_use_rdp5)
699            {
700                    size = bufsize;
701            }
702            else
703          {          {
704    
705                  /* Begin compressedBitmapData */                  /* Begin compressedBitmapData */
# Line 706  process_bmpcache(STREAM s) Line 710  process_bmpcache(STREAM s)
710                  in_uint16_le(s, final_size);                  in_uint16_le(s, final_size);
711    
712          }          }
         else  
         {  
                 size = bufsize;  
         }  
713          in_uint8p(s, data, size);          in_uint8p(s, data, size);
714    
715          DEBUG(("BMPCACHE(cx=%d,cy=%d,id=%d,idx=%d,bpp=%d,size=%d,pad1=%d,bufsize=%d,pad2=%d,rs=%d,fs=%d)\n", width, height, cache_id, cache_idx, bpp, size, pad1, bufsize, pad2, row_size, final_size));          DEBUG(("BMPCACHE(cx=%d,cy=%d,id=%d,idx=%d,bpp=%d,size=%d,pad1=%d,bufsize=%d,pad2=%d,rs=%d,fs=%d)\n", width, height, cache_id, cache_idx, bpp, size, pad1, bufsize, pad2, row_size, final_size));
# Line 719  process_bmpcache(STREAM s) Line 719  process_bmpcache(STREAM s)
719          if (bitmap_decompress(bmpdata, width, height, data, size, Bpp))          if (bitmap_decompress(bmpdata, width, height, data, size, Bpp))
720          {          {
721                  bitmap = ui_create_bitmap(width, height, bmpdata);                  bitmap = ui_create_bitmap(width, height, bmpdata);
722                  cache_put_bitmap(cache_id, cache_idx, bitmap);                  cache_put_bitmap(cache_id, cache_idx, bitmap, 0);
723          }          }
724          else          else
725          {          {
# Line 729  process_bmpcache(STREAM s) Line 729  process_bmpcache(STREAM s)
729          xfree(bmpdata);          xfree(bmpdata);
730  }  }
731    
732    /* Process a bitmap cache v2 order */
733    static void
734    process_bmpcache2(STREAM s, uint16 flags, BOOL compressed)
735    {
736            HBITMAP bitmap;
737            int y;
738            uint8 cache_id, cache_idx_low, width, height, Bpp;
739            uint16 cache_idx, bufsize;
740            uint8 *data, *bmpdata, *bitmap_id;
741    
742            bitmap_id = NULL;       /* prevent compiler warning */
743            cache_id = flags & ID_MASK;
744            Bpp = ((flags & MODE_MASK) >> MODE_SHIFT) - 2;
745    
746            if (flags & PERSIST)
747            {
748                    in_uint8p(s, bitmap_id, 8);
749            }
750    
751            if (flags & SQUARE)
752            {
753                    in_uint8(s, width);
754                    height = width;
755            }
756            else
757            {
758                    in_uint8(s, width);
759                    in_uint8(s, height);
760            }
761    
762            in_uint16_be(s, bufsize);
763            bufsize &= BUFSIZE_MASK;
764            in_uint8(s, cache_idx);
765    
766            if (cache_idx & LONG_FORMAT)
767            {
768                    in_uint8(s, cache_idx_low);
769                    cache_idx = ((cache_idx ^ LONG_FORMAT) << 8) + cache_idx_low;
770            }
771    
772            in_uint8p(s, data, bufsize);
773    
774            DEBUG(("BMPCACHE2(compr=%d,flags=%x,cx=%d,cy=%d,id=%d,idx=%d,Bpp=%d,bs=%d)\n",
775                            compressed, flags, width, height, cache_id, cache_idx, Bpp, bufsize));
776    
777            bmpdata = (uint8 *) xmalloc(width * height * Bpp);
778    
779            if (compressed)
780            {
781                    if (!bitmap_decompress(bmpdata, width, height, data, bufsize, Bpp))
782                    {
783                            DEBUG(("Failed to decompress bitmap data\n"));
784                            xfree(bmpdata);
785                            return;
786                    }
787            }
788            else
789            {
790                    for (y = 0; y < height; y++)
791                            memcpy(&bmpdata[(height - y - 1) * (width * Bpp)],
792                                            &data[y * (width * Bpp)], width * Bpp);
793            }
794    
795            bitmap = ui_create_bitmap(width, height, bmpdata);
796    
797            if (bitmap)
798            {
799                    cache_put_bitmap(cache_id, cache_idx, bitmap, 0);
800                    if (flags & PERSIST)
801                            pstcache_put_bitmap(cache_id, cache_idx, bitmap_id, width, height,
802                                            width * height * Bpp, bmpdata);
803            }
804            else
805            {
806                    DEBUG(("process_bmpcache2: ui_create_bitmap failed\n"));
807            }
808    
809            xfree(bmpdata);
810    }
811    
812  /* Process a colourmap cache order */  /* Process a colourmap cache order */
813  static void  static void
814  process_colcache(STREAM s)  process_colcache(STREAM s)
# Line 796  process_fontcache(STREAM s) Line 876  process_fontcache(STREAM s)
876  static void  static void
877  process_secondary_order(STREAM s)  process_secondary_order(STREAM s)
878  {  {
879          uint16 length;          /* The length isn't calculated correctly by the server.
880             * For very compact orders the length becomes negative
881             * so a signed integer must be used. */
882            sint16 length;
883            uint16 flags;
884          uint8 type;          uint8 type;
885          uint8 *next_order;          uint8 *next_order;
886    
887          in_uint16_le(s, length);          in_uint16_le(s, (uint16) length);
888          in_uint8s(s, 2);        /* flags */          in_uint16_le(s, flags);         /* used by bmpcache2 */
889          in_uint8(s, type);          in_uint8(s, type);
890    
891          next_order = s->p + length + 7;          next_order = s->p + length + 7;
# Line 824  process_secondary_order(STREAM s) Line 908  process_secondary_order(STREAM s)
908                          process_fontcache(s);                          process_fontcache(s);
909                          break;                          break;
910    
911                    case RDP_ORDER_RAW_BMPCACHE2:
912                            process_bmpcache2(s, flags, False);     /* uncompressed */
913                            break;
914    
915                    case RDP_ORDER_BMPCACHE2:
916                            process_bmpcache2(s, flags, True);      /* compressed */
917                            break;
918    
919                  default:                  default:
920                          unimpl("secondary order %d\n", type);                          unimpl("secondary order %d\n", type);
921          }          }

Legend:
Removed from v.683  
changed lines
  Added in v.725

  ViewVC Help
Powered by ViewVC 1.1.26