Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #if !defined(IN) || !defined(OUT)
00038 #error "This file shouldn't be compiled."
00039 #error "It is included as part of translate.c"
00040 #endif
00041
00042 #define IN_T CONCAT3E(uint,IN,_t)
00043 #define OUT_T CONCAT3E(uint,OUT,_t)
00044 #define rfbTranslateWithSingleTableINtoOUT \
00045 CONCAT4E(rfbTranslateWithSingleTable,IN,to,OUT)
00046 #define rfbTranslateWithRGBTablesINtoOUT \
00047 CONCAT4E(rfbTranslateWithRGBTables,IN,to,OUT)
00048
00049
00050
00051
00052
00053
00054 static void
00055 rfbTranslateWithSingleTableINtoOUT (char *table, rfbPixelFormat *in,
00056 rfbPixelFormat *out,
00057 char *iptr, char *optr,
00058 int bytesBetweenInputLines,
00059 int width, int height)
00060 {
00061 IN_T *ip = (IN_T *)iptr;
00062 OUT_T *op = (OUT_T *)optr;
00063 int ipextra = bytesBetweenInputLines / sizeof(IN_T) - width;
00064 OUT_T *opLineEnd;
00065 OUT_T *t = (OUT_T *)table;
00066
00067 while (height > 0) {
00068 opLineEnd = op + width;
00069
00070 while (op < opLineEnd) {
00071 *(op++) = t[*(ip++)];
00072 }
00073
00074 ip += ipextra;
00075 height--;
00076 }
00077 }
00078
00079
00080
00081
00082
00083
00084
00085 static void
00086 rfbTranslateWithRGBTablesINtoOUT (char *table, rfbPixelFormat *in,
00087 rfbPixelFormat *out,
00088 char *iptr, char *optr,
00089 int bytesBetweenInputLines,
00090 int width, int height)
00091 {
00092 IN_T *ip = (IN_T *)iptr;
00093 OUT_T *op = (OUT_T *)optr;
00094 int ipextra = bytesBetweenInputLines / sizeof(IN_T) - width;
00095 OUT_T *opLineEnd;
00096 OUT_T *redTable = (OUT_T *)table;
00097 OUT_T *greenTable = redTable + in->redMax + 1;
00098 OUT_T *blueTable = greenTable + in->greenMax + 1;
00099
00100 while (height > 0) {
00101 opLineEnd = &op[width];
00102
00103 while (op < opLineEnd) {
00104 *(op++) = (redTable[(*ip >> in->redShift) & in->redMax] |
00105 greenTable[(*ip >> in->greenShift) & in->greenMax] |
00106 blueTable[(*ip >> in->blueShift) & in->blueMax]);
00107 ip++;
00108 }
00109 ip += ipextra;
00110 height--;
00111 }
00112 }
00113
00114 #undef IN_T
00115 #undef OUT_T
00116 #undef rfbTranslateWithSingleTableINtoOUT
00117 #undef rfbTranslateWithRGBTablesINtoOUT