github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/image/jxr/jxrlib/src/jxr_private.c (about) 1 // Copyright 2014 <chaishushan{AT}gmail.com>. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #include "jxr_private.h" 6 7 // fotmat info list 8 static const struct { 9 const char* name; 10 const PKPixelFormatGUID* fmt; 11 int channels; 12 int depth; 13 jxr_data_type_t type; 14 jxr_bool_t golden; 15 } fmtInfoList[] = { 16 #define _JXR_FMT_(fmt) #fmt, &fmt 17 { _JXR_FMT_(GUID_PKPixelFormatBlackWhite), 1, 8, jxr_unsigned, jxr_false }, 18 { _JXR_FMT_(GUID_PKPixelFormat8bppGray), 1, 8, jxr_unsigned, jxr_true }, // golden Gray 19 20 /* 16bpp formats */ 21 { _JXR_FMT_(GUID_PKPixelFormat16bppRGB555), 3, 8, jxr_unsigned, jxr_false }, 22 { _JXR_FMT_(GUID_PKPixelFormat16bppRGB565), 3, 8, jxr_unsigned, jxr_false }, 23 { _JXR_FMT_(GUID_PKPixelFormat16bppGray), 1, 16, jxr_unsigned, jxr_true }, // golden Gray16 24 25 /* 24bpp formats */ 26 { _JXR_FMT_(GUID_PKPixelFormat24bppBGR), 3, 8, jxr_unsigned, jxr_false }, 27 { _JXR_FMT_(GUID_PKPixelFormat24bppRGB), 3, 8, jxr_unsigned, jxr_false }, // golden RGB 28 29 /* 32bpp format */ 30 { _JXR_FMT_(GUID_PKPixelFormat32bppBGR), 3, 8, jxr_unsigned, jxr_false }, 31 { _JXR_FMT_(GUID_PKPixelFormat32bppBGRA), 4, 8, jxr_unsigned, jxr_false }, 32 { _JXR_FMT_(GUID_PKPixelFormat32bppPBGRA), 4, 8, jxr_unsigned, jxr_false }, 33 { _JXR_FMT_(GUID_PKPixelFormat32bppGrayFloat), 1, 32, jxr_float, jxr_true }, // golden Gray32f 34 { _JXR_FMT_(GUID_PKPixelFormat32bppRGB), 3, 8, jxr_unsigned, jxr_false }, 35 { _JXR_FMT_(GUID_PKPixelFormat32bppRGBA), 4, 8, jxr_unsigned, jxr_true }, // golden RGBA 36 { _JXR_FMT_(GUID_PKPixelFormat32bppPRGBA), 4, 8, jxr_unsigned, jxr_false }, 37 38 /* 48bpp format */ 39 { _JXR_FMT_(GUID_PKPixelFormat48bppRGBFixedPoint), 3, 16, jxr_signed, jxr_true }, // golden RGB48i 40 41 /* 16bpp format */ 42 { _JXR_FMT_(GUID_PKPixelFormat16bppGrayFixedPoint), 1, 16, jxr_signed, jxr_true }, // golden Gray16i 43 44 /* 32bpp format */ 45 { _JXR_FMT_(GUID_PKPixelFormat32bppRGB101010), 3, 8, jxr_unsigned, jxr_false }, 46 47 /* 48bpp format */ 48 { _JXR_FMT_(GUID_PKPixelFormat48bppRGB), 3, 8, jxr_unsigned, jxr_true }, // golden RGB48 49 50 /* 64bpp format */ 51 { _JXR_FMT_(GUID_PKPixelFormat64bppRGBA), 4, 16, jxr_unsigned, jxr_true }, // golden RGBA64 52 { _JXR_FMT_(GUID_PKPixelFormat64bppPRGBA), 4, 16, jxr_unsigned, jxr_false }, 53 54 /* 96bpp format */ 55 { _JXR_FMT_(GUID_PKPixelFormat96bppRGBFixedPoint), 3, 32, jxr_signed, jxr_false }, // golden RGB96i 56 { _JXR_FMT_(GUID_PKPixelFormat96bppRGBFloat), 3, 32, jxr_float, jxr_false }, // golden RGB96f 57 58 /* Floating point scRGB formats */ 59 { _JXR_FMT_(GUID_PKPixelFormat128bppRGBAFloat), 4, 32, jxr_float, jxr_true }, // golden RGBA128f 60 { _JXR_FMT_(GUID_PKPixelFormat128bppPRGBAFloat), 4, 32, jxr_float, jxr_false }, 61 { _JXR_FMT_(GUID_PKPixelFormat128bppRGBFloat), 4, 32, jxr_float, jxr_false }, 62 63 /* CMYK formats. */ 64 { _JXR_FMT_(GUID_PKPixelFormat32bppCMYK), 3, 8, jxr_unsigned, jxr_false }, 65 66 /* Photon formats */ 67 { _JXR_FMT_(GUID_PKPixelFormat64bppRGBAFixedPoint), 4, 16, jxr_signed, jxr_true }, // golden RGBA64i 68 { _JXR_FMT_(GUID_PKPixelFormat64bppRGBFixedPoint), 3, 16, jxr_signed, jxr_false }, 69 { _JXR_FMT_(GUID_PKPixelFormat128bppRGBAFixedPoint), 4, 32, jxr_signed, jxr_true }, // golden RGBA128f 70 { _JXR_FMT_(GUID_PKPixelFormat128bppRGBFixedPoint), 3, 32, jxr_signed, jxr_false }, 71 72 { _JXR_FMT_(GUID_PKPixelFormat64bppRGBAHalf), 4, 16, jxr_float, jxr_false }, 73 { _JXR_FMT_(GUID_PKPixelFormat64bppRGBHalf), 3, 16, jxr_float, jxr_false }, 74 { _JXR_FMT_(GUID_PKPixelFormat48bppRGBHalf), 3, 16, jxr_float, jxr_false }, 75 76 { _JXR_FMT_(GUID_PKPixelFormat32bppRGBE), 3, 8, jxr_unsigned, jxr_false }, 77 78 { _JXR_FMT_(GUID_PKPixelFormat16bppGrayHalf), 1, 16, jxr_float, jxr_true }, // golden Gray16f 79 { _JXR_FMT_(GUID_PKPixelFormat32bppGrayFixedPoint), 1, 32, jxr_signed, jxr_true }, // golden Gray32i 80 81 /* YCrCb from Advanced Profile */ 82 { _JXR_FMT_(GUID_PKPixelFormat12bppYCC420), 3, 8, jxr_unsigned, jxr_false }, 83 { _JXR_FMT_(GUID_PKPixelFormat16bppYCC422), 3, 8, jxr_unsigned, jxr_false }, 84 { _JXR_FMT_(GUID_PKPixelFormat20bppYCC422), 3, 8, jxr_unsigned, jxr_false }, 85 { _JXR_FMT_(GUID_PKPixelFormat32bppYCC422), 3, 8, jxr_unsigned, jxr_false }, 86 { _JXR_FMT_(GUID_PKPixelFormat24bppYCC444), 3, 8, jxr_unsigned, jxr_false }, 87 { _JXR_FMT_(GUID_PKPixelFormat30bppYCC444), 3, 8, jxr_unsigned, jxr_false }, 88 { _JXR_FMT_(GUID_PKPixelFormat48bppYCC444), 3, 8, jxr_unsigned, jxr_false }, 89 { _JXR_FMT_(GUID_PKPixelFormat16bpp48bppYCC444FixedPoint), 3, 8 , jxr_signed, jxr_false }, 90 91 { _JXR_FMT_(GUID_PKPixelFormat20bppYCC420Alpha), 3, 8, jxr_unsigned, jxr_false }, 92 { _JXR_FMT_(GUID_PKPixelFormat24bppYCC422Alpha), 3, 8, jxr_unsigned, jxr_false }, 93 { _JXR_FMT_(GUID_PKPixelFormat30bppYCC422Alpha), 3, 8, jxr_unsigned, jxr_false }, 94 { _JXR_FMT_(GUID_PKPixelFormat48bppYCC422Alpha), 3, 8, jxr_unsigned, jxr_false }, 95 { _JXR_FMT_(GUID_PKPixelFormat32bppYCC444Alpha), 3, 8, jxr_unsigned, jxr_false }, 96 { _JXR_FMT_(GUID_PKPixelFormat40bppYCC444Alpha), 3, 8, jxr_unsigned, jxr_false }, 97 { _JXR_FMT_(GUID_PKPixelFormat64bppYCC444Alpha), 3, 8, jxr_unsigned, jxr_false }, 98 { _JXR_FMT_(GUID_PKPixelFormat64bppYCC444AlphaFixedPoint), 3, 8, jxr_signed, jxr_false }, 99 #undef _JXR_FMT_ 100 }; 101 102 jxr_bool_t jxr_format_guid_valid(const PKPixelFormatGUID* fmt) { 103 int i; 104 if(IsEqualGUID(fmt, &GUID_PKPixelFormatDontCare)) { 105 return jxr_true; 106 } 107 for(i = 0; i < sizeof(fmtInfoList)/sizeof(fmtInfoList[0]); ++i) { 108 if(IsEqualGUID(fmt, fmtInfoList[i].fmt)) { 109 return jxr_true; 110 } 111 } 112 return jxr_false; 113 } 114 115 jxr_bool_t jxr_parse_format_guid( 116 const PKPixelFormatGUID* fmt, 117 int* channels, int* depth, 118 jxr_data_type_t* type 119 ) { 120 int i; 121 for(i = 0; i < sizeof(fmtInfoList)/sizeof(fmtInfoList[0]); ++i) { 122 if(IsEqualGUID(fmt, fmtInfoList[i].fmt)) { 123 if(channels != NULL) *channels = fmtInfoList[i].channels; 124 if(depth != NULL) *depth = fmtInfoList[i].depth; 125 if(type != NULL) *type = fmtInfoList[i].type; 126 return jxr_true; 127 } 128 } 129 return jxr_false; 130 } 131 132 jxr_bool_t jxr_golden_format( 133 int channels, int depth, 134 jxr_data_type_t type, 135 const PKPixelFormatGUID** fmt 136 ) { 137 int i; 138 for(i = 0; i < sizeof(fmtInfoList)/sizeof(fmtInfoList[0]); ++i) { 139 if(!fmtInfoList[i].golden) continue; 140 if(fmtInfoList[i].channels != channels) continue; 141 if(fmtInfoList[i].depth != depth) continue; 142 if(fmtInfoList[i].type != type) continue; 143 144 *fmt = fmtInfoList[i].fmt; 145 return jxr_true; 146 } 147 return jxr_false; 148 } 149