Alien-FreeImage
view release on metacpan or search on metacpan
src/Source/LibJXR/jxrgluelib/JXRGlueJxr.c view on Meta::CPAN
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);
Call(GetUShort(pWS, offPos, &uWmpID)); offPos += 2;
FailIf(WMP_valWMPhotoID != (0x00FF & uWmpID), WMP_errUnsupportedFormat);
// We accept version 00 and version 01 bitstreams - all others rejected
bVersion = (0xFF00 & uWmpID) >> 8;
FailIf(bVersion != 0 && bVersion != 1, WMP_errUnsupportedFormat);
Call(GetULong(pWS, offPos, &offPFD)); offPos += 4;
//================================
// PFD
offPos = (size_t)offPFD;
Call(GetUShort(pWS, offPos, &cPFDEntry)); offPos += 2;
FailIf(0 == cPFDEntry || USHRT_MAX == cPFDEntry, WMP_errUnsupportedFormat);
Call(ParsePFD(pID, offPos, cPFDEntry));
//================================
Call(pWS->SetPos(pWS, pID->WMP.wmiDEMisc.uImageOffset));
Cleanup:
return err;
}
//================================================
ERR PKImageDecode_Initialize_WMP(
PKImageDecode* pID,
struct WMPStream* pWS)
{
ERR err = WMP_errSuccess;
CWMImageInfo* pII = NULL;
//================================
Call(PKImageDecode_Initialize(pID, pWS));
//================================
Call(ReadContainer(pID));
//================================
pID->WMP.wmiSCP.pWStream = pWS;
pID->WMP.DecoderCurrMBRow = 0;
pID->WMP.cLinesDecoded = 0;
pID->WMP.cLinesCropped = 0;
pID->WMP.fFirstNonZeroDecode = FALSE;
FailIf(ICERR_OK != ImageStrDecGetInfo(&pID->WMP.wmiI, &pID->WMP.wmiSCP), WMP_errFail);
assert(Y_ONLY <= pID->WMP.wmiSCP.cfColorFormat && pID->WMP.wmiSCP.cfColorFormat < CFT_MAX);
assert(BD_SHORT == pID->WMP.wmiSCP.bdBitDepth || BD_LONG == pID->WMP.wmiSCP.bdBitDepth);
// If HD Photo container provided an orientation, this should override bitstream orientation
// If container did NOT provide an orientation, force O_NONE. This is to be consistent with
// Vista behaviour, which is to ignore bitstream orientation (only looks at container).
if (pID->WMP.fOrientationFromContainer)
{
pID->WMP.wmiI.oOrientation = pID->WMP.oOrientationFromContainer;
}
else
{
// Force to O_NONE to match Vista decode behaviour
pID->WMP.wmiI.oOrientation = O_NONE;
}
pII = &pID->WMP.wmiI;
pID->uWidth = (U32)pII->cWidth;
pID->uHeight = (U32)pII->cHeight;
Cleanup:
return err;
}
ERR PKImageDecode_GetSize_WMP(
PKImageDecode* pID,
I32* piWidth,
I32* piHeight)
{
if (pID->WMP.wmiI.oOrientation >= O_RCW)
{
*piWidth = (I32)pID->uHeight;
*piHeight = (I32)pID->uWidth;
}
else
{
*piWidth = (I32)pID->uWidth;
*piHeight = (I32)pID->uHeight;
}
return WMP_errSuccess;
}
ERR PKImageDecode_GetRawStream_WMP(
PKImageDecode* pID,
struct WMPStream** ppWS)
{
ERR err = WMP_errSuccess;
struct WMPStream* pWS = pID->pStream;
*ppWS = NULL;
Call(pWS->SetPos(pWS, pID->WMP.wmiDEMisc.uImageOffset));
*ppWS = pWS;
Cleanup:
return err;
}
ERR PKImageDecode_Copy_WMP(
PKImageDecode* pID,
const PKRect* pRect,
U8* pb,
U32 cbStride)
{
ERR err = WMP_errSuccess;
( run in 0.631 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )