123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642 |
- //*@@@+++@@@@******************************************************************
- //
- // Copyright © Microsoft Corp.
- // All rights reserved.
- //
- // Redistribution and use in source and binary forms, with or without
- // modification, are permitted provided that the following conditions are met:
- //
- // • Redistributions of source code must retain the above copyright notice,
- // this list of conditions and the following disclaimer.
- // • Redistributions in binary form must reproduce the above copyright notice,
- // this list of conditions and the following disclaimer in the documentation
- // and/or other materials provided with the distribution.
- //
- // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- // POSSIBILITY OF SUCH DAMAGE.
- //
- //*@@@---@@@@******************************************************************
- #pragma once
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <JXRMeta.h>
- #include <guiddef.h>
- //================================================================
- #define WMP_SDK_VERSION 0x0101
- #define PK_SDK_VERSION 0x0101
- #define sizeof2(array) (sizeof(array)/sizeof(*(array)))
- #ifndef max
- #define max(a,b) ((a) > (b) ? (a) : (b))
- #endif
- #ifndef min
- #define min(b,a) ((a) < (b) ? (a) : (b))
- #endif
- #ifdef __ANSI__
- #define STRCPY_SAFE(pszDest, cbDest, pszSrc) (strncpy((pszDest), (pszSrc), (cbDest)) == (pszDest) ? 0 : 1)
- #else
- #define STRCPY_SAFE(pszDest, cbDest, pszSrc) (strcpy_s((pszDest), (cbDest), (pszSrc)))
- #endif // __ANSI__
- //================================================================
- typedef struct tagPKRect
- {
- I32 X;
- I32 Y;
- I32 Width;
- I32 Height;
- } PKRect;
- //================================================================
- typedef U32 PKIID;
- EXTERN_C const PKIID IID_PKImageScanEncode;
- EXTERN_C const PKIID IID_PKImageFrameEncode;
- EXTERN_C const PKIID IID_PKImageWmpEncode;
- EXTERN_C const PKIID IID_PKImageWmpDecode;
- struct IFDEntry
- {
- U16 uTag;
- U16 uType;
- U32 uCount;
- U32 uValue;
- };
- EXTERN_C const U32 IFDEntryTypeSizes[13];
- EXTERN_C const U32 SizeofIFDEntry;
- //================================================================
- typedef float Float;
- typedef enum tagPKStreamFlags
- {
- PKStreamOpenRead = 0x00000000UL,
- PKStreamOpenWrite = 0x00000001UL,
- PKStreamOpenReadWrite = 0x00000002UL,
- PKStreamNoLock = 0x00010000UL,
- PKStreamNoSeek = 0x00020000UL,
- PKStreamCompress = 0x00040000UL,
- } PKStreamFlags;
- /* Undefined formats */
- #define GUID_PKPixelFormatUndefined GUID_PKPixelFormatDontCare
- DEFINE_GUID(GUID_PKPixelFormatDontCare, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x00);
- /* Indexed formats */
- //DEFINE_GUID(GUID_PKPixelFormat1bppIndexed, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x01);
- //DEFINE_GUID(GUID_PKPixelFormat2bppIndexed, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x02);
- //DEFINE_GUID(GUID_PKPixelFormat4bppIndexed, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x03);
- //DEFINE_GUID(GUID_PKPixelFormat8bppIndexed, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x04);
- DEFINE_GUID(GUID_PKPixelFormatBlackWhite, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x05);
- //DEFINE_GUID(GUID_PKPixelFormat2bppGray, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x06);
- //DEFINE_GUID(GUID_PKPixelFormat4bppGray, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x07);
- DEFINE_GUID(GUID_PKPixelFormat8bppGray, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x08);
- /* sRGB formats (gamma is approx. 2.2) */
- /* For a full definition, see the sRGB spec */
- /* 16bpp formats */
- DEFINE_GUID(GUID_PKPixelFormat16bppRGB555, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x09);
- DEFINE_GUID(GUID_PKPixelFormat16bppRGB565, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0a);
- DEFINE_GUID(GUID_PKPixelFormat16bppGray, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0b);
- /* 24bpp formats */
- DEFINE_GUID(GUID_PKPixelFormat24bppBGR, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0c);
- DEFINE_GUID(GUID_PKPixelFormat24bppRGB, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0d);
- /* 32bpp format */
- DEFINE_GUID(GUID_PKPixelFormat32bppBGR, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0e);
- DEFINE_GUID(GUID_PKPixelFormat32bppBGRA, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0f);
- DEFINE_GUID(GUID_PKPixelFormat32bppPBGRA, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x10);
- DEFINE_GUID(GUID_PKPixelFormat32bppGrayFloat, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x11);
- DEFINE_GUID(GUID_PKPixelFormat32bppRGB, 0xd98c6b95, 0x3efe, 0x47d6, 0xbb, 0x25, 0xeb, 0x17, 0x48, 0xab, 0x0c, 0xf1);
- DEFINE_GUID(GUID_PKPixelFormat32bppRGBA, 0xf5c7ad2d, 0x6a8d, 0x43dd, 0xa7, 0xa8, 0xa2, 0x99, 0x35, 0x26, 0x1a, 0xe9);
- DEFINE_GUID(GUID_PKPixelFormat32bppPRGBA, 0x3cc4a650, 0xa527, 0x4d37, 0xa9, 0x16, 0x31, 0x42, 0xc7, 0xeb, 0xed, 0xba);
- /* 48bpp format */
- DEFINE_GUID(GUID_PKPixelFormat48bppRGBFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x12);
- /* scRGB formats. Gamma is 1.0 */
- /* For a full definition, see the scRGB spec */
- /* 16bpp format */
- DEFINE_GUID(GUID_PKPixelFormat16bppGrayFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x13);
- /* 32bpp format */
- DEFINE_GUID(GUID_PKPixelFormat32bppRGB101010, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x14);
- /* 48bpp format */
- DEFINE_GUID(GUID_PKPixelFormat48bppRGB, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x15);
- /* 64bpp format */
- DEFINE_GUID(GUID_PKPixelFormat64bppRGBA, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x16);
- DEFINE_GUID(GUID_PKPixelFormat64bppPRGBA, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x17);
- /* 96bpp format */
- DEFINE_GUID(GUID_PKPixelFormat96bppRGBFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x18);
- DEFINE_GUID(GUID_PKPixelFormat96bppRGBFloat, 0xe3fed78f, 0xe8db, 0x4acf, 0x84, 0xc1, 0xe9, 0x7f, 0x61, 0x36, 0xb3, 0x27);
- /* Floating point scRGB formats */
- DEFINE_GUID(GUID_PKPixelFormat128bppRGBAFloat, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x19);
- DEFINE_GUID(GUID_PKPixelFormat128bppPRGBAFloat, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1a);
- DEFINE_GUID(GUID_PKPixelFormat128bppRGBFloat, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1b);
- /* CMYK formats. */
- DEFINE_GUID(GUID_PKPixelFormat32bppCMYK, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1c);
- /* Photon formats */
- DEFINE_GUID(GUID_PKPixelFormat64bppRGBAFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1d);
- DEFINE_GUID(GUID_PKPixelFormat64bppRGBFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x40);
- DEFINE_GUID(GUID_PKPixelFormat128bppRGBAFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1e);
- DEFINE_GUID(GUID_PKPixelFormat128bppRGBFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x41);
- DEFINE_GUID(GUID_PKPixelFormat64bppRGBAHalf, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3a);
- DEFINE_GUID(GUID_PKPixelFormat64bppRGBHalf, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x42);
- DEFINE_GUID(GUID_PKPixelFormat48bppRGBHalf, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3b);
- DEFINE_GUID(GUID_PKPixelFormat32bppRGBE, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3d);
- DEFINE_GUID(GUID_PKPixelFormat16bppGrayHalf, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3e);
- DEFINE_GUID(GUID_PKPixelFormat32bppGrayFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3f);
- /* More CMYK formats and n-Channel formats */
- DEFINE_GUID(GUID_PKPixelFormat64bppCMYK, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1f);
- DEFINE_GUID(GUID_PKPixelFormat24bpp3Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x20);
- DEFINE_GUID(GUID_PKPixelFormat32bpp4Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x21);
- DEFINE_GUID(GUID_PKPixelFormat40bpp5Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x22);
- DEFINE_GUID(GUID_PKPixelFormat48bpp6Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x23);
- DEFINE_GUID(GUID_PKPixelFormat56bpp7Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x24);
- DEFINE_GUID(GUID_PKPixelFormat64bpp8Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x25);
- DEFINE_GUID(GUID_PKPixelFormat48bpp3Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x26);
- DEFINE_GUID(GUID_PKPixelFormat64bpp4Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x27);
- DEFINE_GUID(GUID_PKPixelFormat80bpp5Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x28);
- DEFINE_GUID(GUID_PKPixelFormat96bpp6Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x29);
- DEFINE_GUID(GUID_PKPixelFormat112bpp7Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2a);
- DEFINE_GUID(GUID_PKPixelFormat128bpp8Channels, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2b);
- DEFINE_GUID(GUID_PKPixelFormat40bppCMYKAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2c);
- DEFINE_GUID(GUID_PKPixelFormat80bppCMYKAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2d);
- DEFINE_GUID(GUID_PKPixelFormat32bpp3ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2e);
- DEFINE_GUID(GUID_PKPixelFormat40bpp4ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2f);
- DEFINE_GUID(GUID_PKPixelFormat48bpp5ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x30);
- DEFINE_GUID(GUID_PKPixelFormat56bpp6ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x31);
- DEFINE_GUID(GUID_PKPixelFormat64bpp7ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x32);
- DEFINE_GUID(GUID_PKPixelFormat72bpp8ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x33);
- DEFINE_GUID(GUID_PKPixelFormat64bpp3ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x34);
- DEFINE_GUID(GUID_PKPixelFormat80bpp4ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x35);
- DEFINE_GUID(GUID_PKPixelFormat96bpp5ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x36);
- DEFINE_GUID(GUID_PKPixelFormat112bpp6ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x37);
- DEFINE_GUID(GUID_PKPixelFormat128bpp7ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x38);
- DEFINE_GUID(GUID_PKPixelFormat144bpp8ChannelsAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x39);
- /* YCrCb from Advanced Profile */
- DEFINE_GUID(GUID_PKPixelFormat12bppYCC420, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x44);
- DEFINE_GUID(GUID_PKPixelFormat16bppYCC422, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x45);
- DEFINE_GUID(GUID_PKPixelFormat20bppYCC422, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x46);
- DEFINE_GUID(GUID_PKPixelFormat32bppYCC422, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x47);
- DEFINE_GUID(GUID_PKPixelFormat24bppYCC444, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x48);
- DEFINE_GUID(GUID_PKPixelFormat30bppYCC444, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x49);
- DEFINE_GUID(GUID_PKPixelFormat48bppYCC444, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4a);
- DEFINE_GUID(GUID_PKPixelFormat16bpp48bppYCC444FixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4b);
- DEFINE_GUID(GUID_PKPixelFormat20bppYCC420Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4c);
- DEFINE_GUID(GUID_PKPixelFormat24bppYCC422Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4d);
- DEFINE_GUID(GUID_PKPixelFormat30bppYCC422Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4e);
- DEFINE_GUID(GUID_PKPixelFormat48bppYCC422Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x4f);
- DEFINE_GUID(GUID_PKPixelFormat32bppYCC444Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x50);
- DEFINE_GUID(GUID_PKPixelFormat40bppYCC444Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x51);
- DEFINE_GUID(GUID_PKPixelFormat64bppYCC444Alpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x52);
- DEFINE_GUID(GUID_PKPixelFormat64bppYCC444AlphaFixedPoint, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x53);
- //YUV
- #define GUID_PKPixelFormat12bppYUV420 GUID_PKPixelFormat12bppYCC420
- #define GUID_PKPixelFormat16bppYUV422 GUID_PKPixelFormat16bppYCC422
- #define GUID_PKPixelFormat24bppYUV444 GUID_PKPixelFormat24bppYCC444
- /* CMYKDIRECT from Advanced Profile */
- DEFINE_GUID(GUID_PKPixelFormat32bppCMYKDIRECT, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x54);
- DEFINE_GUID(GUID_PKPixelFormat64bppCMYKDIRECT, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x55);
- DEFINE_GUID(GUID_PKPixelFormat40bppCMYKDIRECTAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x56);
- DEFINE_GUID(GUID_PKPixelFormat80bppCMYKDIRECTAlpha, 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x43);
- // PhotometricInterpretation
- #define PK_PI_W0 0 // WhiteIsZero
- #define PK_PI_B0 1 // BlackIsZero
- #define PK_PI_RGB 2
- #define PK_PI_RGBPalette 3
- #define PK_PI_TransparencyMask 4
- #define PK_PI_CMYK 5
- #define PK_PI_YCbCr 6
- #define PK_PI_CIELab 8
- #define PK_PI_NCH 100
- #define PK_PI_RGBE 101
- #define PK_pixfmtNul 0x00000000
- #define PK_pixfmtHasAlpha 0x00000010
- #define PK_pixfmtPreMul 0x00000020
- #define PK_pixfmtBGR 0x00000040
- #define PK_pixfmtNeedConvert 0x80000000
- #define LOOKUP_FORWARD 0
- #define LOOKUP_BACKWARD_TIF 1
- typedef unsigned long WMP_GRBIT;
- typedef GUID PKPixelFormatGUID;
- typedef struct tagPKPixelInfo
- {
- const PKPixelFormatGUID* pGUIDPixFmt;
- size_t cChannel;
- COLORFORMAT cfColorFormat;
- BITDEPTH_BITS bdBitDepth;
- U32 cbitUnit;
-
- WMP_GRBIT grBit;
- // TIFF
- U32 uInterpretation;
- U32 uSamplePerPixel;
- U32 uBitsPerSample;
- U32 uSampleFormat;
- } PKPixelInfo;
- //================================================================
- ERR PKAlloc(void** ppv, size_t cb);
- ERR PKFree(void** ppv);
- //----------------------------------------------------------------
- //ERR GetPixelInfo(PKPixelFormatGUID enPixelFormat, const PKPixelInfo** ppPI);
- ERR PixelFormatLookup(PKPixelInfo* pPI, U8 uLookupType);
- const PKPixelFormatGUID* GetPixelFormatFromHash(const U8 uPFHash);
- ERR GetImageEncodeIID(const char* szExt, const PKIID** ppIID);
- ERR GetImageDecodeIID(const char* szExt, const PKIID** ppIID);
- //================================================================
- #ifdef __ANSI__
- struct tagPKFactory;
- struct tagPKCodecFactory;
- struct tagPKImageDecode;
- struct tagPKImageEncode;
- struct tagPKFormatConverter;
- #define PKFactory struct tagPKFactory
- #define PKCodecFactory struct tagPKCodecFactory
- #define PKImageDecode struct tagPKImageDecode
- #define PKImageEncode struct tagPKImageEncode
- #define PKFormatConverter struct tagPKFormatConverter
- #else // __ANSI__
- typedef struct tagPKFactory PKFactory;
- typedef struct tagPKCodecFactory PKCodecFactory;
- typedef struct tagPKImageDecode PKImageDecode;
- typedef struct tagPKImageEncode PKImageEncode;
- typedef struct tagPKFormatConverter PKFormatConverter;
- #endif // __ANSI__
- //================================================================
- typedef struct tagPKStream
- {
- ERR (*InitializeFromFilename)(const char*, ULong);
- ERR (*Release)(void);
- FILE* fp;
- } PKStream;
- //================================================================
- typedef struct tagPKFactory
- {
- ERR (*CreateStream)(PKStream**);
- ERR (*CreateStreamFromFilename)(struct WMPStream**, const char*, const char*);
- ERR (*CreateStreamFromMemory)(struct WMPStream**, void*, size_t);
- ERR (*Release)(PKFactory**);
- #ifdef __ANSI__
- #undef PKFactory
- #endif // __ANSI__
- } PKFactory;
- //----------------------------------------------------------------
- ERR PKCreateFactory_CreateStream(PKStream** ppStream);
- ERR PKCreateFactory_Release(PKFactory** ppFactory);
- EXTERN_C ERR PKCreateFactory(PKFactory**, U32);
- //================================================================
- typedef struct tagPKCodecFactory
- {
- ERR (*CreateCodec)(const PKIID*, void**);
- ERR (*CreateDecoderFromFile)(const char*, PKImageDecode**);
- ERR (*CreateFormatConverter)(PKFormatConverter**);
- ERR (*Release)(PKCodecFactory**);
- #ifdef __ANSI__
- #undef PKCodecFactory
- #endif // __ANSI__
- } PKCodecFactory;
- //----------------------------------------------------------------
- ERR PKCodecFactory_CreateCodec(const PKIID* iid, void** ppv);
- ERR PKCreateCodecFactory_Release(PKCodecFactory** ppCFactory);
- EXTERN_C ERR PKCreateCodecFactory(PKCodecFactory**, U32);
- //================================================================
- typedef enum BANDEDENCSTATE
- {
- BANDEDENCSTATE_UNINITIALIZED = 0,
- BANDEDENCSTATE_INIT,
- BANDEDENCSTATE_ENCODING,
- BANDEDENCSTATE_TERMINATED,
- BANDEDENCSTATE_NONBANDEDENCODE,
- } BANDEDENCSTATE;
- typedef struct tagPKImageEncode
- {
- //ERR (*GetPixelFormat)(MILPixelFormat*));
- ERR (*Initialize)(PKImageEncode*, struct WMPStream*, void*, size_t);
- ERR (*Terminate)(PKImageEncode*);
- ERR (*SetPixelFormat)(PKImageEncode*, PKPixelFormatGUID);
- ERR (*SetSize)(PKImageEncode*, I32, I32);
- ERR (*SetResolution)(PKImageEncode*, Float, Float);
- ERR (*SetColorContext)(PKImageEncode *pIE, const U8 *pbColorContext,
- U32 cbColorContext);
- ERR (*SetDescriptiveMetadata)(PKImageEncode *pIE,
- const DESCRIPTIVEMETADATA *pDescMetadata);
- ERR (*WritePixels)(PKImageEncode*, U32, U8*, U32);
- ERR (*WriteSource)(PKImageEncode*, PKFormatConverter*, PKRect*);
- // Banded encode API - currently only implemented for WMP encoder
- ERR (*WritePixelsBandedBegin)(PKImageEncode* pEncoder, struct WMPStream *pPlanarAlphaTempFile);
- ERR (*WritePixelsBanded)(PKImageEncode* pEncoder, U32 cLines, U8* pbPixels, U32 cbStride, Bool fLastCall);
- ERR (*WritePixelsBandedEnd)(PKImageEncode* pEncoder);
- #define TEMPFILE_COPYBUF_SIZE 8192 // Means when using tempfile for planar alpha banded encode, copy this many bytes at a time
- ERR (*Transcode)(PKImageEncode*, PKImageDecode*, CWMTranscodingParam*);
- ERR (*CreateNewFrame)(PKImageEncode*, void*, size_t);
- ERR (*Release)(PKImageEncode**);
- struct WMPStream* pStream;
- size_t offStart;
- PKPixelFormatGUID guidPixFormat;
- U32 uWidth;
- U32 uHeight;
- U32 idxCurrentLine;
- Float fResX;
- Float fResY;
- U32 cFrame;
- Bool fHeaderDone;
- size_t offPixel;
- size_t cbPixel;
- U8 *pbColorContext;
- U32 cbColorContext;
- U8 *pbEXIFMetadata;
- U32 cbEXIFMetadataByteCount;
- U8 *pbGPSInfoMetadata;
- U32 cbGPSInfoMetadataByteCount;
- U8 *pbIPTCNAAMetadata;
- U32 cbIPTCNAAMetadataByteCount;
- U8 *pbXMPMetadata;
- U32 cbXMPMetadataByteCount;
- U8 *pbPhotoshopMetadata;
- U32 cbPhotoshopMetadataByteCount;
- DESCRIPTIVEMETADATA sDescMetadata;
- Bool bWMP;//for the encoder in decoding
- struct
- {
- WmpDEMisc wmiDEMisc;
- CWMImageInfo wmiI;
- CWMIStrCodecParam wmiSCP;
- CTXSTRCODEC ctxSC;
- CWMImageInfo wmiI_Alpha;
- CWMIStrCodecParam wmiSCP_Alpha;
- CTXSTRCODEC ctxSC_Alpha;
- Bool bHasAlpha;
- Long nOffImage;
- Long nCbImage;
- Long nOffAlpha;
- Long nCbAlpha;
- ORIENTATION oOrientation;
- // Banded encode state variables
- BANDEDENCSTATE eBandedEncState;
- struct WMPStream *pPATempFile;
- } WMP;
- #ifdef __ANSI__
- #undef PKImageEncode
- #endif // __ANSI__
- } PKImageEncode;
- //----------------------------------------------------------------
- ERR PKImageEncode_Create_WMP(PKImageEncode** ppIE);
- ERR PKImageEncode_Initialize(PKImageEncode* pIE, struct WMPStream* pStream, void* pvParam, size_t cbParam);
- ERR PKImageEncode_Terminate(PKImageEncode* pIE);
- ERR PKImageEncode_SetPixelFormat(PKImageEncode* pIE, PKPixelFormatGUID enPixelFormat);
- ERR PKImageEncode_SetSize(PKImageEncode* pIE, I32 iWidth, I32 iHeight);
- ERR PKImageEncode_SetResolution(PKImageEncode* pIE, Float rX, Float rY);
- ERR PKImageEncode_SetColorContext(PKImageEncode *pIE, const U8 *pbColorContext, U32 cbColorContext);
- ERR PKImageEncode_SetDescriptiveMetadata(PKImageEncode *pIE, const DESCRIPTIVEMETADATA *pDescMetadata);
- ERR PKImageEncode_WritePixels(PKImageEncode* pIE, U32 cLine, U8* pbPixel, U32 cbStride);
- ERR PKImageEncode_CreateNewFrame(PKImageEncode* pIE, void* pvParam, size_t cbParam);
- ERR PKImageEncode_Release(PKImageEncode** ppIE);
- ERR PKImageEncode_SetXMPMetadata_WMP(PKImageEncode *pIE, const U8 *pbXMPMetadata, U32 cbXMPMetadata);
- ERR PKImageEncode_SetEXIFMetadata_WMP(PKImageEncode *pIE, const U8 *pbEXIFMetadata, U32 cbEXIFMetadata);
- ERR PKImageEncode_SetGPSInfoMetadata_WMP(PKImageEncode *pIE, const U8 *pbGPSInfoMetadata, U32 cbGPSInfoMetadata);
- ERR PKImageEncode_SetIPTCNAAMetadata_WMP(PKImageEncode *pIE, const U8 *pbIPTCNAAMetadata, U32 cbIPTCNAAMetadata);
- ERR PKImageEncode_SetPhotoshopMetadata_WMP(PKImageEncode *pIE, const U8 *pbPhotoshopMetadata, U32 cbPhotoshopMetadata);
- void FreeDescMetadata(DPKPROPVARIANT *pvar);
- ERR PKImageEncode_Create(PKImageEncode** ppIE);
- //================================================================
- typedef struct tagPKImageDecode
- {
- ERR (*Initialize)(PKImageDecode*, struct WMPStream* pStream);
- ERR (*GetPixelFormat)(PKImageDecode*, PKPixelFormatGUID*);
- ERR (*GetSize)(PKImageDecode*, I32*, I32*);
- ERR (*GetResolution)(PKImageDecode*, Float*, Float*);
- ERR (*GetColorContext)(PKImageDecode *pID, U8 *pbColorContext,
- U32 *pcbColorContext);
- ERR (*GetDescriptiveMetadata)(PKImageDecode *pIE,
- DESCRIPTIVEMETADATA *pDescMetadata);
- ERR (*GetRawStream)(PKImageDecode*, struct WMPStream**);
- ERR (*Copy)(PKImageDecode*, const PKRect*, U8*, U32);
- ERR (*GetFrameCount)(PKImageDecode*, U32*);
- ERR (*SelectFrame)(PKImageDecode*, U32);
- ERR (*Release)(PKImageDecode**);
- struct WMPStream* pStream;
- Bool fStreamOwner;
- size_t offStart;
-
- PKPixelFormatGUID guidPixFormat;
- U32 uWidth;
- U32 uHeight;
- U32 idxCurrentLine;
- Float fResX;
- Float fResY;
- U32 cFrame;
- struct
- {
- WmpDEMisc wmiDEMisc;
- CWMImageInfo wmiI;
- CWMIStrCodecParam wmiSCP;
- CTXSTRCODEC ctxSC;
- CWMImageInfo wmiI_Alpha;
- CWMIStrCodecParam wmiSCP_Alpha;
- CTXSTRCODEC ctxSC_Alpha;
- Bool bHasAlpha;
- Long nOffImage;
- Long nCbImage;
- Long nOffAlpha;
- Long nCbAlpha;
- Bool bIgnoreOverlap;
- size_t DecoderCurrMBRow;
- size_t DecoderCurrAlphaMBRow;
- size_t cMarker;
- size_t cLinesDecoded;
- size_t cLinesCropped; // Lines may be cropped from the top - buffer for subsequent decodes must be adjusted
- Bool fFirstNonZeroDecode;
- Bool fOrientationFromContainer;
- ORIENTATION oOrientationFromContainer; // Tag 0xBC02 in HD Photo container
-
- DESCRIPTIVEMETADATA sDescMetadata;
- } WMP;
- #ifdef __ANSI__
- #undef PKImageDecode
- #endif // __ANSI__
- } PKImageDecode;
- //----------------------------------------------------------------
- ERR PKImageDecode_Create_WMP(PKImageDecode** ppID);
- ERR PKImageDecode_Initialize(PKImageDecode* pID, struct WMPStream* pStream);
- ERR PKImageDecode_GetPixelFormat(PKImageDecode* pID, PKPixelFormatGUID* pPF);
- ERR PKImageDecode_GetSize(PKImageDecode* pID, I32* piWidth, I32* piHeight);
- ERR PKImageDecode_GetResolution(PKImageDecode* pID, Float* pfrX, Float* pfrY);
- ERR PKImageDecode_GetColorContext(PKImageDecode *pID, U8 *pbColorContext, U32 *pcbColorContext);
- ERR PKImageDecode_GetDescriptiveMetadata(PKImageDecode *pID, DESCRIPTIVEMETADATA *pDescMetadata);
- ERR PKImageDecode_Copy(PKImageDecode* pID, const PKRect* pRect, U8* pb, U32 cbStride);
- ERR PKImageDecode_GetFrameCount(PKImageDecode* pID, U32* puCount);
- ERR PKImageDecode_SelectFrame(PKImageDecode* pID, U32 uFrame);
- ERR PKImageDecode_Release(PKImageDecode** ppID);
- ERR PKImageDecode_GetXMPMetadata_WMP(PKImageDecode *pID, U8 *pbXMPMetadata, U32 *pcbXMPMetadata);
- ERR PKImageDecode_GetEXIFMetadata_WMP(PKImageDecode *pID, U8 *pbEXIFMetadata, U32 *pcbEXIFMetadata);
- ERR PKImageDecode_GetGPSInfoMetadata_WMP(PKImageDecode *pID, U8 *pbGPSInfoMetadata, U32 *pcbGPSInfoMetadata);
- ERR PKImageDecode_GetIPTCNAAMetadata_WMP(PKImageDecode *pID, U8 *pbIPTCNAAMetadata, U32 *pcbIPTCNAAMetadata);
- ERR PKImageDecode_GetPhotoshopMetadata_WMP(PKImageDecode *pID, U8 *pbPhotoshopMetadata, U32 *pcbPhotoshopMetadata);
- ERR PKImageDecode_Create(PKImageDecode** ppID);
- ERR PKCodecFactory_CreateDecoderFromFile(const char* szFilename, PKImageDecode** ppDecoder);
- //================================================================
- typedef struct tagPKFormatConverter
- {
- ERR (*Initialize)(PKFormatConverter*, PKImageDecode*, char *pExt, PKPixelFormatGUID);
- ERR (*InitializeConvert)(PKFormatConverter* pFC, const PKPixelFormatGUID enPFFrom,
- char *pExt, PKPixelFormatGUID enPFTTo);
- ERR (*GetPixelFormat)(PKFormatConverter*, PKPixelFormatGUID*);
- ERR (*GetSourcePixelFormat)(PKFormatConverter*, PKPixelFormatGUID*);
- ERR (*GetSize)(PKFormatConverter*, I32*, I32*);
- ERR (*GetResolution)(PKFormatConverter*, Float*, Float*);
- ERR (*Copy)(PKFormatConverter*, const PKRect*, U8*, U32);
- ERR (*Convert)(PKFormatConverter*, const PKRect*, U8*, U32);
- ERR (*Release)(PKFormatConverter**);
- PKImageDecode* pDecoder;
- PKPixelFormatGUID enPixelFormat;
- #ifdef __ANSI__
- #undef PKFormatConverter
- #endif // __ANSI__
- } PKFormatConverter;
- //----------------------------------------------------------------
- ERR PKImageEncode_Transcode(PKImageEncode* pIE, PKFormatConverter* pFC, PKRect* pRect);
- ERR PKImageEncode_WriteSource(PKImageEncode* pIE, PKFormatConverter* pFC, PKRect* pRect);
- ERR PKFormatConverter_Initialize(PKFormatConverter* pFC, PKImageDecode* pID, char *pExt, PKPixelFormatGUID enPF);
- ERR PKFormatConverter_InitializeConvert(PKFormatConverter* pFC, const PKPixelFormatGUID enPFFrom,
- char *pExt, PKPixelFormatGUID enPFTo);
- ERR PKFormatConverter_GetPixelFormat(PKFormatConverter* pFC, PKPixelFormatGUID* pPF);
- ERR PKFormatConverter_GetSourcePixelFormat(PKFormatConverter* pFC, PKPixelFormatGUID* pPF);
- ERR PKFormatConverter_GetSize(PKFormatConverter* pFC, I32* piWidth, I32* piHeight);
- ERR PKFormatConverter_GetResolution(PKFormatConverter* pFC, Float* pfrX, Float* pfrY);
- ERR PKFormatConverter_Copy(PKFormatConverter* pFC, const PKRect* pRect, U8* pb, U32 cbStride);
- ERR PKFormatConverter_Convert(PKFormatConverter* pFC, const PKRect* pRect, U8* pb, U32 cbStride);
- ERR PKFormatConverter_Release(PKFormatConverter** ppFC);
- // Think of this as static member of PKFormatConverter "class"
- ERR PKFormatConverter_EnumConversions(const PKPixelFormatGUID *pguidSourcePF,
- const U32 iIndex,
- const PKPixelFormatGUID **ppguidTargetPF);
- ERR PKCodecFactory_CreateFormatConverter(PKFormatConverter** ppFConverter);
- //----------------------------------------------------------------
- ERR PKAlloc(void** ppv, size_t cb);
- ERR PKFree(void** ppv);
- ERR PKAllocAligned(void** ppv, size_t cb, size_t iAlign);
- ERR PKFreeAligned(void** ppv);
- #ifdef __cplusplus
- } // extern "C"
- #endif
|