STDMETHODIMP AitEncoder::Initialize(IStream *pIStream, WICBitmapEncoderCacheOption cacheOption) { HRESULT result = E_INVALIDARG; if (pIStream) { result = S_OK; stream = pIStream; if (SUCCEEDED(result)) { result = VerifyFactory(); } // Remember the position of the header for later reference if (SUCCEEDED(result)) { LARGE_INTEGER zero = { 0 }; result = stream->Seek(zero, STREAM_SEEK_CUR, &headerPos); } // Write the header with a placeholder for the number of frames if (SUCCEEDED(result)) { BeginBlock(stream, "AIT", 0xFFFFFFFF); OutputValue(stream, (UINT)0); result = EndBlock(stream); } } return result; }
STDMETHODIMP BaseEncoder::GetEncoderInfo(IWICBitmapEncoderInfo **ppIEncoderInfo) { HRESULT result = S_OK; IWICComponentInfo *compInfo = NULL; if (SUCCEEDED(result)) { result = VerifyFactory(); } if (SUCCEEDED(result)) { result = factory->CreateComponentInfo(CLSID_This, &compInfo); } if (SUCCEEDED(result)) { result = compInfo->QueryInterface(IID_IWICBitmapEncoderInfo, (void**)ppIEncoderInfo); } if (compInfo) { compInfo->Release(); } return result; }
STDMETHODIMP PVR_Decoder::Initialize( IStream *pIStream, WICDecodeOptions cacheOptions ) { UNREFERENCED_PARAMETER( cacheOptions ); HRESULT result = E_INVALIDARG; ReleaseMembers( true ); if ( pIStream ) { PVR_Texture_Header pvrHeader; result = ReadFromIStream( pIStream, pvrHeader ); // read header if ( SUCCEEDED( result )) result = VerifyFactory(); if ( SUCCEEDED( result )) { if (((pvrHeader.dwpfFlags & PVRTEX_PIXELTYPE) != OGL_PVRTC2) && ((pvrHeader.dwpfFlags & PVRTEX_PIXELTYPE) != OGL_PVRTC4)) { result = E_INVALIDARG; } else { PVR_FrameDecode* frame = CreateNewDecoderFrame( m_factory, 0 ); result = frame->LoadImage( pvrHeader, pIStream ); if ( SUCCEEDED( result )) AddDecoderFrame( frame ); else delete frame; } } } else result = E_INVALIDARG; return result; }
STDMETHODIMP BaseEncoder::CreateNewFrame(IWICBitmapFrameEncode **ppIFrameEncode, IPropertyBag2 **ppIEncoderOptions) { HRESULT result = E_UNEXPECTED; if (stream) { BaseFrameEncode *frameEncode = NULL; result = S_OK; if (NULL == ppIFrameEncode) { result = E_INVALIDARG; } if (SUCCEEDED(result)) { result = VerifyFactory(); } if (SUCCEEDED(result)) { frameEncode = CreateNewEncoderFrame(factory, stream, frames.size()); if (NULL == frameEncode) { result = E_OUTOFMEMORY; } } if (SUCCEEDED(result)) { AddEncoderFrame(frameEncode); result = frameEncode->QueryInterface(IID_IWICBitmapFrameEncode, (void**)ppIFrameEncode); } if (ppIEncoderOptions != NULL) { *ppIEncoderOptions = NULL; } } return result; }