Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
	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;
	}
Esempio n. 4
0
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;
}