Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/jxr/jxrgluelib/JXRGlue.h
4395 views
1
//*@@@+++@@@@******************************************************************
2
//
3
// Copyright © Microsoft Corp.
4
// All rights reserved.
5
//
6
// Redistribution and use in source and binary forms, with or without
7
// modification, are permitted provided that the following conditions are met:
8
//
9
// • Redistributions of source code must retain the above copyright notice,
10
// this list of conditions and the following disclaimer.
11
// • Redistributions in binary form must reproduce the above copyright notice,
12
// this list of conditions and the following disclaimer in the documentation
13
// and/or other materials provided with the distribution.
14
//
15
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25
// POSSIBILITY OF SUCH DAMAGE.
26
//
27
//*@@@---@@@@******************************************************************
28
#pragma once
29
30
#ifdef __cplusplus
31
extern "C" {
32
#endif
33
34
#include <JXRMeta.h>
35
#include <guiddef.h>
36
37
//================================================================
38
#define WMP_SDK_VERSION 0x0101
39
#define PK_SDK_VERSION 0x0101
40
41
#define sizeof2(array) (sizeof(array)/sizeof(*(array)))
42
#ifndef max
43
#define max(a,b) ((a) > (b) ? (a) : (b))
44
#endif
45
#ifndef min
46
#define min(b,a) ((a) < (b) ? (a) : (b))
47
#endif
48
#ifdef __ANSI__
49
#define STRCPY_SAFE(pszDest, cbDest, pszSrc) (strncpy((pszDest), (pszSrc), (cbDest)) == (pszDest) ? 0 : 1)
50
#else
51
#define STRCPY_SAFE(pszDest, cbDest, pszSrc) (strcpy_s((pszDest), (cbDest), (pszSrc)))
52
#endif // __ANSI__
53
54
//================================================================
55
typedef struct tagPKRect
56
{
57
I32 X;
58
I32 Y;
59
I32 Width;
60
I32 Height;
61
} PKRect;
62
63
//================================================================
64
typedef U32 PKIID;
65
66
EXTERN_C const PKIID IID_PKImageScanEncode;
67
EXTERN_C const PKIID IID_PKImageFrameEncode;
68
69
EXTERN_C const PKIID IID_PKImageWmpEncode;
70
71
EXTERN_C const PKIID IID_PKImageWmpDecode;
72
73
struct IFDEntry
74
{
75
U16 uTag;
76
U16 uType;
77
U32 uCount;
78
U32 uValue;
79
};
80
EXTERN_C const U32 IFDEntryTypeSizes[13];
81
EXTERN_C const U32 SizeofIFDEntry;
82
83
//================================================================
84
typedef float Float;
85
86
typedef enum tagPKStreamFlags
87
{
88
PKStreamOpenRead = 0x00000000UL,
89
PKStreamOpenWrite = 0x00000001UL,
90
PKStreamOpenReadWrite = 0x00000002UL,
91
PKStreamNoLock = 0x00010000UL,
92
PKStreamNoSeek = 0x00020000UL,
93
PKStreamCompress = 0x00040000UL,
94
} PKStreamFlags;
95
96
/* Undefined formats */
97
#define GUID_PKPixelFormatUndefined GUID_PKPixelFormatDontCare
98
99
DEFINE_GUID(GUID_PKPixelFormatDontCare, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x00);
100
101
/* Indexed formats */
102
//DEFINE_GUID(GUID_PKPixelFormat1bppIndexed, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x01);
103
//DEFINE_GUID(GUID_PKPixelFormat2bppIndexed, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x02);
104
//DEFINE_GUID(GUID_PKPixelFormat4bppIndexed, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x03);
105
//DEFINE_GUID(GUID_PKPixelFormat8bppIndexed, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x04);
106
107
DEFINE_GUID(GUID_PKPixelFormatBlackWhite, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x05);
108
//DEFINE_GUID(GUID_PKPixelFormat2bppGray, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x06);
109
//DEFINE_GUID(GUID_PKPixelFormat4bppGray, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x07);
110
DEFINE_GUID(GUID_PKPixelFormat8bppGray, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x08);
111
112
/* sRGB formats (gamma is approx. 2.2) */
113
/* For a full definition, see the sRGB spec */
114
115
/* 16bpp formats */
116
DEFINE_GUID(GUID_PKPixelFormat16bppRGB555, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x09);
117
DEFINE_GUID(GUID_PKPixelFormat16bppRGB565, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0a);
118
DEFINE_GUID(GUID_PKPixelFormat16bppGray, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0b);
119
120
/* 24bpp formats */
121
DEFINE_GUID(GUID_PKPixelFormat24bppBGR, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0c);
122
DEFINE_GUID(GUID_PKPixelFormat24bppRGB, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0d);
123
124
/* 32bpp format */
125
DEFINE_GUID(GUID_PKPixelFormat32bppBGR, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0e);
126
DEFINE_GUID(GUID_PKPixelFormat32bppBGRA, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0f);
127
DEFINE_GUID(GUID_PKPixelFormat32bppPBGRA, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x10);
128
DEFINE_GUID(GUID_PKPixelFormat32bppGrayFloat, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x11);
129
DEFINE_GUID(GUID_PKPixelFormat32bppRGB, 0xd98c6b95, 0x3efe, 0x47d6, 0xbb, 0x25, 0xeb, 0x17, 0x48, 0xab, 0x0c, 0xf1);
130
DEFINE_GUID(GUID_PKPixelFormat32bppRGBA, 0xf5c7ad2d, 0x6a8d, 0x43dd, 0xa7, 0xa8, 0xa2, 0x99, 0x35, 0x26, 0x1a, 0xe9);
131
DEFINE_GUID(GUID_PKPixelFormat32bppPRGBA, 0x3cc4a650, 0xa527, 0x4d37, 0xa9, 0x16, 0x31, 0x42, 0xc7, 0xeb, 0xed, 0xba);
132
133
/* 48bpp format */
134
DEFINE_GUID(GUID_PKPixelFormat48bppRGBFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x12);
135
136
/* scRGB formats. Gamma is 1.0 */
137
/* For a full definition, see the scRGB spec */
138
139
/* 16bpp format */
140
DEFINE_GUID(GUID_PKPixelFormat16bppGrayFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x13);
141
142
/* 32bpp format */
143
DEFINE_GUID(GUID_PKPixelFormat32bppRGB101010, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x14);
144
145
/* 48bpp format */
146
DEFINE_GUID(GUID_PKPixelFormat48bppRGB, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x15);
147
148
/* 64bpp format */
149
DEFINE_GUID(GUID_PKPixelFormat64bppRGBA, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x16);
150
DEFINE_GUID(GUID_PKPixelFormat64bppPRGBA, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x17);
151
152
/* 96bpp format */
153
DEFINE_GUID(GUID_PKPixelFormat96bppRGBFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x18);
154
DEFINE_GUID(GUID_PKPixelFormat96bppRGBFloat, 0xe3fed78f, 0xe8db, 0x4acf, 0x84, 0xc1, 0xe9, 0x7f, 0x61, 0x36, 0xb3, 0x27);
155
156
/* Floating point scRGB formats */
157
DEFINE_GUID(GUID_PKPixelFormat128bppRGBAFloat, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x19);
158
DEFINE_GUID(GUID_PKPixelFormat128bppPRGBAFloat, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1a);
159
DEFINE_GUID(GUID_PKPixelFormat128bppRGBFloat, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1b);
160
161
/* CMYK formats. */
162
DEFINE_GUID(GUID_PKPixelFormat32bppCMYK, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1c);
163
164
/* Photon formats */
165
DEFINE_GUID(GUID_PKPixelFormat64bppRGBAFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1d);
166
DEFINE_GUID(GUID_PKPixelFormat64bppRGBFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x40);
167
DEFINE_GUID(GUID_PKPixelFormat128bppRGBAFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1e);
168
DEFINE_GUID(GUID_PKPixelFormat128bppRGBFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x41);
169
170
DEFINE_GUID(GUID_PKPixelFormat64bppRGBAHalf, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3a);
171
DEFINE_GUID(GUID_PKPixelFormat64bppRGBHalf, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x42);
172
DEFINE_GUID(GUID_PKPixelFormat48bppRGBHalf, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3b);
173
174
DEFINE_GUID(GUID_PKPixelFormat32bppRGBE, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3d);
175
176
DEFINE_GUID(GUID_PKPixelFormat16bppGrayHalf, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3e);
177
DEFINE_GUID(GUID_PKPixelFormat32bppGrayFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3f);
178
179
180
/* More CMYK formats and n-Channel formats */
181
DEFINE_GUID(GUID_PKPixelFormat64bppCMYK, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1f);
182
183
DEFINE_GUID(GUID_PKPixelFormat24bpp3Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x20);
184
DEFINE_GUID(GUID_PKPixelFormat32bpp4Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x21);
185
DEFINE_GUID(GUID_PKPixelFormat40bpp5Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x22);
186
DEFINE_GUID(GUID_PKPixelFormat48bpp6Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x23);
187
DEFINE_GUID(GUID_PKPixelFormat56bpp7Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x24);
188
DEFINE_GUID(GUID_PKPixelFormat64bpp8Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x25);
189
190
DEFINE_GUID(GUID_PKPixelFormat48bpp3Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x26);
191
DEFINE_GUID(GUID_PKPixelFormat64bpp4Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x27);
192
DEFINE_GUID(GUID_PKPixelFormat80bpp5Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x28);
193
DEFINE_GUID(GUID_PKPixelFormat96bpp6Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x29);
194
DEFINE_GUID(GUID_PKPixelFormat112bpp7Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2a);
195
DEFINE_GUID(GUID_PKPixelFormat128bpp8Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2b);
196
197
DEFINE_GUID(GUID_PKPixelFormat40bppCMYKAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2c);
198
DEFINE_GUID(GUID_PKPixelFormat80bppCMYKAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2d);
199
200
DEFINE_GUID(GUID_PKPixelFormat32bpp3ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2e);
201
DEFINE_GUID(GUID_PKPixelFormat40bpp4ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2f);
202
DEFINE_GUID(GUID_PKPixelFormat48bpp5ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x30);
203
DEFINE_GUID(GUID_PKPixelFormat56bpp6ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x31);
204
DEFINE_GUID(GUID_PKPixelFormat64bpp7ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x32);
205
DEFINE_GUID(GUID_PKPixelFormat72bpp8ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x33);
206
207
DEFINE_GUID(GUID_PKPixelFormat64bpp3ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x34);
208
DEFINE_GUID(GUID_PKPixelFormat80bpp4ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x35);
209
DEFINE_GUID(GUID_PKPixelFormat96bpp5ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x36);
210
DEFINE_GUID(GUID_PKPixelFormat112bpp6ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x37);
211
DEFINE_GUID(GUID_PKPixelFormat128bpp7ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x38);
212
DEFINE_GUID(GUID_PKPixelFormat144bpp8ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x39);
213
214
/* YCrCb from Advanced Profile */
215
DEFINE_GUID(GUID_PKPixelFormat12bppYCC420, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x44);
216
DEFINE_GUID(GUID_PKPixelFormat16bppYCC422, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x45);
217
DEFINE_GUID(GUID_PKPixelFormat20bppYCC422, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x46);
218
DEFINE_GUID(GUID_PKPixelFormat32bppYCC422, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x47);
219
DEFINE_GUID(GUID_PKPixelFormat24bppYCC444, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x48);
220
DEFINE_GUID(GUID_PKPixelFormat30bppYCC444, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x49);
221
DEFINE_GUID(GUID_PKPixelFormat48bppYCC444, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4a);
222
DEFINE_GUID(GUID_PKPixelFormat16bpp48bppYCC444FixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4b);
223
DEFINE_GUID(GUID_PKPixelFormat20bppYCC420Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4c);
224
DEFINE_GUID(GUID_PKPixelFormat24bppYCC422Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4d);
225
DEFINE_GUID(GUID_PKPixelFormat30bppYCC422Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4e);
226
DEFINE_GUID(GUID_PKPixelFormat48bppYCC422Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4f);
227
DEFINE_GUID(GUID_PKPixelFormat32bppYCC444Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x50);
228
DEFINE_GUID(GUID_PKPixelFormat40bppYCC444Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x51);
229
DEFINE_GUID(GUID_PKPixelFormat64bppYCC444Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x52);
230
DEFINE_GUID(GUID_PKPixelFormat64bppYCC444AlphaFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x53);
231
232
//YUV
233
#define GUID_PKPixelFormat12bppYUV420 GUID_PKPixelFormat12bppYCC420
234
#define GUID_PKPixelFormat16bppYUV422 GUID_PKPixelFormat16bppYCC422
235
#define GUID_PKPixelFormat24bppYUV444 GUID_PKPixelFormat24bppYCC444
236
237
/* CMYKDIRECT from Advanced Profile */
238
DEFINE_GUID(GUID_PKPixelFormat32bppCMYKDIRECT, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x54);
239
DEFINE_GUID(GUID_PKPixelFormat64bppCMYKDIRECT, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x55);
240
DEFINE_GUID(GUID_PKPixelFormat40bppCMYKDIRECTAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x56);
241
DEFINE_GUID(GUID_PKPixelFormat80bppCMYKDIRECTAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x43);
242
243
// PhotometricInterpretation
244
#define PK_PI_W0 0 // WhiteIsZero
245
#define PK_PI_B0 1 // BlackIsZero
246
#define PK_PI_RGB 2
247
#define PK_PI_RGBPalette 3
248
#define PK_PI_TransparencyMask 4
249
#define PK_PI_CMYK 5
250
#define PK_PI_YCbCr 6
251
#define PK_PI_CIELab 8
252
253
#define PK_PI_NCH 100
254
#define PK_PI_RGBE 101
255
256
#define PK_pixfmtNul 0x00000000
257
#define PK_pixfmtHasAlpha 0x00000010
258
#define PK_pixfmtPreMul 0x00000020
259
#define PK_pixfmtBGR 0x00000040
260
#define PK_pixfmtNeedConvert 0x80000000
261
262
#define LOOKUP_FORWARD 0
263
#define LOOKUP_BACKWARD_TIF 1
264
265
typedef unsigned long WMP_GRBIT;
266
typedef GUID PKPixelFormatGUID;
267
268
typedef struct tagPKPixelInfo
269
{
270
const PKPixelFormatGUID* pGUIDPixFmt;
271
272
size_t cChannel;
273
COLORFORMAT cfColorFormat;
274
BITDEPTH_BITS bdBitDepth;
275
U32 cbitUnit;
276
277
WMP_GRBIT grBit;
278
279
// TIFF
280
U32 uInterpretation;
281
U32 uSamplePerPixel;
282
U32 uBitsPerSample;
283
U32 uSampleFormat;
284
} PKPixelInfo;
285
286
//================================================================
287
ERR PKAlloc(void** ppv, size_t cb);
288
ERR PKFree(void** ppv);
289
290
//----------------------------------------------------------------
291
//ERR GetPixelInfo(PKPixelFormatGUID enPixelFormat, const PKPixelInfo** ppPI);
292
ERR PixelFormatLookup(PKPixelInfo* pPI, U8 uLookupType);
293
const PKPixelFormatGUID* GetPixelFormatFromHash(const U8 uPFHash);
294
295
ERR GetImageEncodeIID(const char* szExt, const PKIID** ppIID);
296
ERR GetImageDecodeIID(const char* szExt, const PKIID** ppIID);
297
298
299
//================================================================
300
#ifdef __ANSI__
301
struct tagPKFactory;
302
struct tagPKCodecFactory;
303
struct tagPKImageDecode;
304
struct tagPKImageEncode;
305
struct tagPKFormatConverter;
306
#define PKFactory struct tagPKFactory
307
#define PKCodecFactory struct tagPKCodecFactory
308
#define PKImageDecode struct tagPKImageDecode
309
#define PKImageEncode struct tagPKImageEncode
310
#define PKFormatConverter struct tagPKFormatConverter
311
#else // __ANSI__
312
typedef struct tagPKFactory PKFactory;
313
typedef struct tagPKCodecFactory PKCodecFactory;
314
typedef struct tagPKImageDecode PKImageDecode;
315
typedef struct tagPKImageEncode PKImageEncode;
316
typedef struct tagPKFormatConverter PKFormatConverter;
317
#endif // __ANSI__
318
//================================================================
319
typedef struct tagPKStream
320
{
321
ERR (*InitializeFromFilename)(const char*, ULong);
322
323
ERR (*Release)(void);
324
325
FILE* fp;
326
} PKStream;
327
328
329
//================================================================
330
typedef struct tagPKFactory
331
{
332
ERR (*CreateStream)(PKStream**);
333
334
ERR (*CreateStreamFromFilename)(struct WMPStream**, const char*, const char*);
335
ERR (*CreateStreamFromMemory)(struct WMPStream**, void*, size_t);
336
337
ERR (*Release)(PKFactory**);
338
#ifdef __ANSI__
339
#undef PKFactory
340
#endif // __ANSI__
341
} PKFactory;
342
343
//----------------------------------------------------------------
344
ERR PKCreateFactory_CreateStream(PKStream** ppStream);
345
ERR PKCreateFactory_Release(PKFactory** ppFactory);
346
347
EXTERN_C ERR PKCreateFactory(PKFactory**, U32);
348
349
350
//================================================================
351
typedef struct tagPKCodecFactory
352
{
353
ERR (*CreateCodec)(const PKIID*, void**);
354
ERR (*CreateDecoderFromFile)(const char*, PKImageDecode**);
355
ERR (*CreateFormatConverter)(PKFormatConverter**);
356
357
ERR (*Release)(PKCodecFactory**);
358
#ifdef __ANSI__
359
#undef PKCodecFactory
360
#endif // __ANSI__
361
} PKCodecFactory;
362
363
//----------------------------------------------------------------
364
ERR PKCodecFactory_CreateCodec(const PKIID* iid, void** ppv);
365
ERR PKCreateCodecFactory_Release(PKCodecFactory** ppCFactory);
366
367
EXTERN_C ERR PKCreateCodecFactory(PKCodecFactory**, U32);
368
369
//================================================================
370
371
typedef enum BANDEDENCSTATE
372
{
373
BANDEDENCSTATE_UNINITIALIZED = 0,
374
BANDEDENCSTATE_INIT,
375
BANDEDENCSTATE_ENCODING,
376
BANDEDENCSTATE_TERMINATED,
377
BANDEDENCSTATE_NONBANDEDENCODE,
378
} BANDEDENCSTATE;
379
380
typedef struct tagPKImageEncode
381
{
382
//ERR (*GetPixelFormat)(MILPixelFormat*));
383
ERR (*Initialize)(PKImageEncode*, struct WMPStream*, void*, size_t);
384
ERR (*Terminate)(PKImageEncode*);
385
386
ERR (*SetPixelFormat)(PKImageEncode*, PKPixelFormatGUID);
387
ERR (*SetSize)(PKImageEncode*, I32, I32);
388
ERR (*SetResolution)(PKImageEncode*, Float, Float);
389
ERR (*SetColorContext)(PKImageEncode *pIE, const U8 *pbColorContext,
390
U32 cbColorContext);
391
ERR (*SetDescriptiveMetadata)(PKImageEncode *pIE,
392
const DESCRIPTIVEMETADATA *pDescMetadata);
393
394
ERR (*WritePixels)(PKImageEncode*, U32, U8*, U32);
395
ERR (*WriteSource)(PKImageEncode*, PKFormatConverter*, PKRect*);
396
397
// Banded encode API - currently only implemented for WMP encoder
398
ERR (*WritePixelsBandedBegin)(PKImageEncode* pEncoder, struct WMPStream *pPlanarAlphaTempFile);
399
ERR (*WritePixelsBanded)(PKImageEncode* pEncoder, U32 cLines, U8* pbPixels, U32 cbStride, Bool fLastCall);
400
ERR (*WritePixelsBandedEnd)(PKImageEncode* pEncoder);
401
#define TEMPFILE_COPYBUF_SIZE 8192 // Means when using tempfile for planar alpha banded encode, copy this many bytes at a time
402
403
ERR (*Transcode)(PKImageEncode*, PKImageDecode*, CWMTranscodingParam*);
404
405
ERR (*CreateNewFrame)(PKImageEncode*, void*, size_t);
406
407
ERR (*Release)(PKImageEncode**);
408
409
struct WMPStream* pStream;
410
size_t offStart;
411
412
PKPixelFormatGUID guidPixFormat;
413
414
U32 uWidth;
415
U32 uHeight;
416
U32 idxCurrentLine;
417
418
Float fResX;
419
Float fResY;
420
421
U32 cFrame;
422
423
Bool fHeaderDone;
424
size_t offPixel;
425
size_t cbPixel;
426
U8 *pbColorContext;
427
U32 cbColorContext;
428
U8 *pbEXIFMetadata;
429
U32 cbEXIFMetadataByteCount;
430
U8 *pbGPSInfoMetadata;
431
U32 cbGPSInfoMetadataByteCount;
432
U8 *pbIPTCNAAMetadata;
433
U32 cbIPTCNAAMetadataByteCount;
434
U8 *pbXMPMetadata;
435
U32 cbXMPMetadataByteCount;
436
U8 *pbPhotoshopMetadata;
437
U32 cbPhotoshopMetadataByteCount;
438
DESCRIPTIVEMETADATA sDescMetadata;
439
440
Bool bWMP;//for the encoder in decoding
441
442
struct
443
{
444
WmpDEMisc wmiDEMisc;
445
CWMImageInfo wmiI;
446
CWMIStrCodecParam wmiSCP;
447
CTXSTRCODEC ctxSC;
448
CWMImageInfo wmiI_Alpha;
449
CWMIStrCodecParam wmiSCP_Alpha;
450
CTXSTRCODEC ctxSC_Alpha;
451
452
Bool bHasAlpha;
453
Long nOffImage;
454
Long nCbImage;
455
Long nOffAlpha;
456
Long nCbAlpha;
457
458
ORIENTATION oOrientation;
459
460
// Banded encode state variables
461
BANDEDENCSTATE eBandedEncState;
462
struct WMPStream *pPATempFile;
463
} WMP;
464
465
#ifdef __ANSI__
466
#undef PKImageEncode
467
#endif // __ANSI__
468
} PKImageEncode;
469
470
//----------------------------------------------------------------
471
ERR PKImageEncode_Create_WMP(PKImageEncode** ppIE);
472
473
ERR PKImageEncode_Initialize(PKImageEncode* pIE, struct WMPStream* pStream, void* pvParam, size_t cbParam);
474
ERR PKImageEncode_Terminate(PKImageEncode* pIE);
475
ERR PKImageEncode_SetPixelFormat(PKImageEncode* pIE, PKPixelFormatGUID enPixelFormat);
476
ERR PKImageEncode_SetSize(PKImageEncode* pIE, I32 iWidth, I32 iHeight);
477
ERR PKImageEncode_SetResolution(PKImageEncode* pIE, Float rX, Float rY);
478
ERR PKImageEncode_SetColorContext(PKImageEncode *pIE, const U8 *pbColorContext, U32 cbColorContext);
479
ERR PKImageEncode_SetDescriptiveMetadata(PKImageEncode *pIE, const DESCRIPTIVEMETADATA *pDescMetadata);
480
ERR PKImageEncode_WritePixels(PKImageEncode* pIE, U32 cLine, U8* pbPixel, U32 cbStride);
481
ERR PKImageEncode_CreateNewFrame(PKImageEncode* pIE, void* pvParam, size_t cbParam);
482
ERR PKImageEncode_Release(PKImageEncode** ppIE);
483
484
ERR PKImageEncode_SetXMPMetadata_WMP(PKImageEncode *pIE, const U8 *pbXMPMetadata, U32 cbXMPMetadata);
485
ERR PKImageEncode_SetEXIFMetadata_WMP(PKImageEncode *pIE, const U8 *pbEXIFMetadata, U32 cbEXIFMetadata);
486
ERR PKImageEncode_SetGPSInfoMetadata_WMP(PKImageEncode *pIE, const U8 *pbGPSInfoMetadata, U32 cbGPSInfoMetadata);
487
ERR PKImageEncode_SetIPTCNAAMetadata_WMP(PKImageEncode *pIE, const U8 *pbIPTCNAAMetadata, U32 cbIPTCNAAMetadata);
488
ERR PKImageEncode_SetPhotoshopMetadata_WMP(PKImageEncode *pIE, const U8 *pbPhotoshopMetadata, U32 cbPhotoshopMetadata);
489
490
void FreeDescMetadata(DPKPROPVARIANT *pvar);
491
492
ERR PKImageEncode_Create(PKImageEncode** ppIE);
493
494
//================================================================
495
typedef struct tagPKImageDecode
496
{
497
ERR (*Initialize)(PKImageDecode*, struct WMPStream* pStream);
498
499
ERR (*GetPixelFormat)(PKImageDecode*, PKPixelFormatGUID*);
500
ERR (*GetSize)(PKImageDecode*, I32*, I32*);
501
ERR (*GetResolution)(PKImageDecode*, Float*, Float*);
502
ERR (*GetColorContext)(PKImageDecode *pID, U8 *pbColorContext,
503
U32 *pcbColorContext);
504
ERR (*GetDescriptiveMetadata)(PKImageDecode *pIE,
505
DESCRIPTIVEMETADATA *pDescMetadata);
506
507
ERR (*GetRawStream)(PKImageDecode*, struct WMPStream**);
508
509
ERR (*Copy)(PKImageDecode*, const PKRect*, U8*, U32);
510
511
ERR (*GetFrameCount)(PKImageDecode*, U32*);
512
ERR (*SelectFrame)(PKImageDecode*, U32);
513
514
ERR (*Release)(PKImageDecode**);
515
516
struct WMPStream* pStream;
517
Bool fStreamOwner;
518
size_t offStart;
519
520
PKPixelFormatGUID guidPixFormat;
521
522
U32 uWidth;
523
U32 uHeight;
524
U32 idxCurrentLine;
525
526
Float fResX;
527
Float fResY;
528
529
U32 cFrame;
530
531
struct
532
{
533
WmpDEMisc wmiDEMisc;
534
CWMImageInfo wmiI;
535
CWMIStrCodecParam wmiSCP;
536
CTXSTRCODEC ctxSC;
537
CWMImageInfo wmiI_Alpha;
538
CWMIStrCodecParam wmiSCP_Alpha;
539
CTXSTRCODEC ctxSC_Alpha;
540
541
Bool bHasAlpha;
542
Long nOffImage;
543
Long nCbImage;
544
Long nOffAlpha;
545
Long nCbAlpha;
546
Bool bIgnoreOverlap;
547
size_t DecoderCurrMBRow;
548
size_t DecoderCurrAlphaMBRow;
549
size_t cMarker;
550
size_t cLinesDecoded;
551
size_t cLinesCropped; // Lines may be cropped from the top - buffer for subsequent decodes must be adjusted
552
Bool fFirstNonZeroDecode;
553
554
Bool fOrientationFromContainer;
555
ORIENTATION oOrientationFromContainer; // Tag 0xBC02 in HD Photo container
556
557
DESCRIPTIVEMETADATA sDescMetadata;
558
} WMP;
559
560
#ifdef __ANSI__
561
#undef PKImageDecode
562
#endif // __ANSI__
563
} PKImageDecode;
564
565
//----------------------------------------------------------------
566
ERR PKImageDecode_Create_WMP(PKImageDecode** ppID);
567
568
ERR PKImageDecode_Initialize(PKImageDecode* pID, struct WMPStream* pStream);
569
ERR PKImageDecode_GetPixelFormat(PKImageDecode* pID, PKPixelFormatGUID* pPF);
570
ERR PKImageDecode_GetSize(PKImageDecode* pID, I32* piWidth, I32* piHeight);
571
ERR PKImageDecode_GetResolution(PKImageDecode* pID, Float* pfrX, Float* pfrY);
572
ERR PKImageDecode_GetColorContext(PKImageDecode *pID, U8 *pbColorContext, U32 *pcbColorContext);
573
ERR PKImageDecode_GetDescriptiveMetadata(PKImageDecode *pID, DESCRIPTIVEMETADATA *pDescMetadata);
574
ERR PKImageDecode_Copy(PKImageDecode* pID, const PKRect* pRect, U8* pb, U32 cbStride);
575
ERR PKImageDecode_GetFrameCount(PKImageDecode* pID, U32* puCount);
576
ERR PKImageDecode_SelectFrame(PKImageDecode* pID, U32 uFrame);
577
ERR PKImageDecode_Release(PKImageDecode** ppID);
578
579
ERR PKImageDecode_GetXMPMetadata_WMP(PKImageDecode *pID, U8 *pbXMPMetadata, U32 *pcbXMPMetadata);
580
ERR PKImageDecode_GetEXIFMetadata_WMP(PKImageDecode *pID, U8 *pbEXIFMetadata, U32 *pcbEXIFMetadata);
581
ERR PKImageDecode_GetGPSInfoMetadata_WMP(PKImageDecode *pID, U8 *pbGPSInfoMetadata, U32 *pcbGPSInfoMetadata);
582
ERR PKImageDecode_GetIPTCNAAMetadata_WMP(PKImageDecode *pID, U8 *pbIPTCNAAMetadata, U32 *pcbIPTCNAAMetadata);
583
ERR PKImageDecode_GetPhotoshopMetadata_WMP(PKImageDecode *pID, U8 *pbPhotoshopMetadata, U32 *pcbPhotoshopMetadata);
584
585
ERR PKImageDecode_Create(PKImageDecode** ppID);
586
ERR PKCodecFactory_CreateDecoderFromFile(const char* szFilename, PKImageDecode** ppDecoder);
587
588
//================================================================
589
typedef struct tagPKFormatConverter
590
{
591
ERR (*Initialize)(PKFormatConverter*, PKImageDecode*, char *pExt, PKPixelFormatGUID);
592
ERR (*InitializeConvert)(PKFormatConverter* pFC, const PKPixelFormatGUID enPFFrom,
593
char *pExt, PKPixelFormatGUID enPFTTo);
594
595
ERR (*GetPixelFormat)(PKFormatConverter*, PKPixelFormatGUID*);
596
ERR (*GetSourcePixelFormat)(PKFormatConverter*, PKPixelFormatGUID*);
597
ERR (*GetSize)(PKFormatConverter*, I32*, I32*);
598
ERR (*GetResolution)(PKFormatConverter*, Float*, Float*);
599
600
ERR (*Copy)(PKFormatConverter*, const PKRect*, U8*, U32);
601
ERR (*Convert)(PKFormatConverter*, const PKRect*, U8*, U32);
602
603
ERR (*Release)(PKFormatConverter**);
604
605
PKImageDecode* pDecoder;
606
PKPixelFormatGUID enPixelFormat;
607
#ifdef __ANSI__
608
#undef PKFormatConverter
609
#endif // __ANSI__
610
} PKFormatConverter;
611
612
//----------------------------------------------------------------
613
ERR PKImageEncode_Transcode(PKImageEncode* pIE, PKFormatConverter* pFC, PKRect* pRect);
614
ERR PKImageEncode_WriteSource(PKImageEncode* pIE, PKFormatConverter* pFC, PKRect* pRect);
615
ERR PKFormatConverter_Initialize(PKFormatConverter* pFC, PKImageDecode* pID, char *pExt, PKPixelFormatGUID enPF);
616
ERR PKFormatConverter_InitializeConvert(PKFormatConverter* pFC, const PKPixelFormatGUID enPFFrom,
617
char *pExt, PKPixelFormatGUID enPFTo);
618
ERR PKFormatConverter_GetPixelFormat(PKFormatConverter* pFC, PKPixelFormatGUID* pPF);
619
ERR PKFormatConverter_GetSourcePixelFormat(PKFormatConverter* pFC, PKPixelFormatGUID* pPF);
620
ERR PKFormatConverter_GetSize(PKFormatConverter* pFC, I32* piWidth, I32* piHeight);
621
ERR PKFormatConverter_GetResolution(PKFormatConverter* pFC, Float* pfrX, Float* pfrY);
622
ERR PKFormatConverter_Copy(PKFormatConverter* pFC, const PKRect* pRect, U8* pb, U32 cbStride);
623
ERR PKFormatConverter_Convert(PKFormatConverter* pFC, const PKRect* pRect, U8* pb, U32 cbStride);
624
ERR PKFormatConverter_Release(PKFormatConverter** ppFC);
625
626
// Think of this as static member of PKFormatConverter "class"
627
ERR PKFormatConverter_EnumConversions(const PKPixelFormatGUID *pguidSourcePF,
628
const U32 iIndex,
629
const PKPixelFormatGUID **ppguidTargetPF);
630
631
ERR PKCodecFactory_CreateFormatConverter(PKFormatConverter** ppFConverter);
632
633
//----------------------------------------------------------------
634
ERR PKAlloc(void** ppv, size_t cb);
635
ERR PKFree(void** ppv);
636
ERR PKAllocAligned(void** ppv, size_t cb, size_t iAlign);
637
ERR PKFreeAligned(void** ppv);
638
639
#ifdef __cplusplus
640
} // extern "C"
641
#endif
642
643
644