Alien-FreeImage
view release on metacpan or search on metacpan
src/Source/LibJXR/jxrgluelib/JXRGlueJxr.c view on Meta::CPAN
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,
&pID->WMP.sDescMetadata.pvarHostComputer));
assert(DPKVT_LPSTR == pID->WMP.sDescMetadata.pvarHostComputer.vt);
break;
default:
fprintf(stderr, "Unrecognized WMPTag: %d(%#x), %d, %d, %#x" CRLF,
(int)uTag, (int)uTag, (int)uType, (int)uCount, (int)uValue);
break;
}
Cleanup:
return err;
}
ERR ParsePFD(
PKImageDecode* pID,
size_t offPos,
U16 cEntry)
{
ERR err = WMP_errSuccess;
struct WMPStream* pWS = pID->pStream;
U16 i = 0;
for (i = 0; i < cEntry; ++i)
{
U16 uTag = 0;
U16 uType = 0;
U32 uCount = 0;
U32 uValue = 0;
Call(GetUShort(pWS, offPos, &uTag)); offPos += 2;
Call(GetUShort(pWS, offPos, &uType)); offPos += 2;
Call(GetULong(pWS, offPos, &uCount)); offPos += 4;
Call(GetULong(pWS, offPos, &uValue)); offPos += 4;
Call(ParsePFDEntry(pID, uTag, uType, uCount, uValue));
}
pID->WMP.bHasAlpha = ((pID->WMP.bHasAlpha) && (pID->WMP.wmiDEMisc.uAlphaOffset != 0) && (pID->WMP.wmiDEMisc.uAlphaByteCount != 0));//has planar alpha
Cleanup:
return err;
}
ERR ReadContainer(
PKImageDecode* pID)
{
ERR err = WMP_errSuccess;
struct WMPStream* pWS = pID->pStream;
size_t offPos = 0;
char szSig[2] = {0};
U16 uWmpID = 0;
U32 offPFD = 0;
U16 cPFDEntry = 0;
U8 bVersion;
//================================
Call(pWS->GetPos(pWS, &offPos));
FailIf(0 != offPos, WMP_errUnsupportedFormat);
//================================
// Header
Call(pWS->Read(pWS, szSig, sizeof(szSig))); offPos += 2;
FailIf(szSig != strstr(szSig, "II"), WMP_errUnsupportedFormat);
( run in 0.665 second using v1.01-cache-2.11-cpan-63c85eba8c4 )