ColourWiki - Recent changes [en] 2007-12-19T19:28:36Z Track the most recent changes to the wiki on this page. MediaWiki 1.4.10 CMM API 2007-12-19T14:10:29Z 2007-12-19T14:10:29 2007-12-19T14:10:29Z <p>/* Pixel Layout */</p> <table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'> <tr> <td colspan='2' width='50%' align='center' class='diff-otitle'>Revision as of 14:10, 19 Dec 2007</td> <td colspan='2' width='50%' align='center' class='diff-ntitle'>Current revision</td> </tr> <tr><td colspan="2" align="left"><strong>Line 112:</strong></td> <td colspan="2" align="left"><strong>Line 112:</strong></td></tr> <tr><td> </td><td class='diff-context'> oyDOUBLE /*!< IEEE double precission floating point number */</td><td> </td><td class='diff-context'> oyDOUBLE /*!< IEEE double precission floating point number */</td></tr> <tr><td> </td><td class='diff-context'> } oyDATATYPE_e;</td><td> </td><td class='diff-context'> } oyDATATYPE_e;</td></tr> <tr><td>-</td><td class='diff-deletedline'><span class="diffchange"> </span></td><td>+</td><td class='diff-addedline'> </td></tr> <tr><td>-</td><td class='diff-deletedline'> /** parametric <span class="diffchange">enum </span>as shorthand for the channel layout in bitmaps</td><td>+</td><td class='diff-addedline'><span class="diffchange">The below pixel description is slightly different from lcms layout as it relies on the addtional </span></td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'><span class="diffchange">profile information, to avoid concurrent definitions for the colour channels.</span></td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'> </td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'> /** <span class="diffchange">@type oyPixel_t </span>parametric <span class="diffchange">uint32_t integer </span>as shorthand for the channel layout in bitmaps</td></tr> <tr><td> </td><td class='diff-context'> </td><td> </td><td class='diff-context'> </td></tr> <tr><td> </td><td class='diff-context'> should fit into a 32bit type, usual unsigned int or uint32_t</td><td> </td><td class='diff-context'> should fit into a 32bit type, usual unsigned int or uint32_t</td></tr> <tr><td colspan="2" align="left"><strong>Line 129:</strong></td> <td colspan="2" align="left"><strong>Line 132:</strong></td></tr> <tr><td> </td><td class='diff-context'> </td><td> </td><td class='diff-context'> </td></tr> <tr><td> </td><td class='diff-context'> */</td><td> </td><td class='diff-context'> */</td></tr> <tr><td>-</td><td class='diff-deletedline'></td><td colspan="2"> </td></tr> <tr><td>-</td><td class='diff-deletedline'>The above pixel description is slightly different from lcms layout as it relies on the addtional </td><td colspan="2"> </td></tr> <tr><td>-</td><td class='diff-deletedline'>profile information, to avoid concurrent definitions for the colour channels.</td><td colspan="2"> </td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'> /** @brief CMM capability query enum</td><td> </td><td class='diff-context'> /** @brief CMM capability query enum</td></tr> <tr><td colspan="2" align="left"><strong>Line 229:</strong></td> <td colspan="2" align="left"><strong>Line 229:</strong></td></tr> <tr><td> </td><td class='diff-context'> } oyCMMapi1_s;</td><td> </td><td class='diff-context'> } oyCMMapi1_s;</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td>-</td><td class='diff-deletedline'> </td><td colspan="2"> </td></tr> <tr><td> </td><td class='diff-context'>=== Discussion ===</td><td> </td><td class='diff-context'>=== Discussion ===</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> </table> KaiUweBehrmann foobar OpenIccDirectoryProposal 2007-12-19T11:33:16Z 2007-12-19T11:33:16 2007-12-19T11:33:16Z <p></p> <table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'> <tr> <td colspan='2' width='50%' align='center' class='diff-otitle'>Revision as of 11:33, 19 Dec 2007</td> <td colspan='2' width='50%' align='center' class='diff-ntitle'>Current revision</td> </tr> <tr><td colspan="2" align="left"><strong>Line 123:</strong></td> <td colspan="2" align="left"><strong>Line 123:</strong></td></tr> <tr><td> </td><td class='diff-context'>'''''settings'''''/</td><td> </td><td class='diff-context'>'''''settings'''''/</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td>-</td><td class='diff-deletedline'>Binary blobs should be preferedly go <span class="diffchange">into </span>the _DATA_ and clear text ones the _CONFIG_ route.</td><td>+</td><td class='diff-addedline'>Binary blobs should be preferedly go the _DATA_ and clear text ones the _CONFIG_ route.</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>== CMMs ==</td><td> </td><td class='diff-context'>== CMMs ==</td></tr> <tr><td>-</td><td class='diff-deletedline'>CMM's register can be stored in:</td><td>+</td><td class='diff-addedline'>CMM's register <span class="diffchange">files </span>can be stored in:</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>'''''cmms'''''/</td><td> </td><td class='diff-context'>'''''cmms'''''/</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td>-</td><td class='diff-deletedline'>Binary blobs should be preferedly go <span class="diffchange">into </span>the _DATA_ and clear text ones the _CONFIG_ route.</td><td>+</td><td class='diff-addedline'>Binary blobs should be preferedly go the _DATA_ and clear text ones the _CONFIG_ route.</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>== Installation ==</td><td> </td><td class='diff-context'>== Installation ==</td></tr> </table> Oyadmin foobar Talk:OpenIccDirectoryProposal 2007-12-19T11:32:17Z 2007-12-19T11:32:17 2007-12-19T11:32:17Z <p></p> <table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'> <tr> <td colspan='2' width='50%' align='center' class='diff-otitle'>Revision as of 11:32, 19 Dec 2007</td> <td colspan='2' width='50%' align='center' class='diff-ntitle'>Current revision</td> </tr> <tr><td colspan="2" align="left"><strong>Line 4:</strong></td> <td colspan="2" align="left"><strong>Line 4:</strong></td></tr> <tr><td> </td><td class='diff-context'>XDG paths + native CMS paths -> Oyranos paths [[User:KaiUweBehrmann|KaiUweBehrmann]] 10:51, 14 Nov 2007 (CET)</td><td> </td><td class='diff-context'>XDG paths + native CMS paths -> Oyranos paths [[User:KaiUweBehrmann|KaiUweBehrmann]] 10:51, 14 Nov 2007 (CET)</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td>-</td><td class='diff-deletedline'>XDG_CONFIG_PATH is still missed [[User:KaiUweBehrmann|KaiUweBehrmann]] 15:45, 19 Nov 2007 (CET)</td><td>+</td><td class='diff-addedline'><span class="diffchange">(done)</span>XDG_CONFIG_PATH is still missed [[User:KaiUweBehrmann|KaiUweBehrmann]] 15:45, 19 Nov 2007 (CET)</td></tr> </table> KaiUweBehrmann foobar OpenIccDirectoryProposal 2007-12-19T11:29:34Z 2007-12-19T11:29:34 2007-12-19T11:29:34Z <p>coexisting XDG and CMS paths, add XDG_CONFIG_PATH, Installation</p> <table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'> <tr> <td colspan='2' width='50%' align='center' class='diff-otitle'>Revision as of 11:29, 19 Dec 2007</td> <td colspan='2' width='50%' align='center' class='diff-ntitle'>Current revision</td> </tr> <tr><td colspan="2" align="left"><strong>Line 28:</strong></td> <td colspan="2" align="left"><strong>Line 28:</strong></td></tr> <tr><td> </td><td class='diff-context'>| Kai-Uwe Behrmann</td><td> </td><td class='diff-context'>| Kai-Uwe Behrmann</td></tr> <tr><td> </td><td class='diff-context'>| slightly modified formulations</td><td> </td><td class='diff-context'>| slightly modified formulations</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>|-</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>| Revision 0.1.5</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>| 2007-12-19</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>| Kai-Uwe Behrmann</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>| coexisting XDG and CMS paths, add XDG_CONFIG_PATH, Installation</td></tr> <tr><td> </td><td class='diff-context'>|-</td><td> </td><td class='diff-context'>|-</td></tr> <tr><td> </td><td class='diff-context'>|}</td><td> </td><td class='diff-context'>|}</td></tr> <tr><td colspan="2" align="left"><strong>Line 49:</strong></td> <td colspan="2" align="left"><strong>Line 54:</strong></td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>'''''$XDG_CONFIG_HOME/color'''''</td><td> </td><td class='diff-context'>'''''$XDG_CONFIG_HOME/color'''''</td></tr> <tr><td>-</td><td class='diff-deletedline'><span class="diffchange">or if XDG_CONFIG_HOME is not set, alternatively</span></td><td>+</td><td class='diff-addedline'><span class="diffchange">and</span></td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>'''''$HOME/.config/color'''''</td><td> </td><td class='diff-context'>'''''$HOME/.config/color'''''</td></tr> <tr><td>-</td><td class='diff-deletedline'>for a top directory to store configuration files in its subdirectories.</td><td>+</td><td class='diff-addedline'>for a top directory to store <span class="diffchange">human readable </span>configuration files in its subdirectories.</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>'''''$XDG_DATA_HOME/color'''''</td><td> </td><td class='diff-context'>'''''$XDG_DATA_HOME/color'''''</td></tr> <tr><td>-</td><td class='diff-deletedline'><span class="diffchange">or, if XDG_DATA_HOME is not set, alternatively</span></td><td>+</td><td class='diff-addedline'><span class="diffchange">and</span></td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>'''''$HOME/.local/share/color'''''</td><td> </td><td class='diff-context'>'''''$HOME/.local/share/color'''''</td></tr> <tr><td colspan="2" align="left"><strong>Line 67:</strong></td> <td colspan="2" align="left"><strong>Line 72:</strong></td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td>-</td><td class='diff-deletedline'>As system wide installation paths exist the XDG_DATA_DIRS <span class="diffchange">variable</span>, which itself can contain several directory entries:</td><td>+</td><td class='diff-addedline'>As system wide installation paths exist the <span class="diffchange">'''''</span>XDG_DATA_DIRS<span class="diffchange">''''' and '''''XDG_CONFIG_DIRS''''' variables</span>, which itself can contain several directory entries:</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td>-</td><td class='diff-deletedline'>'''''$XDG_DATA_DIRS'''''[0]'''''/color''''', '''''$XDG_DATA_DIRS'''''[1]'''''/color''''' and so on, <span class="diffchange">or alternatively</span></td><td>+</td><td class='diff-addedline'>'''''$XDG_DATA_DIRS'''''[0]'''''/color''''', '''''$XDG_DATA_DIRS'''''[1]'''''/color''''' and so on, <span class="diffchange">plus</span></td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td>-</td><td class='diff-deletedline'>two system paths, due to different system directory layouts, exist and should be searched for:</td><td>+</td><td class='diff-addedline'>two system paths, due to different system directory layouts, exist and should <span class="diffchange">always </span>be searched for:</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>'''''/usr/local/share/color'''''</td><td> </td><td class='diff-context'>'''''/usr/local/share/color'''''</td></tr> <tr><td colspan="2" align="left"><strong>Line 78:</strong></td> <td colspan="2" align="left"><strong>Line 83:</strong></td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>'''''/usr/share/color''''' as typical for Linux packages.</td><td> </td><td class='diff-context'>'''''/usr/share/color''''' as typical for Linux packages.</td></tr> <tr><td>-</td><td class='diff-deletedline'></td><td colspan="2"> </td></tr> <tr><td>-</td><td class='diff-deletedline'>An application path points to:</td><td colspan="2"> </td></tr> <tr><td>-</td><td class='diff-deletedline'></td><td colspan="2"> </td></tr> <tr><td>-</td><td class='diff-deletedline'>'''''$PREFIX/share/color'''''</td><td colspan="2"> </td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>These above paths are considered top level entry points and should contain almost no files.</td><td> </td><td class='diff-context'>These above paths are considered top level entry points and should contain almost no files.</td></tr> <tr><td colspan="2" align="left"><strong>Line 87:</strong></td> <td colspan="2" align="left"><strong>Line 88:</strong></td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>Typical colour configuration data is architecture independent. The configuration can therefore stay in one place as further described below.</td><td> </td><td class='diff-context'>Typical colour configuration data is architecture independent. The configuration can therefore stay in one place as further described below.</td></tr> <tr><td>-</td><td class='diff-deletedline'>Architecture dependent CMM modules and utilities should <span class="diffchange">go into </span>the usual <span class="diffchange">file </span>system <span class="diffchange">places </span>for libraries and binary executables.</td><td>+</td><td class='diff-addedline'>Architecture dependent CMM modules and utilities should <span class="diffchange">reside below </span>the usual system <span class="diffchange">paths </span>for libraries and binary executables<span class="diffchange">. They are here not described in detail</span>.</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>== Colour Profile Paths ==</td><td> </td><td class='diff-context'>== Colour Profile Paths ==</td></tr> <tr><td colspan="2" align="left"><strong>Line 122:</strong></td> <td colspan="2" align="left"><strong>Line 123:</strong></td></tr> <tr><td> </td><td class='diff-context'>'''''settings'''''/</td><td> </td><td class='diff-context'>'''''settings'''''/</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>Binary blobs should be preferedly go into the _DATA_ and clear text ones the _CONFIG_ route.</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>== CMMs ==</td><td> </td><td class='diff-context'>== CMMs ==</td></tr> <tr><td>-</td><td class='diff-deletedline'>CMM's register <span class="diffchange">data </span>can be stored in:</td><td>+</td><td class='diff-addedline'>CMM's register can be stored in:</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>'''''cmms'''''/</td><td> </td><td class='diff-context'>'''''cmms'''''/</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'></td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>Binary blobs should be preferedly go into the _DATA_ and clear text ones the _CONFIG_ route.</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'></td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>== Installation ==</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>It is recommended to ask for the XDG variables befor installing globaly visible data on a system. </td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'></td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>In contrary to create packages with static file locations, like RPM, use the provided static paths only.</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'></td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>For ICC profiles this would be:</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>: ''/usr/local/share/color/icc''</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>: ''/usr/share/color/icc''</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>: ''~/.local/share/icc''</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>== Technical implementation ==</td><td> </td><td class='diff-context'>== Technical implementation ==</td></tr> <tr><td>-</td><td class='diff-deletedline'>The profile paths exist on system level in the file hierarchy. </td><td>+</td><td class='diff-addedline'>The profile paths exist on system level in the file hierarchy.</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>For the XDG variables see [1].</td><td> </td><td class='diff-context'>For the XDG variables see [1].</td></tr> </table> KaiUweBehrmann foobar CMM API 2007-12-19T05:33:12Z 2007-12-19T05:33:12 2007-12-19T05:33:12Z <p>/* DRAFT */ typo</p> <p><b>New page</b></p><div>= DRAFT =<br /> <br /> As an excerpt from the current development, I place here a header <br /> fragment showing the basic structures to pluging in lcms into <br /> Oyranos' module system.<br /> <br /> My question to interessted developers is,<br><br /> Will the below outlined API be enough to work flawless?<br /> <br /> <br /> <br /> /** @brief Oyranos name structure<br /> *<br /> * @since Oyranos: version 0.1.8<br /> * @date october 2007 (API 0.1.8)<br /> */<br /> typedef struct {<br /> oyOBJECT_TYPE_e type; /*!< internal struct type oyOBJECT_TYPE_NAME_S */<br /> char * nick; /*!< few letters for mass representation (A1) */<br /> char * name; /*!< normal visible name (A1-MySys) */<br /> char * description; /*!< full user description (A1-MySys from Oyranos) */<br /> } oyName_s;<br /> <br /> /** @brief icon data<br /> *<br /> * Since: 0.1.8<br /> */<br /> typedef struct {<br /> oyOBJECT_TYPE_e type; /*!< struct type oyOBJECT_TYPE_ICON_S */ <br /> int width;<br /> int height;<br /> float * data; /*!< should be sRGB matched */<br /> oyChar * file_list; /*!< colon ':' delimited list of icon file names, SVG, PNG */<br /> } oyIcon_s;<br /> <br /> typedef struct oyCMMapi_s oyCMMapi_s;<br /> <br /> === CMM Registration ===<br /> <br /> /** @brief the CMM API resources struct to implement and set by a CMM<br /> *<br /> * Given an example CMM with name "little cms", and it wants to use the <br /> * four-char ID 'lcms', the CMM can register itself to Oyranos as follows:<br /> * The CMM module file must be named<br /> * something_lcms_cmm_module_something.something .<br /> * On Linux this could be "liboyranos_lcms_cmm_module.so.0.1.8".<br /> * The four-chars 'lcms' must be prepended with OY_MODULE_NAME alias<br /> * "_cmm_module".<br /> *<br /> * Oyranos will scan the $(libdir)/color/cmms/ path, opens the available <br /> * CMM's from this directory and extracts the four-chars before OY_MODULE_NAME<br /> * from the library names. Module paths can be added through the<br /> * OY_MODULE_PATHS environment variable.<br /> * Oyranos looks for a symbol to a oyCMMInfo_s struct of the four-byte ID plus<br /> * OY_MODULE_NAME which results in our example in the name "lcms_cmm_module".<br /> * On Posix system this should be loadable by dlsym.<br /> * The lcms_cmm_module should be of type oyCMMInfo_s with the type field<br /> * and all other fields set appropriately.<br /> *<br /> * The api field is a placeholder to get a real api struct assigned. If the CMM<br /> * wants to provide more than one API, they can be chained. The apis_n member<br /> * is to be set to the number of APIs.<br /> *<br /> * @since Oyranos: version 0.1.8<br /> * @date 5 december 2007 (API 0.1.8)<br /> */ <br /> typedef struct {<br /> oyOBJECT_TYPE_e type; /*!< struct type oyOBJECT_TYPE_CMM_INFO_S */<br /> icSignature cmmId; /*!< ICC signature 'lcms' */<br /> oyChar * backend_version; /*!< non localisable 'v1.17' */<br /> oyName_s name; /*!< localisable 'lcms' 'little cms' '...'*/<br /> oyName_s manufacturer; /*!< localisable 'Marti' 'Marti Maria' 'support email: @; internet: www.littlecms.com; sources: ...' */<br /> oyName_s copyright; /*!< localisable 'MIT','MIT License'.. */<br /> int oy_compatibility; /*!< last supported Oyranos CMM API : OYRANOS_VERSION */<br /> <br /> oyCMMapi_s * api; /**< must be casted to a according API */<br /> int apis_n; /**< count of implemented apis */<br /> <br /> oyIcon_s icon; /*!< zero terminated list of a icon pyramid */<br /> } oyCMMInfo_s;<br /> <br /> typedef void* oyPointer;<br /> typedef oyPointer (*oyStructCopyF_t) ( oyPointer, oyPointer );<br /> typedef int (*oyStructReleaseF_t) ( oyPointer* );<br /> <br /> /** @brief CMM pointer<br /> * <br /> * The oyCMMptr_s is used internally and for CMM's.<br /> * Memory management is done by Oyranos' oyAllocateFunc_ and oyDeallocateFunc_.<br /> *<br /> * @since Oyranos: version 0.1.8<br /> * @date november 2007 (API 0.1.8)<br /> */<br /> typedef struct {<br /> oyOBJECT_TYPE_e type; /*!< internal struct type oyOBJECT_TYPE_CMM_POINTER_S */<br /> char cmm[5]; /*!< the 4 char CMM ID 'lcms' */<br /> char func_name[32]; /*!< optional the CMM's function name */<br /> oyPointer ptr; /*!< a CMM's data pointer */<br /> char resource[5]; /**< the resource type 'oyPR' */<br /> oyStructReleaseF_t ptrRelease; /*!< CMM's deallocation function */<br /> int ref; /**< Oyranos reference counter */<br /> } oyCMMptr_s;<br /> <br /> === Pixel Layout ===<br /> <br /> typedef enum {<br /> oyUINT8, /*!< 8-bit integer */<br /> oyUINT16, /*!< 16-bit integer */<br /> oyUINT32, /*!< 32-bit integer */<br /> oyHALF, /*!< 16-bit floating point number */<br /> oyFLOAT, /*!< IEEE floating point number */<br /> oyDOUBLE /*!< IEEE double precission floating point number */<br /> } oyDATATYPE_e;<br /> <br /> /** parametric enum as shorthand for the channel layout in bitmaps<br /> <br /> should fit into a 32bit type, usual unsigned int or uint32_t<br /> <br /> X F P S TTTT OOOOOOOO CCCCCCCC<br /> <br /> C channels count per pixel (3 for RGB); max 255<br /> O colour channel offset (0 for RGB, 1 for ARGB)<br /> P Planar bool: 0 - interwoven, 1 - one channel after the other <br /> S Swap colour channels bool (BGR)<br /> T Type oyDATATYPE_e<br /> X non host byte order<br /> F Revert bool: 0 - MinIsBlack(Chocolate) 1 - MinIsWhite(Vanilla);<br /> exchange min and max : (1-x)<br /> <br /> */<br /> <br /> The above pixel description is slightly different from lcms layout as it relies on the addtional <br /> profile information, to avoid concurrent definitions for the colour channels.<br /> <br /> /** @brief CMM capability query enum<br /> *<br /> * Since: 0.1.8<br /> */<br /> typedef enum {<br /> oyQUERY_OYRANOS_COMPATIBILITY, /*!< provides the Oyranos version and expects the CMM compiled or compatibility Oyranos version back */<br /> oyQUERY_PIXELLAYOUT_DATATYPE, /*!< takes a oyDATATYPE_e arg as value */<br /> oyQUERY_PIXELLAYOUT_CHANNELCOUNT,<br /> oyQUERY_PIXELLAYOUT_SWAP_COLOURCHANNELS,<br /> oyQUERY_PIXELLAYOUT_COLOURCHANNEL_OFFSET,<br /> oyQUERY_PIXELLAYOUT_PLANAR,<br /> oyQUERY_PIXELLAYOUT_FLAVOUR,<br /> oyQUERY_HDR, /*!< value a oyDATATYPE_e (oyHALF...) */<br /> oyQUERY_PROFILE_FORMAT = 20 /*!< value 1 == ICC */<br /> } oyCMMQUERY_e;<br /> <br /> typedef int (*oyCMMCanHandle_t) ( oyCMMQUERY_e type,<br /> int value );<br /> <br /> typedef int (*oyCMMInit_t) ( void );<br /> <br /> typedef int (*oyCMMProfile_Open_t)( oyPointer block,<br /> size_t size,<br /> oyCMMptr_s * oy );<br /> #define oyCMM_PROFILE "oyPR"<br /> <br /> typedef int (*oyCMMColourConversion_Create_t) (<br /> oyCMMptr_s ** cmm_profile_array,<br /> int profiles_n,<br /> int pixel_layout_in,<br /> int pixel_layout_out,<br /> int intent,<br /> int proofing_intent,<br /> int flags,<br /> oyCMMptr_s * oy );<br /> #define oyCMM_COLOUR_CONVERSION "oyCC"<br /> <br /> typedef void (*oyCMMProgress_t) ( int ID,<br /> double progress );<br /> <br /> typedef int (*oyCMMColourConversion_Run_t)(<br /> oyCMMptr_s * cmm_transform,<br /> oyPointer in_data,<br /> oyPointer out_data,<br /> int count,<br /> oyCMMProgress_t progress );<br /> <br /> <br /> typedef icSignature (*oyCMMProfile_GetSignature_t) (<br /> oyCMMptr_s * cmm_ptr,<br /> int pcs);<br /> <br /> <br /> /*oyPointer oyCMMallocateFunc ( size_t size );<br /> void oyCMMdeallocateFunc(oyPointer mem );*/<br /> <br /> typedef int (*oyCMMMessageFuncSet_t)( oyMessageFunc_t message_func );<br /> <br /> <br /> /** @brief the generic part if a API to implement and set by a CMM<br /> *<br /> * @since Oyranos: version 0.1.8<br /> * @date 12 december 2007 (API 0.1.8)<br /> */<br /> struct oyCMMapi_s {<br /> oyOBJECT_TYPE_e type; /**< struct type oyOBJECT_TYPE_CMM_API1_S */<br /> oyCMMapi_s * next;<br /> <br /> oyCMMInit_t oyCMMInit;<br /> oyCMMMessageFuncSet_t oyCMMMessageFuncSet;<br /> };<br /> <br /> <br /> <br /> /** @brief the API 1 to implement and set by a CMM<br /> *<br /> * @since Oyranos: version 0.1.8<br /> * @date 5 december 2007 (API 0.1.8)<br /> */<br /> typedef struct {<br /> oyOBJECT_TYPE_e type; /**< struct type oyOBJECT_TYPE_CMM_API1_S */<br /> oyCMMapi_s * next;<br /> <br /> oyCMMInit_t oyCMMInit;<br /> oyCMMMessageFuncSet_t oyCMMMessageFuncSet;<br /> <br /> oyCMMCanHandle_t oyCMMCanHandle; <br /> <br /> oyCMMProfile_Open_t oyCMMProfile_Open;<br /> oyCMMProfile_GetText_t oyCMMProfile_GetText;<br /> oyCMMProfile_GetSignature_t oyCMMProfile_GetSignature;<br /> oyCMMColourConversion_Create_t oyCMMColourConversion_Create;<br /> oyCMMColourConversion_Run_t oyCMMColourConversion_Run;<br /> <br /> } oyCMMapi1_s;<br /> <br /> <br /> === Discussion ===<br /> <br /> The oyCMMColourConversion_Create_t function seems the most complex one. <br /> It covers the profile set, proofing, rendering intent, precission, gamut<br /> checking and so on. The provided oyCMMptr_s "oy" struct has to be filled <br /> in with the appropriate values, a pointer and release function and can <br /> contain additional hints to allow some runtime typechecking in both <br /> the CMM itself and Oyranos.<br /> <br /> typedef int (*oyCMMColourConversion_Create_t) (<br /> oyCMMptr_s ** cmm_profile_array,<br /> int profiles_n,<br /> int pixel_layout_in,<br /> int pixel_layout_out,<br /> int intent,<br /> int proofing_intent,<br /> int flags,<br /> oyCMMptr_s * oy );<br /> #define oyCMM_COLOUR_CONVERSION "oyCC" <br /> <br /> The pixel_layout_xx is described in the "parametric enum" comment.<br /> The profiles need to follow a certain order to make sense for proofing.<br /> Or it would be more secure to have the proofing profile as a extra<br /> parameter?<br /> The intent and proofing intent should be clear.<br /> <br /> The flags are open to discuss. They need to cover gamut checking and the<br /> BPC algorithm. Optionally it could cover the no precalculation flag<br /> known from lcms to increase precision, selection of the interpolation<br /> (tetrahedral versus trilinear) and other speed flags.<br /> <br /> K channel preservation stuff?<br /> <br /> cmsFLAGS_GRIDPOINTS ?<br /> <br /> What is missed or is unclear, at least to me, are the CIE CAM02 handling,<br /> on disk transform caching and<br /> profile creation in the API.<br /> <br /> Probably it is enough to handle the last points later.<br /> <br /> The oyCMMCanHandle_t function will be merged as a static field into the<br /> oyCMMapi1_s struct.</div> KaiUweBehrmann foobar Oyranos 2007-12-18T12:57:41Z 2007-12-18T12:57:41 2007-12-18T12:57:41Z <p>/* Development */</p> <table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'> <tr> <td colspan='2' width='50%' align='center' class='diff-otitle'>Revision as of 12:57, 18 Dec 2007</td> <td colspan='2' width='50%' align='center' class='diff-ntitle'>Current revision</td> </tr> <tr><td colspan="2" align="left"><strong>Line 49:</strong></td> <td colspan="2" align="left"><strong>Line 49:</strong></td></tr> <tr><td> </td><td class='diff-context'>* [[FeatureWish|Feature wishes]] including a Todo list for the next release</td><td> </td><td class='diff-context'>* [[FeatureWish|Feature wishes]] including a Todo list for the next release</td></tr> <tr><td> </td><td class='diff-context'>* [[FeatureWish#Todo|Todo]] list for usual bigger milestones and the next release</td><td> </td><td class='diff-context'>* [[FeatureWish#Todo|Todo]] list for usual bigger milestones and the next release</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>* [[CMM API]]</td></tr> <tr><td> </td><td class='diff-context'>* [[Concepts]] to gather ideas for Oyranos</td><td> </td><td class='diff-context'>* [[Concepts]] to gather ideas for Oyranos</td></tr> <tr><td> </td><td class='diff-context'>* historical draft [http://www.behrmann.name/cms/cms_skeleton_v1.html CMS skeleton] at behrmann site</td><td> </td><td class='diff-context'>* historical draft [http://www.behrmann.name/cms/cms_skeleton_v1.html CMS skeleton] at behrmann site</td></tr> </table> KaiUweBehrmann foobar FeatureWish 2007-12-18T12:53:59Z 2007-12-18T12:53:59 2007-12-18T12:53:59Z <p>/* ICC profile handling */</p> <table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'> <tr> <td colspan='2' width='50%' align='center' class='diff-otitle'>Revision as of 12:53, 18 Dec 2007</td> <td colspan='2' width='50%' align='center' class='diff-ntitle'>Current revision</td> </tr> <tr><td colspan="2" align="left"><strong>Line 26:</strong></td> <td colspan="2" align="left"><strong>Line 26:</strong></td></tr> <tr><td> </td><td class='diff-context'>{| style="width:100%;text-align:left" colspan="20"</td><td> </td><td class='diff-context'>{| style="width:100%;text-align:left" colspan="20"</td></tr> <tr><td> </td><td class='diff-context'>|-</td><td> </td><td class='diff-context'>|-</td></tr> <tr><td>-</td><td class='diff-deletedline'>| Progress <span class="diffchange">10</span>%</td><td>+</td><td class='diff-addedline'>| Progress <span class="diffchange">15</span>%</td></tr> <tr><td> </td><td class='diff-context'>| Version: x.x.x</td><td> </td><td class='diff-context'>| Version: x.x.x</td></tr> <tr><td> </td><td class='diff-context'>| Start: 2006</td><td> </td><td class='diff-context'>| Start: 2006</td></tr> <tr><td colspan="2" align="left"><strong>Line 73:</strong></td> <td colspan="2" align="left"><strong>Line 73:</strong></td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>==== Directory Paths ====</td><td> </td><td class='diff-context'>==== Directory Paths ====</td></tr> <tr><td>-</td><td class='diff-deletedline'>* [[OpenIccDirectoryProposal|<span class="diffchange">ICC profile </span>path specification]]</td><td>+</td><td class='diff-addedline'>* [[OpenIccDirectoryProposal|<span class="diffchange">OpenICC </span>path specification]]</td></tr> <tr><td> </td><td class='diff-context'>{| style="width:100%;text-align:left" colspan="20"</td><td> </td><td class='diff-context'>{| style="width:100%;text-align:left" colspan="20"</td></tr> <tr><td> </td><td class='diff-context'>|-</td><td> </td><td class='diff-context'>|-</td></tr> <tr><td colspan="2" align="left"><strong>Line 82:</strong></td> <td colspan="2" align="left"><strong>Line 82:</strong></td></tr> <tr><td> </td><td class='diff-context'>|-</td><td> </td><td class='diff-context'>|-</td></tr> <tr><td> </td><td class='diff-context'>|}</td><td> </td><td class='diff-context'>|}</td></tr> <tr><td>-</td><td class='diff-deletedline'>* ICC_PROFILE_PATH ? how to interact with Oyranos</td><td>+</td><td class='diff-addedline'>* <span class="diffchange">(obsoleted by XDG variables) </span>ICC_PROFILE_PATH ? how to interact with Oyranos</td></tr> <tr><td> </td><td class='diff-context'>* update Oyranos' internal path representation to the [[OpenIccDirectoryProposal|OpenICC Directory Proposal]]</td><td> </td><td class='diff-context'>* update Oyranos' internal path representation to the [[OpenIccDirectoryProposal|OpenICC Directory Proposal]]</td></tr> <tr><td colspan="2"> </td><td>+</td><td class='diff-addedline'>* (done) OY_MODULE_PATHS for CMM's</td></tr> <tr><td> </td><td class='diff-context'></td><td> </td><td class='diff-context'></td></tr> <tr><td> </td><td class='diff-context'>=== Standard Profiles ===</td><td> </td><td class='diff-context'>=== Standard Profiles ===</td></tr> <tr><td colspan="2" align="left"><strong>Line 102:</strong></td> <td colspan="2" align="left"><strong>Line 103:</strong></td></tr> <tr><td> </td><td class='diff-context'>|-</td><td> </td><td class='diff-context'>|-</td></tr> <tr><td> </td><td class='diff-context'>| style="width:1%" |</td><td> </td><td class='diff-context'>| style="width:1%" |</td></tr> <tr><td>-</td><td class='diff-deletedline'>| style="width:20%" | Progress: <span class="diffchange">0</span>%</td><td>+</td><td class='diff-addedline'>| style="width:20%" | Progress: <span class="diffchange">60</span>%</td></tr> <tr><td> </td><td class='diff-context'>| style="width:20%" | Version: x.x.x</td><td> </td><td class='diff-context'>| style="width:20%" | Version: x.x.x</td></tr> <tr><td> </td><td class='diff-context'>| style="width:20%" | Start: 2007</td><td> </td><td class='diff-context'>| style="width:20%" | Start: 2007</td></tr> <tr><td>-</td><td class='diff-deletedline'>| style="width:20%" | Assigned to: Scribus?</td><td>+</td><td class='diff-addedline'>| style="width:20%" | Assigned to: <span class="diffchange">Kai-Uwe Behrmann (</span>Scribus?<span class="diffchange">)</span></td></tr> <tr><td> </td><td class='diff-context'>|-</td><td> </td><td class='diff-context'>|-</td></tr> <tr><td> </td><td class='diff-context'>|}</td><td> </td><td class='diff-context'>|}</td></tr> <tr><td>-</td><td class='diff-deletedline'>** transform caching (file format)</td><td>+</td><td class='diff-addedline'>** transform caching (file format<span class="diffchange">?</span>)</td></tr> <tr><td> </td><td class='diff-context'>* frontend API, transforms, caching, image description - buffer layout / screen position</td><td> </td><td class='diff-context'>* frontend API, transforms, caching, image description - buffer layout / screen position</td></tr> <tr><td> </td><td class='diff-context'>{| style="width:100%;text-align:left" colspan="20"</td><td> </td><td class='diff-context'>{| style="width:100%;text-align:left" colspan="20"</td></tr> <tr><td> </td><td class='diff-context'>|-</td><td> </td><td class='diff-context'>|-</td></tr> <tr><td> </td><td class='diff-context'>| style="width:1%" |</td><td> </td><td class='diff-context'>| style="width:1%" |</td></tr> <tr><td>-</td><td class='diff-deletedline'>| style="width:20%" | Progress: <span class="diffchange">5</span>%</td><td>+</td><td class='diff-addedline'>| style="width:20%" | Progress: <span class="diffchange">55</span>%</td></tr> <tr><td> </td><td class='diff-context'>| style="width:20%" | Version: 1.x.x</td><td> </td><td class='diff-context'>| style="width:20%" | Version: 1.x.x</td></tr> <tr><td> </td><td class='diff-context'>| style="width:20%" | Start: 2007</td><td> </td><td class='diff-context'>| style="width:20%" | Start: 2007</td></tr> </table> KaiUweBehrmann foobar Standards 2007-12-14T07:52:36Z 2007-12-14T07:52:36 2007-12-14T07:52:36Z <p>/* File Formats */</p> <table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'> <tr> <td colspan='2' width='50%' align='center' class='diff-otitle'>Revision as of 07:52, 14 Dec 2007</td> <td colspan='2' width='50%' align='center' class='diff-ntitle'>Current revision</td> </tr> <tr><td colspan="2" align="left"><strong>Line 69:</strong></td> <td colspan="2" align="left"><strong>Line 69:</strong></td></tr> <tr><td> </td><td class='diff-context'>* [http://www.remotesensing.org/libtiff/document.html '''T'''agged '''I'''mage '''F'''ile '''F'''ormat] at remotesensing.org</td><td> </td><td class='diff-context'>* [http://www.remotesensing.org/libtiff/document.html '''T'''agged '''I'''mage '''F'''ile '''F'''ormat] at remotesensing.org</td></tr> <tr><td> </td><td class='diff-context'>* [http://www.jpeg.org/jpeg/ '''J'''oint '''P'''hotographic '''E'''xperts '''G'''roup]</td><td> </td><td class='diff-context'>* [http://www.jpeg.org/jpeg/ '''J'''oint '''P'''hotographic '''E'''xperts '''G'''roup]</td></tr> <tr><td>-</td><td class='diff-deletedline'>* [http://www.libpng.org/pub/png/spec/iso/ '''P'''ortable '''N'''etworks '''G'''raphic]</td><td>+</td><td class='diff-addedline'>* [http://www.libpng.org/pub/png/spec/iso/ '''P'''ortable '''N'''etworks '''G'''raphic] <span class="diffchange">+ [http://www.w3.org/TR/2003/REC-PNG-20031110/#4Concepts.ColourSpaces W3C] documentation</span></td></tr> <tr><td> </td><td class='diff-context'>* [http://www.adobe.com/devnet/pdf/pdf_reference.html '''P'''ortable '''D'''ocument '''F'''ormat] at Adobe</td><td> </td><td class='diff-context'>* [http://www.adobe.com/devnet/pdf/pdf_reference.html '''P'''ortable '''D'''ocument '''F'''ormat] at Adobe</td></tr> <tr><td> </td><td class='diff-context'>* [http://www.w3.org/TR/SVG/color.html '''S'''calable '''V'''ector '''G'''raphics] at w3</td><td> </td><td class='diff-context'>* [http://www.w3.org/TR/SVG/color.html '''S'''calable '''V'''ector '''G'''raphics] at w3</td></tr> </table> KaiUweBehrmann foobar