* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
+#include <stdarg.h>
+#include <stdio.h>
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "wincodec.h"
+#include "wine/test.h"
HRESULT WINAPI WICCreateImagingFactory_Proxy(UINT, IWICImagingFactory**);
IStream_Release(stream);
}
+/* 1x1 pixel gif, missing trailer */
+static unsigned char gifimage_notrailer[] = {
+0x47,0x49,0x46,0x38,0x37,0x61,0x01,0x00,0x01,0x00,0x80,0x00,0x71,0xff,0xff,0xff,
+0xff,0xff,0xff,0x2c,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x02,0x02,0x44,
+0x01,0x00
+};
+
+static void test_gif_notrailer(void)
+{
+ IWICBitmapDecoder *decoder;
+ IWICImagingFactory *factory;
+ HRESULT hr;
+ IWICStream *gifstream;
+ IWICBitmapFrameDecode *framedecode;
+ double dpiX = 0.0, dpiY = 0.0;
+ UINT framecount;
+
+ hr = CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IWICImagingFactory, (void**)&factory);
+ ok(hr == S_OK, "CoCreateInstance failed, hr=%x\n", hr);
+ if (FAILED(hr)) return;
+
+ hr = IWICImagingFactory_CreateStream(factory, &gifstream);
+ ok(hr == S_OK, "CreateStream failed, hr=%x\n", hr);
+ if (SUCCEEDED(hr))
+ {
+ hr = IWICStream_InitializeFromMemory(gifstream, gifimage_notrailer,
+ sizeof(gifimage_notrailer));
+ ok(hr == S_OK, "InitializeFromMemory failed, hr=%x\n", hr);
+
+ if (SUCCEEDED(hr))
+ {
+ hr = CoCreateInstance(&CLSID_WICGifDecoder, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IWICBitmapDecoder, (void**)&decoder);
+ ok(hr == S_OK, "CoCreateInstance failed, hr=%x\n", hr);
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ hr = IWICBitmapDecoder_Initialize(decoder, (IStream*)gifstream,
+ WICDecodeMetadataCacheOnDemand);
+ ok(hr == S_OK, "Initialize failed, hr=%x\n", hr);
+
+ if (SUCCEEDED(hr))
+ {
+ hr = IWICBitmapDecoder_GetFrame(decoder, 0, &framedecode);
+ ok(hr == S_OK, "GetFrame failed, hr=%x\n", hr);
+ if (SUCCEEDED(hr))
+ {
+ hr = IWICBitmapFrameDecode_GetResolution(framedecode, &dpiX, &dpiY);
+ ok(SUCCEEDED(hr), "GetResolution failed, hr=%x\n", hr);
+ ok(dpiX == 48.0, "expected dpiX=48.0, got %f\n", dpiX);
+ ok(dpiY == 96.0, "expected dpiY=96.0, got %f\n", dpiY);
+
+ IWICBitmapFrameDecode_Release(framedecode);
+ }
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ hr = IWICBitmapDecoder_GetFrameCount(decoder, &framecount);
+ ok(hr == S_OK, "GetFrameCount failed, hr=%x\n", hr);
+ ok(framecount == 1, "framecount=%u\n", framecount);
+ }
+
+ IWICBitmapDecoder_Release(decoder);
+ }
+
+ IWICStream_Release(gifstream);
+ }
+
+ IWICImagingFactory_Release(factory);
+}
+
START_TEST(gifformat)
{
HRESULT hr;
test_global_gif_palette_2frames();
test_local_gif_palette();
test_gif_frame_sizes();
+ test_gif_notrailer();
IWICImagingFactory_Release(factory);
CoUninitialize();