⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmspack.c

📁 Linux下的无线网卡通用驱动程序
💻 C
📖 第 1 页 / 共 4 页
字号:
//  Little cms//  Copyright (C) 1998-2005 Marti Maria//// Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions://// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.#include "lcms.h"// This module handles all formats supported by lcms// ---------------------------------------------------------------------------// This macro return words stored as big endian#define CHANGE_ENDIAN(w)    (WORD) ((WORD) ((w)<<8)|((w)>>8))// These macros handles reversing (negative)#define REVERSE_FLAVOR_8(x)     ((BYTE) (0xff-(x)))#define REVERSE_FLAVOR_16(x)    ((WORD)(0xffff-(x)))// Supress waning about info never being used#ifdef __BORLANDC__#pragma warn -par#endif#ifdef _MSC_VER#pragma warning(disable : 4100)#endif// -------------------------------------------------------- Unpacking routines.staticLPBYTE UnrollAnyBytes(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       int nChan = T_CHANNELS(info -> InputFormat);       register int i;       for (i=0; i < nChan; i++) {              wIn[i] = RGB_8_TO_16(*accum); accum++;                     }              return accum + T_EXTRA(info -> InputFormat);}staticLPBYTE Unroll4Bytes(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = RGB_8_TO_16(*accum); accum++; // C       wIn[1] = RGB_8_TO_16(*accum); accum++; // M       wIn[2] = RGB_8_TO_16(*accum); accum++; // Y       wIn[3] = RGB_8_TO_16(*accum); accum++; // K       return accum;}staticLPBYTE Unroll4BytesReverse(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = RGB_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // C       wIn[1] = RGB_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // M       wIn[2] = RGB_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // Y       wIn[3] = RGB_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // K       return accum;}staticLPBYTE Unroll4BytesSwapFirst(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[3] = RGB_8_TO_16(*accum); accum++; // K       wIn[0] = RGB_8_TO_16(*accum); accum++; // C       wIn[1] = RGB_8_TO_16(*accum); accum++; // M       wIn[2] = RGB_8_TO_16(*accum); accum++; // Y              return accum;}// KYMCstaticLPBYTE Unroll4BytesSwap(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[3] = RGB_8_TO_16(*accum); accum++;  // K       wIn[2] = RGB_8_TO_16(*accum); accum++;  // Y       wIn[1] = RGB_8_TO_16(*accum); accum++;  // M       wIn[0] = RGB_8_TO_16(*accum); accum++;  // C       return accum;}staticLPBYTE Unroll4BytesSwapSwapFirst(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[2] = RGB_8_TO_16(*accum); accum++;  // K       wIn[1] = RGB_8_TO_16(*accum); accum++;  // Y       wIn[0] = RGB_8_TO_16(*accum); accum++;  // M       wIn[3] = RGB_8_TO_16(*accum); accum++;  // C       return accum;}staticLPBYTE UnrollAnyWords(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){     int nChan = T_CHANNELS(info -> InputFormat);     register int i;          for (i=0; i < nChan; i++) {              wIn[i] = *(LPWORD) accum; accum += 2;                   }     return accum + T_EXTRA(info -> InputFormat) * sizeof(WORD);       }staticLPBYTE Unroll4Words(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = *(LPWORD) accum; accum+= 2; // C       wIn[1] = *(LPWORD) accum; accum+= 2; // M       wIn[2] = *(LPWORD) accum; accum+= 2; // Y       wIn[3] = *(LPWORD) accum; accum+= 2; // K       return accum;}staticLPBYTE Unroll4WordsReverse(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = REVERSE_FLAVOR_16(*(LPWORD) accum); accum+= 2; // C       wIn[1] = REVERSE_FLAVOR_16(*(LPWORD) accum); accum+= 2; // M       wIn[2] = REVERSE_FLAVOR_16(*(LPWORD) accum); accum+= 2; // Y       wIn[3] = REVERSE_FLAVOR_16(*(LPWORD) accum); accum+= 2; // K       return accum;}staticLPBYTE Unroll4WordsSwapFirst(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[3] = *(LPWORD) accum; accum+= 2; // K       wIn[0] = *(LPWORD) accum; accum+= 2; // C       wIn[1] = *(LPWORD) accum; accum+= 2; // M       wIn[2] = *(LPWORD) accum; accum+= 2; // Y              return accum;}// KYMCstaticLPBYTE Unroll4WordsSwap(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[3] = *(LPWORD) accum; accum+= 2; // K       wIn[2] = *(LPWORD) accum; accum+= 2; // Y       wIn[1] = *(LPWORD) accum; accum+= 2; // M       wIn[0] = *(LPWORD) accum; accum+= 2; // C       return accum;}staticLPBYTE Unroll4WordsSwapSwapFirst(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[2] = *(LPWORD) accum; accum+= 2; // K       wIn[1] = *(LPWORD) accum; accum+= 2; // Y       wIn[0] = *(LPWORD) accum; accum+= 2; // M       wIn[3] = *(LPWORD) accum; accum+= 2; // C       return accum;}staticLPBYTE Unroll4WordsBigEndian(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2; //C       wIn[1] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2; //M       wIn[2] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2; //Y       wIn[3] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2; //K       return accum;}staticLPBYTE Unroll4WordsBigEndianReverse(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = REVERSE_FLAVOR_16(CHANGE_ENDIAN(*(LPWORD) accum)); accum+= 2; //C       wIn[1] = REVERSE_FLAVOR_16(CHANGE_ENDIAN(*(LPWORD) accum)); accum+= 2; //M       wIn[2] = REVERSE_FLAVOR_16(CHANGE_ENDIAN(*(LPWORD) accum)); accum+= 2; //Y       wIn[3] = REVERSE_FLAVOR_16(CHANGE_ENDIAN(*(LPWORD) accum)); accum+= 2; //K       return accum;}// KYMCstaticLPBYTE Unroll4WordsSwapBigEndian(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[3] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2; //K       wIn[2] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2; //Y       wIn[1] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2; //M       wIn[0] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2; //C       return accum;}staticLPBYTE Unroll3Bytes(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = RGB_8_TO_16(*accum); accum++;     // R       wIn[1] = RGB_8_TO_16(*accum); accum++;     // G       wIn[2] = RGB_8_TO_16(*accum); accum++;     // B       return accum;}// Lab8 encoding using v2 PCSstaticLPBYTE Unroll3BytesLab(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = (WORD) ((*accum) << 8); accum++;            wIn[1] = (WORD) ((*accum) << 8); accum++;            wIn[2] = (WORD) ((*accum) << 8); accum++;            return accum;}// BRGstaticLPBYTE Unroll3BytesSwap(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[2] = RGB_8_TO_16(*accum); accum++;     // B       wIn[1] = RGB_8_TO_16(*accum); accum++;     // G       wIn[0] = RGB_8_TO_16(*accum); accum++;     // R       return accum;}staticLPBYTE Unroll3Words(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = *(LPWORD) accum; accum+= 2;  // C R       wIn[1] = *(LPWORD) accum; accum+= 2;  // M G       wIn[2] = *(LPWORD) accum; accum+= 2;  // Y B       return accum;}staticLPBYTE Unroll3WordsSwap(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[2] = *(LPWORD) accum; accum+= 2;  // C R       wIn[1] = *(LPWORD) accum; accum+= 2;  // M G       wIn[0] = *(LPWORD) accum; accum+= 2;  // Y B       return accum;}staticLPBYTE Unroll3WordsBigEndian(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2;       wIn[1] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2;       wIn[2] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2;       return accum;}staticLPBYTE Unroll3WordsSwapBigEndian(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[2] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2;       wIn[1] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2;       wIn[0] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2;       return accum;}// Monochrome duplicates L into RGB for null-transformsstaticLPBYTE Unroll1Byte(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = wIn[1] = wIn[2] = RGB_8_TO_16(*accum); accum++;     // L       return accum;}staticLPBYTE Unroll1ByteSkip2(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = wIn[1] = wIn[2] = RGB_8_TO_16(*accum); accum++;     // L       accum += 2;       return accum;}staticLPBYTE Unroll1ByteReversed(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = wIn[1] = wIn[2] = REVERSE_FLAVOR_16(RGB_8_TO_16(*accum)); accum++;     // L       return accum;}staticLPBYTE Unroll1Word(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = wIn[1] = wIn[2] = *(LPWORD) accum; accum+= 2;   // L       return accum;}staticLPBYTE Unroll1WordReversed(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = wIn[1] = wIn[2] = REVERSE_FLAVOR_16(*(LPWORD) accum); accum+= 2;       return accum;}staticLPBYTE Unroll1WordBigEndian(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = wIn[1] = wIn[2] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2;       return accum;}staticLPBYTE Unroll1WordSkip3(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = wIn[1] = wIn[2] = *(LPWORD) accum;                accum += 8;       return accum;}// Monochrome + alpha. Alpha is loststaticLPBYTE Unroll2Byte(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = wIn[1] = wIn[2] = RGB_8_TO_16(*accum); accum++;     // L       wIn[3] = RGB_8_TO_16(*accum); accum++;                       // alpha       return accum;}staticLPBYTE Unroll2ByteSwapFirst(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[3] = RGB_8_TO_16(*accum); accum++;                       // alpha       wIn[0] = wIn[1] = wIn[2] = RGB_8_TO_16(*accum); accum++;     // L              return accum;}staticLPBYTE Unroll2Word(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = wIn[1] = wIn[2] = *(LPWORD) accum; accum+= 2;   // L       wIn[3] = *(LPWORD) accum; accum += 2;                    // alpha       return accum;}staticLPBYTE Unroll2WordSwapFirst(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[3] = *(LPWORD) accum; accum += 2;                    // alpha       wIn[0] = wIn[1] = wIn[2] = *(LPWORD) accum; accum+= 2;   // L              return accum;}staticLPBYTE Unroll2WordBigEndian(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       wIn[0] = wIn[1] = wIn[2] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2;       wIn[3] = CHANGE_ENDIAN(*(LPWORD) accum); accum+= 2;       return accum;}staticLPBYTE UnrollPlanarBytes(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       int nChan = T_CHANNELS(info -> InputFormat);       register int i;       LPBYTE Init = accum;       for (i=0; i < nChan; i++) {              wIn[i] = RGB_8_TO_16(*accum);              accum += info -> StrideIn;       }       return (Init + 1);}staticLPBYTE UnrollPlanarWords(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       int nChan = T_CHANNELS(info -> InputFormat);       register int i;       LPBYTE Init = accum;       for (i=0; i < nChan; i++) {              wIn[i] = *(LPWORD) accum;              accum += (info -> StrideIn * sizeof(WORD));       }       return (Init + sizeof(WORD));}staticLPBYTE UnrollPlanarWordsBigEndian(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){       int nChan = T_CHANNELS(info -> InputFormat);       register int i;       LPBYTE Init = accum;       for (i=0; i < nChan; i++) {              wIn[i] = CHANGE_ENDIAN(*(LPWORD) accum);              accum += (info -> StrideIn * sizeof(WORD));       }       return (Init + sizeof(WORD));}// floating pointstaticLPBYTE UnrollLabDouble(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){                   if (T_PLANAR(info -> InputFormat)) {        double* Pt = (double*) accum;        cmsCIELab Lab;        Lab.L = Pt[0];        Lab.a = Pt[info->StrideIn];        Lab.b = Pt[info->StrideIn*2];        if (info ->lInputV4Lab)            cmsFloat2LabEncoded4(wIn, &Lab);        else            cmsFloat2LabEncoded(wIn, &Lab);        return accum + sizeof(double);    }    else {        if (info ->lInputV4Lab)            cmsFloat2LabEncoded4(wIn, (LPcmsCIELab) accum);        else            cmsFloat2LabEncoded(wIn, (LPcmsCIELab) accum);        accum += sizeof(cmsCIELab);        return accum;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -