File indexing completed on 2024-04-21 04:20:22
0001 /******************************************************************** 0002 KolorServer - color server based on the X Color Management Specification 0003 This file is part of the KDE project. 0004 0005 Copyright (C) 2012 Casian Andrei <skeletk13@gmail.com> 0006 0007 Redistribution and use in source and binary forms, with or without 0008 modification, are permitted provided that the following conditions 0009 are met: 0010 0011 1. Redistributions of source code must retain the above copyright 0012 notice, this list of conditions and the following disclaimer. 0013 2. Redistributions in binary form must reproduce the above copyright 0014 notice, this list of conditions and the following disclaimer in the 0015 documentation and/or other materials provided with the distribution. 0016 0017 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 0018 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 0019 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 0020 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 0021 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 0022 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 0023 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 0024 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 0025 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 0026 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 0027 *********************************************************************/ 0028 0029 #ifndef COLOR_LOOKUP_TABLE_H_ 0030 #define COLOR_LOOKUP_TABLE_H_ 0031 0032 #include <QDBusMetaType> 0033 #include <QList> 0034 #include <QMultiMap> 0035 #include <QPair> 0036 #include <QRect> 0037 #include <QVector> 0038 0039 0040 /* 0041 * Clut 0042 */ 0043 typedef QVector<quint16> Clut; 0044 typedef QList<Clut> ClutList; 0045 typedef struct { QRect r; Clut c; } RegionalClut; 0046 typedef QMultiMap<uint, RegionalClut> RegionalClutMap; 0047 0048 Q_DECLARE_METATYPE(Clut) 0049 Q_DECLARE_METATYPE(ClutList) 0050 Q_DECLARE_METATYPE(RegionalClut) 0051 Q_DECLARE_METATYPE(RegionalClutMap) 0052 0053 // Marshall the RegionalClut data into a D-Bus argument 0054 inline QDBusArgument &operator<<(QDBusArgument &argument, const RegionalClut &rc) 0055 { 0056 argument.beginStructure(); 0057 argument << rc.r << rc.c; 0058 argument.endStructure(); 0059 return argument; 0060 } 0061 0062 // Retrieve the RegionalClut data from the D-Bus argument 0063 inline const QDBusArgument &operator>>(const QDBusArgument &argument, RegionalClut &rc) 0064 { 0065 argument.beginStructure(); 0066 argument >> rc.r >> rc.c; 0067 argument.endStructure(); 0068 return argument; 0069 } 0070 0071 0072 /* 0073 * Color lookup table 0074 * 0075 * The 3D lookup texture has 64 points in each dimension, using 16 bit integers. 0076 * That means each active region will use 1.5MiB of texture memory. 0077 */ 0078 static const int LUT_GRID_POINTS = 64; 0079 static const size_t CLUT_ELEMENT_SIZE = sizeof(quint16); 0080 static const uint CLUT_ELEMENT_COUNT = LUT_GRID_POINTS * LUT_GRID_POINTS * LUT_GRID_POINTS * 3; 0081 static const size_t CLUT_DATA_SIZE = CLUT_ELEMENT_COUNT * CLUT_ELEMENT_SIZE; 0082 0083 inline static void buildDummyClut(Clut &c) 0084 { 0085 c.resize(CLUT_ELEMENT_COUNT); 0086 quint16 *p = c.data(); 0087 0088 for (int ib = 0; ib < LUT_GRID_POINTS; ++ ib) { 0089 quint16 b = (quint16) ((float) ib / (LUT_GRID_POINTS - 1) * 65535.0 + 0.5); 0090 for (int ig = 0; ig < LUT_GRID_POINTS; ++ ig) { 0091 quint16 g = (quint16) ((float) ig / (LUT_GRID_POINTS - 1) * 65535.0 + 0.5); 0092 for (int ir = 0; ir < LUT_GRID_POINTS; ++ ir) { 0093 quint16 r = (quint16) ((float) ir / (LUT_GRID_POINTS - 1) * 65535.0 + 0.5); 0094 0095 *(p ++) = r; 0096 *(p ++) = g; 0097 *(p ++) = b; 0098 } 0099 } 0100 } 0101 } 0102 0103 #endif // COLOR_LOOKUP_TABLE_H_