Alien-FreeImage
view release on metacpan or search on metacpan
src/Source/LibJXR/jxrgluelib/JXRGlueJxr.c view on Meta::CPAN
void CalcMetadataSizeLPWSTR(const DPKPROPVARIANT var,
U16 *pcInactiveMetadata,
U32 *pcbOffsetSize,
U32 *pcbCount)
{
if (DPKVT_EMPTY != var.vt)
{
U32 uiCBWithNull = sizeof(U16) * ((U32)wcslen((wchar_t *) var.VT.pwszVal) + 1); // +1 for NULL term;
assert(DPKVT_LPWSTR == var.vt);
// We only use offset if size > 4
if (uiCBWithNull > 4)
*pcbOffsetSize += uiCBWithNull;
if (pcbCount)
*pcbCount = uiCBWithNull;
}
else
*pcInactiveMetadata += 1;
}
void CalcMetadataSizeUI2(const DPKPROPVARIANT var,
U16 *pcInactiveMetadata,
U32 *pcbMetadataSize)
{
UNREFERENCED_PARAMETER( pcbMetadataSize );
if (DPKVT_EMPTY != var.vt)
{
assert(DPKVT_UI2 == var.vt);
// This is a single UI2, so it will not be written via offset, but rather as value
}
else
*pcInactiveMetadata += 1;
}
void CalcMetadataSizeUI4(const DPKPROPVARIANT var,
U16 *pcInactiveMetadata,
U32 *pcbContainer)
{
UNREFERENCED_PARAMETER( pcbContainer );
if (DPKVT_EMPTY != var.vt)
{
assert(DPKVT_UI4 == var.vt);
// This is a single UI4, so it will not be written via offset, but rather as value
}
else
*pcInactiveMetadata += 1;
}
ERR CalcMetadataOffsetSize(PKImageEncode* pIE,
U16 *pcInactiveMetadata,
U32 *pcbMetadataSize)
{
ERR err = WMP_errSuccess;
CalcMetadataSizeLPSTR(pIE->sDescMetadata.pvarImageDescription, pcInactiveMetadata, pcbMetadataSize, NULL);
CalcMetadataSizeLPSTR(pIE->sDescMetadata.pvarCameraMake, pcInactiveMetadata, pcbMetadataSize, NULL);
CalcMetadataSizeLPSTR(pIE->sDescMetadata.pvarCameraModel, pcInactiveMetadata, pcbMetadataSize, NULL);
CalcMetadataSizeLPSTR(pIE->sDescMetadata.pvarSoftware, pcInactiveMetadata, pcbMetadataSize, NULL);
CalcMetadataSizeLPSTR(pIE->sDescMetadata.pvarDateTime, pcInactiveMetadata, pcbMetadataSize, NULL);
CalcMetadataSizeLPSTR(pIE->sDescMetadata.pvarArtist, pcInactiveMetadata, pcbMetadataSize, NULL);
CalcMetadataSizeLPSTR(pIE->sDescMetadata.pvarCopyright, pcInactiveMetadata, pcbMetadataSize, NULL);
CalcMetadataSizeUI2(pIE->sDescMetadata.pvarRatingStars, pcInactiveMetadata, pcbMetadataSize);
CalcMetadataSizeUI2(pIE->sDescMetadata.pvarRatingValue, pcInactiveMetadata, pcbMetadataSize);
CalcMetadataSizeLPWSTR(pIE->sDescMetadata.pvarCaption, pcInactiveMetadata, pcbMetadataSize, NULL);
CalcMetadataSizeLPSTR(pIE->sDescMetadata.pvarDocumentName, pcInactiveMetadata, pcbMetadataSize, NULL);
CalcMetadataSizeLPSTR(pIE->sDescMetadata.pvarPageName, pcInactiveMetadata, pcbMetadataSize, NULL);
CalcMetadataSizeUI4(pIE->sDescMetadata.pvarPageNumber, pcInactiveMetadata, pcbMetadataSize);
CalcMetadataSizeLPSTR(pIE->sDescMetadata.pvarHostComputer, pcInactiveMetadata, pcbMetadataSize, NULL);
return err;
}
ERR CopyDescMetadata(DPKPROPVARIANT *pvarDst,
const DPKPROPVARIANT varSrc)
{
ERR err = WMP_errSuccess;
size_t uiSize;
pvarDst->vt = varSrc.vt;
switch (varSrc.vt)
{
case DPKVT_LPSTR:
pvarDst->vt = DPKVT_LPSTR;
uiSize = strlen(varSrc.VT.pszVal) + 1;
Call(PKAlloc((void **) &pvarDst->VT.pszVal, uiSize));
memcpy(pvarDst->VT.pszVal, varSrc.VT.pszVal, uiSize);
break;
case DPKVT_LPWSTR:
pvarDst->vt = DPKVT_LPWSTR;
uiSize = sizeof(U16) * (wcslen((wchar_t *) varSrc.VT.pwszVal) + 1); // +1 for NULL term
Call(PKAlloc((void **) &pvarDst->VT.pszVal, uiSize));
memcpy(pvarDst->VT.pwszVal, varSrc.VT.pwszVal, uiSize);
break;
case DPKVT_UI2:
pvarDst->VT.uiVal = varSrc.VT.uiVal;
break;
case DPKVT_UI4:
pvarDst->VT.ulVal = varSrc.VT.ulVal;
break;
default:
assert(FALSE); // This case is not handled
FailIf(TRUE, WMP_errNotYetImplemented);
// *** FALL THROUGH ***
case DPKVT_EMPTY:
memset(pvarDst, 0, sizeof(*pvarDst));
assert(DPKVT_EMPTY == pvarDst->vt);
break;
}
Cleanup:
return err;
}
src/Source/LibJXR/jxrgluelib/JXRGlueJxr.c view on Meta::CPAN
case DPKVT_UI2:
CalcMetadataSizeUI2(var, &uiTemp, &uiMetadataOffsetSize);
pwmpDE->uCount = 1;
pwmpDE->uValueOrOffset = var.VT.uiVal;
Call(WriteWmpDE(pWS, poffPos, pwmpDE, NULL, NULL));
break;
case DPKVT_UI4:
CalcMetadataSizeUI4(var, &uiTemp, &uiMetadataOffsetSize);
pwmpDE->uCount = 1;
pwmpDE->uValueOrOffset = var.VT.ulVal;
Call(WriteWmpDE(pWS, poffPos, pwmpDE, NULL, NULL));
break;
default:
assert(FALSE); // This case is not handled
FailIf(TRUE, WMP_errNotYetImplemented);
break;
}
*puiCurrDescMetadataOffset += uiDataWrittenToOffset;
// Sanity check after
assert(*puiCurrDescMetadataOffset <= pDEMisc->uDescMetadataByteCount); // Can be equal
Cleanup:
return err;
}
//================================================================
// PKImageEncode_WMP
//================================================================
ERR WriteContainerPre(
PKImageEncode* pIE)
{
ERR err = WMP_errSuccess;
const U32 OFFSET_OF_PFD = 0x20;
struct WMPStream* pWS = pIE->pStream;
WmpDEMisc* pDEMisc = &pIE->WMP.wmiDEMisc;
PKPixelInfo PI;
size_t offPos = 0;
U8 IIMM[2] = {'\x49', '\x49'};
// const U32 cbWmpDEMisc = OFFSET_OF_PFD;
U32 cbMetadataOffsetSize = 0;
U16 cInactiveMetadata = 0;
U32 uiCurrDescMetadataOffset = 0;
static WmpDE wmpDEs[] =
{
{WMP_tagDocumentName, WMP_typASCII, 1, (U32) -1}, // Descriptive metadata
{WMP_tagImageDescription, WMP_typASCII, 1, (U32) -1}, // Descriptive metadata
{WMP_tagCameraMake, WMP_typASCII, 1, (U32) -1}, // Descriptive metadata
{WMP_tagCameraModel, WMP_typASCII, 1, (U32) -1}, // Descriptive metadata
{WMP_tagPageName, WMP_typASCII, 1, (U32) -1}, // Descriptive metadata
{WMP_tagPageNumber, WMP_typSHORT, 2, (U32) -1}, // Descriptive metadata
{WMP_tagSoftware, WMP_typASCII, 1, (U32) -1}, // Descriptive metadata
{WMP_tagDateTime, WMP_typASCII, 1, (U32) -1}, // Descriptive metadata
{WMP_tagArtist, WMP_typASCII, 1, (U32) -1}, // Descriptive metadata
{WMP_tagHostComputer, WMP_typASCII, 1, (U32) -1}, // Descriptive metadata
{WMP_tagRatingStars, WMP_typSHORT, 1, (U32) -1}, // Descriptive metadata
{WMP_tagRatingValue, WMP_typSHORT, 1, (U32) -1}, // Descriptive metadata
{WMP_tagCopyright, WMP_typASCII, 1, (U32) -1}, // Descriptive metadata
{WMP_tagCaption, WMP_typBYTE, 1, (U32) -1}, // Descriptive metadata
{WMP_tagXMPMetadata, WMP_typBYTE, 1, (U32) -1},
{WMP_tagIPTCNAAMetadata, WMP_typBYTE, 1, (U32) -1},
{WMP_tagPhotoshopMetadata, WMP_typBYTE, 1, (U32) -1},
{WMP_tagEXIFMetadata, WMP_typLONG, 1, (U32) -1},
{WMP_tagIccProfile, WMP_typUNDEFINED, 1, (U32) -1},
{WMP_tagGPSInfoMetadata, WMP_typLONG, 1, (U32) -1},
{WMP_tagPixelFormat, WMP_typBYTE, 16, (U32) -1},
{WMP_tagTransformation, WMP_typLONG, 1, (U32) -1},
{WMP_tagImageWidth, WMP_typLONG, 1, (U32) -1},
{WMP_tagImageHeight, WMP_typLONG, 1, (U32) -1},
{WMP_tagWidthResolution, WMP_typFLOAT, 1, (U32) -1},
{WMP_tagHeightResolution, WMP_typFLOAT, 1, (U32) -1},
{WMP_tagImageOffset, WMP_typLONG, 1, (U32) -1},
{WMP_tagImageByteCount, WMP_typLONG, 1, (U32) -1},
{WMP_tagAlphaOffset, WMP_typLONG, 1, (U32) -1},
{WMP_tagAlphaByteCount, WMP_typLONG, 1, (U32) -1},
};
U16 cWmpDEs = sizeof(wmpDEs) / sizeof(wmpDEs[0]);
WmpDE wmpDE = {0};
size_t i = 0;
U8* pbEXIFMetadata = NULL;
U8* pbGPSInfoMetadata = NULL;
// const unsigned char Zero[0x20] = { 0 };
const unsigned char Zero[sizeof(struct IFDEntry) * sizeof(wmpDEs) / sizeof(wmpDEs[0]) + sizeof(U32)] = { 0 };
assert(SizeofIFDEntry * sizeof(wmpDEs) / sizeof(wmpDEs[0]) + sizeof(U32) > 0x20);
//================
Call(pWS->GetPos(pWS, &offPos));
FailIf(0 != offPos, WMP_errUnsupportedFormat);
//================
// Header (8 bytes)
Call(pWS->Write(pWS, IIMM, sizeof(IIMM))); offPos += 2;
Call(PutUShort(pWS, offPos, 0x01bc)); offPos += 2;
Call(PutULong(pWS, offPos, (U32)OFFSET_OF_PFD)); offPos += 4;
//================
// Write overflow area
pDEMisc->uOffPixelFormat = (U32)offPos;
PI.pGUIDPixFmt = &pIE->guidPixFormat;
PixelFormatLookup(&PI, LOOKUP_FORWARD);
//Call(pWS->Write(pWS, PI.pGUIDPixFmt, sizeof(*PI.pGUIDPixFmt))); offPos += 16;
/** following code is endian-agnostic **/
{
unsigned char *pGuid = (unsigned char *) &pIE->guidPixFormat;
Call(PutULong(pWS, offPos, ((U32 *)pGuid)[0]));
Call(PutUShort(pWS, offPos + 4, ((U16 *)(pGuid + 4))[0]));
Call(PutUShort(pWS, offPos + 6, ((U16 *)(pGuid + 6))[0]));
Call(pWS->Write(pWS, pGuid + 8, 8));
src/Source/LibJXR/jxrgluelib/JXRGlueJxr.c view on Meta::CPAN
if (pIE->cbEXIFMetadataByteCount > 0)
{
pDEMisc->uEXIFMetadataOffset = pDEMisc->uImageOffset;
pDEMisc->uImageOffset += (pDEMisc->uImageOffset & 1);
pDEMisc->uImageOffset += pIE->cbEXIFMetadataByteCount;
}
if (pIE->cbColorContext > 0)
{
pDEMisc->uColorProfileOffset = pDEMisc->uImageOffset;
pDEMisc->uImageOffset += pIE->cbColorContext;
}
if (pIE->cbGPSInfoMetadataByteCount > 0)
{
pDEMisc->uGPSInfoMetadataOffset = pDEMisc->uImageOffset;
pDEMisc->uImageOffset += (pDEMisc->uImageOffset & 1);
pDEMisc->uImageOffset += pIE->cbGPSInfoMetadataByteCount;
}
Call(PutUShort(pWS, offPos, cWmpDEs)); offPos += 2;
Call(pWS->Write(pWS, Zero, SizeofIFDEntry * cWmpDEs + sizeof(U32)));
//================
wmpDE = wmpDEs[i++];
assert(WMP_tagDocumentName == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarDocumentName, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagImageDescription == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarImageDescription, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagCameraMake == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarCameraMake, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagCameraModel == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarCameraModel, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagPageName == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarPageName, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagPageNumber == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarPageNumber, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagSoftware == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarSoftware, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagDateTime == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarDateTime, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagArtist == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarArtist, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagHostComputer == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarHostComputer, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagRatingStars == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarRatingStars, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagRatingValue == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarRatingValue, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagCopyright == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarCopyright, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
wmpDE = wmpDEs[i++];
assert(WMP_tagCaption == wmpDE.uTag);
Call(WriteDescMetadata(pIE, pIE->sDescMetadata.pvarCaption, &wmpDE,
&uiCurrDescMetadataOffset, &offPos));
// XMP Metadata
wmpDE = wmpDEs[i++];
assert(WMP_tagXMPMetadata == wmpDE.uTag);
if (pIE->cbXMPMetadataByteCount > 0)
{
U32 uiTemp;
wmpDE.uCount = pIE->cbXMPMetadataByteCount;
wmpDE.uValueOrOffset = pDEMisc->uXMPMetadataOffset;
Call(WriteWmpDE(pWS, &offPos, &wmpDE, pIE->pbXMPMetadata, &uiTemp));
}
// IPTCNAA Metadata
wmpDE = wmpDEs[i++];
assert(WMP_tagIPTCNAAMetadata == wmpDE.uTag);
if (pIE->cbIPTCNAAMetadataByteCount > 0)
{
U32 uiTemp;
wmpDE.uCount = pIE->cbIPTCNAAMetadataByteCount;
wmpDE.uValueOrOffset = pDEMisc->uIPTCNAAMetadataOffset;
Call(WriteWmpDE(pWS, &offPos, &wmpDE, pIE->pbIPTCNAAMetadata, &uiTemp));
}
// Photoshop Metadata
wmpDE = wmpDEs[i++];
assert(WMP_tagPhotoshopMetadata == wmpDE.uTag);
if (pIE->cbPhotoshopMetadataByteCount > 0)
{
U32 uiTemp;
src/Source/LibJXR/jxrgluelib/JXRGlueJxr.c view on Meta::CPAN
pIE->cbXMPMetadataByteCount = cbTemp;
return ( err );
Cleanup:
PKFree((void **) &pbTemp);
pIE->cbXMPMetadataByteCount = 0;
return err;
}
ERR PKImageEncode_SetEXIFMetadata_WMP(PKImageEncode *pIE, const U8 *pbEXIFMetadata, U32 cbEXIFMetadata)
{
return SetMetadata(pIE, pbEXIFMetadata, cbEXIFMetadata,
&pIE->pbEXIFMetadata, &pIE->cbEXIFMetadataByteCount);
}
ERR PKImageEncode_SetGPSInfoMetadata_WMP(PKImageEncode *pIE, const U8 *pbGPSInfoMetadata, U32 cbGPSInfoMetadata)
{
return SetMetadata(pIE, pbGPSInfoMetadata, cbGPSInfoMetadata,
&pIE->pbGPSInfoMetadata, &pIE->cbGPSInfoMetadataByteCount);
}
ERR PKImageEncode_SetIPTCNAAMetadata_WMP(PKImageEncode *pIE, const U8 *pbIPTCNAAMetadata, U32 cbIPTCNAAMetadata)
{
return SetMetadata(pIE, pbIPTCNAAMetadata, cbIPTCNAAMetadata,
&pIE->pbIPTCNAAMetadata, &pIE->cbIPTCNAAMetadataByteCount);
}
ERR PKImageEncode_SetPhotoshopMetadata_WMP(PKImageEncode *pIE, const U8 *pbPhotoshopMetadata, U32 cbPhotoshopMetadata)
{
return SetMetadata(pIE, pbPhotoshopMetadata, cbPhotoshopMetadata,
&pIE->pbPhotoshopMetadata, &pIE->cbPhotoshopMetadataByteCount);
}
ERR PKImageEncode_SetDescriptiveMetadata_WMP(PKImageEncode *pIE, const DESCRIPTIVEMETADATA *pSrcMeta)
{
ERR err = WMP_errSuccess;
DESCRIPTIVEMETADATA *pDstMeta = &pIE->sDescMetadata;
// Fail if the caller called us after we've already written the header out
if (pIE->fHeaderDone)
{
assert(FALSE); // Message to programmer
FailIf(TRUE, WMP_errOutOfSequence);
}
// Make a copy of the descriptive metadata
Call(CopyDescMetadata(&pDstMeta->pvarImageDescription, pSrcMeta->pvarImageDescription));
Call(CopyDescMetadata(&pDstMeta->pvarCameraMake, pSrcMeta->pvarCameraMake));
Call(CopyDescMetadata(&pDstMeta->pvarCameraModel, pSrcMeta->pvarCameraModel));
Call(CopyDescMetadata(&pDstMeta->pvarSoftware, pSrcMeta->pvarSoftware));
Call(CopyDescMetadata(&pDstMeta->pvarDateTime, pSrcMeta->pvarDateTime));
Call(CopyDescMetadata(&pDstMeta->pvarArtist, pSrcMeta->pvarArtist));
Call(CopyDescMetadata(&pDstMeta->pvarCopyright, pSrcMeta->pvarCopyright));
Call(CopyDescMetadata(&pDstMeta->pvarRatingStars, pSrcMeta->pvarRatingStars));
Call(CopyDescMetadata(&pDstMeta->pvarRatingValue, pSrcMeta->pvarRatingValue));
Call(CopyDescMetadata(&pDstMeta->pvarCaption, pSrcMeta->pvarCaption));
Call(CopyDescMetadata(&pDstMeta->pvarDocumentName, pSrcMeta->pvarDocumentName));
Call(CopyDescMetadata(&pDstMeta->pvarPageName, pSrcMeta->pvarPageName));
Call(CopyDescMetadata(&pDstMeta->pvarPageNumber, pSrcMeta->pvarPageNumber));
Call(CopyDescMetadata(&pDstMeta->pvarHostComputer, pSrcMeta->pvarHostComputer));
Cleanup:
return err;
}
ERR PKImageEncode_WritePixels_WMP(
PKImageEncode* pIE,
U32 cLine,
U8* pbPixels,
U32 cbStride)
{
ERR err = WMP_errSuccess;
// U32 i = 0;
PKPixelInfo PI;
// Performing non-banded encode
assert(BANDEDENCSTATE_UNINITIALIZED == pIE->WMP.eBandedEncState);
pIE->WMP.eBandedEncState = BANDEDENCSTATE_NONBANDEDENCODE;
PI.pGUIDPixFmt = &pIE->guidPixFormat;
PixelFormatLookup(&PI, LOOKUP_FORWARD);
pIE->WMP.bHasAlpha = !!(PI.grBit & PK_pixfmtHasAlpha);
if (!pIE->fHeaderDone)
{
// write metadata
Call(WriteContainerPre(pIE));
pIE->fHeaderDone = !FALSE;
}
/* if (pIE->WMP.bHasAlpha && pIE->WMP.wmiSCP.uAlphaMode == 2){
pIE->WMP.wmiSCP_Alpha = pIE->WMP.wmiSCP;
}
*/
Call(PKImageEncode_EncodeContent(pIE, PI, cLine, pbPixels, cbStride));
if (pIE->WMP.bHasAlpha && pIE->WMP.wmiSCP.uAlphaMode == 2){//planar alpha
Call(PKImageEncode_EncodeAlpha(pIE, PI, cLine, pbPixels, cbStride));
}
Call(WriteContainerPost(pIE));
Cleanup:
return err;
}
ERR PKImageEncode_WritePixelsBandedBegin_WMP(PKImageEncode* pIE, struct WMPStream *pPATempFile)
{
src/Source/LibJXR/jxrgluelib/JXRGlueJxr.c view on Meta::CPAN
// Cue the stream to alpha block
assert(pID->WMP.wmiDEMisc.uAlphaOffset > 0);
Call(pWSDec->SetPos(pWSDec, pID->WMP.wmiDEMisc.uAlphaOffset));
FailIf(ICERR_OK != WMPhotoTranscode(pWSDec, pWSEnc, &tcParamAlpha), WMP_errFail);
Call(pIE->pStream->GetPos(pIE->pStream, &offPos));
pIE->WMP.nCbAlpha = (Long)offPos - pIE->WMP.nOffAlpha;
}
// fixup matadata
Call(WriteContainerPost(pIE));
Cleanup:
return err;
}
ERR PKImageEncode_CreateNewFrame_WMP(
PKImageEncode* pIE,
void* pvParam,
size_t cbParam)
{
ERR err = WMP_errSuccess;
UNREFERENCED_PARAMETER( pIE );
UNREFERENCED_PARAMETER( pvParam );
UNREFERENCED_PARAMETER( cbParam );
Call(WMP_errNotYetImplemented);
Cleanup:
return err;
}
ERR PKImageEncode_Release_WMP(
PKImageEncode** ppIE)
{
ERR err = WMP_errSuccess;
PKImageEncode *pIE = *ppIE;
pIE->pStream->Close(&pIE->pStream);
PKFree((void **) &pIE->pbColorContext);
pIE->cbColorContext = 0;
PKFree((void **) &pIE->pbXMPMetadata);
pIE->cbXMPMetadataByteCount = 0;
PKFree((void **) &pIE->pbEXIFMetadata);
pIE->cbEXIFMetadataByteCount = 0;
PKFree((void **) &pIE->pbGPSInfoMetadata);
pIE->cbGPSInfoMetadataByteCount = 0;
PKFree((void **) &pIE->pbIPTCNAAMetadata);
pIE->cbIPTCNAAMetadataByteCount = 0;
PKFree((void **) &pIE->pbPhotoshopMetadata);
pIE->cbPhotoshopMetadataByteCount = 0;
// Free descriptive metadata
FreeDescMetadata(&pIE->sDescMetadata.pvarImageDescription);
FreeDescMetadata(&pIE->sDescMetadata.pvarCameraMake);
FreeDescMetadata(&pIE->sDescMetadata.pvarCameraModel);
FreeDescMetadata(&pIE->sDescMetadata.pvarSoftware);
FreeDescMetadata(&pIE->sDescMetadata.pvarDateTime);
FreeDescMetadata(&pIE->sDescMetadata.pvarArtist);
FreeDescMetadata(&pIE->sDescMetadata.pvarCopyright);
FreeDescMetadata(&pIE->sDescMetadata.pvarRatingStars);
FreeDescMetadata(&pIE->sDescMetadata.pvarRatingValue);
FreeDescMetadata(&pIE->sDescMetadata.pvarCaption);
FreeDescMetadata(&pIE->sDescMetadata.pvarDocumentName);
FreeDescMetadata(&pIE->sDescMetadata.pvarPageName);
FreeDescMetadata(&pIE->sDescMetadata.pvarPageNumber);
FreeDescMetadata(&pIE->sDescMetadata.pvarHostComputer);
Call(PKFree((void **) ppIE));
Cleanup:
return err;
}
//----------------------------------------------------------------
ERR PKImageEncode_Create_WMP(PKImageEncode** ppIE)
{
ERR err = WMP_errSuccess;
PKImageEncode* pIE = NULL;
Call(PKImageEncode_Create(ppIE));
pIE = *ppIE;
pIE->Initialize = PKImageEncode_Initialize_WMP;
pIE->Terminate = PKImageEncode_Terminate_WMP;
pIE->SetColorContext = PKImageEncode_SetColorContext_WMP;
pIE->SetDescriptiveMetadata = PKImageEncode_SetDescriptiveMetadata_WMP;
pIE->WritePixels = PKImageEncode_WritePixels_WMP;
pIE->WritePixelsBandedBegin = PKImageEncode_WritePixelsBandedBegin_WMP;
pIE->WritePixelsBanded = PKImageEncode_WritePixelsBanded_WMP;
pIE->WritePixelsBandedEnd = PKImageEncode_WritePixelsBandedEnd_WMP;
pIE->Transcode = PKImageEncode_Transcode_WMP;
pIE->CreateNewFrame = PKImageEncode_CreateNewFrame_WMP;
pIE->Release = PKImageEncode_Release_WMP;
pIE->bWMP = TRUE;
Cleanup:
return err;
}
//================================================================
// PKImageDecode_WMP
//================================================================
ERR ParsePFDEntry(
PKImageDecode* pID,
U16 uTag,
U16 uType,
U32 uCount,
U32 uValue)
{
ERR err = WMP_errSuccess;
ERR errTmp = WMP_errSuccess;
PKPixelInfo PI;
struct WMPStream* pWS = pID->pStream;
src/Source/LibJXR/jxrgluelib/JXRGlueJxr.c view on Meta::CPAN
pID->WMP.wmiDEMisc.uColorProfileByteCount = uCount;
pID->WMP.wmiDEMisc.uColorProfileOffset = uValue;
break;
case WMP_tagXMPMetadata:
pID->WMP.wmiDEMisc.uXMPMetadataByteCount = uCount;
pID->WMP.wmiDEMisc.uXMPMetadataOffset = uValue;
break;
case WMP_tagEXIFMetadata:
pID->WMP.wmiDEMisc.uEXIFMetadataOffset = uValue;
CallIgnoreError(errTmp, StreamCalcIFDSize(pWS, uValue, &pID->WMP.wmiDEMisc.uEXIFMetadataByteCount));
break;
case WMP_tagGPSInfoMetadata:
pID->WMP.wmiDEMisc.uGPSInfoMetadataOffset = uValue;
CallIgnoreError(errTmp, StreamCalcIFDSize(pWS, uValue, &pID->WMP.wmiDEMisc.uGPSInfoMetadataByteCount));
break;
case WMP_tagIPTCNAAMetadata:
pID->WMP.wmiDEMisc.uIPTCNAAMetadataByteCount = uCount;
pID->WMP.wmiDEMisc.uIPTCNAAMetadataOffset = uValue;
break;
case WMP_tagPhotoshopMetadata:
pID->WMP.wmiDEMisc.uPhotoshopMetadataByteCount = uCount;
pID->WMP.wmiDEMisc.uPhotoshopMetadataOffset = uValue;
break;
case WMP_tagCompression:
case WMP_tagImageType:
case WMP_tagImageDataDiscard:
case WMP_tagAlphaDataDiscard:
break;
// Descriptive Metadata
case WMP_tagImageDescription:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarImageDescription));
assert(DPKVT_LPSTR == pID->WMP.sDescMetadata.pvarImageDescription.vt);
break;
case WMP_tagCameraMake:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarCameraMake));
assert(DPKVT_LPSTR == pID->WMP.sDescMetadata.pvarCameraMake.vt);
break;
case WMP_tagCameraModel:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarCameraModel));
assert(DPKVT_LPSTR == pID->WMP.sDescMetadata.pvarCameraModel.vt);
break;
case WMP_tagSoftware:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarSoftware));
assert(DPKVT_LPSTR == pID->WMP.sDescMetadata.pvarSoftware.vt);
break;
case WMP_tagDateTime:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarDateTime));
assert(DPKVT_LPSTR == pID->WMP.sDescMetadata.pvarDateTime.vt);
break;
case WMP_tagArtist:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarArtist));
assert(DPKVT_LPSTR == pID->WMP.sDescMetadata.pvarArtist.vt);
break;
case WMP_tagCopyright:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarCopyright));
assert(DPKVT_LPSTR == pID->WMP.sDescMetadata.pvarCopyright.vt);
break;
case WMP_tagRatingStars:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarRatingStars));
assert(DPKVT_UI2 == pID->WMP.sDescMetadata.pvarRatingStars.vt);
break;
case WMP_tagRatingValue:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarRatingValue));
assert(DPKVT_UI2 == pID->WMP.sDescMetadata.pvarRatingValue.vt);
break;
case WMP_tagCaption:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarCaption));
assert((DPKVT_BYREF | DPKVT_UI1) == pID->WMP.sDescMetadata.pvarCaption.vt);
// Change type from C-style byte array to LPWSTR
assert((U8*)pID->WMP.sDescMetadata.pvarCaption.VT.pwszVal ==
pID->WMP.sDescMetadata.pvarCaption.VT.pbVal);
assert(0 == pID->WMP.sDescMetadata.pvarCaption.VT.pwszVal[uCount/sizeof(U16) - 1]); // Confirm null-term
// make sure null term (ReadPropvar allocated enough space for this)
pID->WMP.sDescMetadata.pvarCaption.VT.pwszVal[uCount/sizeof(U16)] = 0;
pID->WMP.sDescMetadata.pvarCaption.vt = DPKVT_LPWSTR;
break;
case WMP_tagDocumentName:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarDocumentName));
assert(DPKVT_LPSTR == pID->WMP.sDescMetadata.pvarDocumentName.vt);
break;
case WMP_tagPageName:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarPageName));
assert(DPKVT_LPSTR == pID->WMP.sDescMetadata.pvarPageName.vt);
break;
case WMP_tagPageNumber:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
&pID->WMP.sDescMetadata.pvarPageNumber));
assert(DPKVT_UI4 == pID->WMP.sDescMetadata.pvarPageNumber.vt);
break;
case WMP_tagHostComputer:
CallIgnoreError(errTmp, ReadPropvar(pWS, uType, uCount, uValue,
src/Source/LibJXR/jxrgluelib/JXRGlueJxr.c view on Meta::CPAN
ERR PKImageDecode_GetMetadata_WMP(PKImageDecode *pID, U32 uOffset, U32 uByteCount, U8 *pbGot, U32 *pcbGot)
{
ERR err = WMP_errSuccess;
if (pbGot && uOffset)
{
struct WMPStream* pWS = pID->pStream;
size_t iCurrPos;
FailIf(*pcbGot < uByteCount, WMP_errBufferOverflow);
Call(pWS->GetPos(pWS, &iCurrPos));
Call(pWS->SetPos(pWS, uOffset));
Call(pWS->Read(pWS, pbGot, uByteCount));
Call(pWS->SetPos(pWS, iCurrPos));
}
Cleanup:
if (Failed(err))
*pcbGot = 0;
else
*pcbGot = uByteCount;
return err;
}
ERR PKImageDecode_GetColorContext_WMP(PKImageDecode *pID, U8 *pbColorContext, U32 *pcbColorContext)
{
return PKImageDecode_GetMetadata_WMP(pID, pID->WMP.wmiDEMisc.uColorProfileOffset,
pID->WMP.wmiDEMisc.uColorProfileByteCount, pbColorContext, pcbColorContext);
}
ERR PKImageDecode_GetDescriptiveMetadata_WMP(PKImageDecode *pID, DESCRIPTIVEMETADATA *pDescMetadata)
{
ERR err = WMP_errSuccess;
*pDescMetadata = pID->WMP.sDescMetadata;
return err;
}
ERR PKImageDecode_Release_WMP(PKImageDecode** ppID)
{
ERR err = WMP_errSuccess;
PKImageDecode *pID;
if (NULL == ppID)
goto Cleanup;
pID = *ppID;
// Free descriptive metadata
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarImageDescription);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarCameraMake);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarCameraModel);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarSoftware);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarDateTime);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarArtist);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarCopyright);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarRatingStars);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarRatingValue);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarCaption);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarDocumentName);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarPageName);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarPageNumber);
FreeDescMetadata(&pID->WMP.sDescMetadata.pvarHostComputer);
// Release base class
Call(PKImageDecode_Release(ppID));
Cleanup:
return err;
}
ERR PKImageDecode_Create_WMP(PKImageDecode** ppID)
{
ERR err = WMP_errSuccess;
PKImageDecode* pID = NULL;
Call(PKImageDecode_Create(ppID));
pID = *ppID;
pID->Initialize = PKImageDecode_Initialize_WMP;
pID->GetSize = PKImageDecode_GetSize_WMP;
pID->GetRawStream = PKImageDecode_GetRawStream_WMP;
pID->Copy = PKImageDecode_Copy_WMP;
pID->GetColorContext = PKImageDecode_GetColorContext_WMP;
pID->GetDescriptiveMetadata = PKImageDecode_GetDescriptiveMetadata_WMP;
pID->Release = PKImageDecode_Release_WMP;
Cleanup:
return err;
}
( run in 0.357 second using v1.01-cache-2.11-cpan-5623c5533a1 )