ReactOS 0.4.15-dev-7834-g00c4b3d
icnsformat.c
Go to the documentation of this file.
1/*
2 * Copyright 2010 Damjan Jovanovic
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#include "config.h"
20#include "wine/port.h"
21
22#include <stdarg.h>
23
24#ifdef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
25#define GetCurrentProcess GetCurrentProcess_Mac
26#define GetCurrentThread GetCurrentThread_Mac
27#define LoadResource LoadResource_Mac
28#define AnimatePalette AnimatePalette_Mac
29#define EqualRgn EqualRgn_Mac
30#define FillRgn FillRgn_Mac
31#define FrameRgn FrameRgn_Mac
32#define GetPixel GetPixel_Mac
33#define InvertRgn InvertRgn_Mac
34#define LineTo LineTo_Mac
35#define OffsetRgn OffsetRgn_Mac
36#define PaintRgn PaintRgn_Mac
37#define Polygon Polygon_Mac
38#define ResizePalette ResizePalette_Mac
39#define SetRectRgn SetRectRgn_Mac
40#define EqualRect EqualRect_Mac
41#define FillRect FillRect_Mac
42#define FrameRect FrameRect_Mac
43#define GetCursor GetCursor_Mac
44#define InvertRect InvertRect_Mac
45#define OffsetRect OffsetRect_Mac
46#define PtInRect PtInRect_Mac
47#define SetCursor SetCursor_Mac
48#define SetRect SetRect_Mac
49#define ShowCursor ShowCursor_Mac
50#define UnionRect UnionRect_Mac
51#include <ApplicationServices/ApplicationServices.h>
52#undef GetCurrentProcess
53#undef GetCurrentThread
54#undef LoadResource
55#undef AnimatePalette
56#undef EqualRgn
57#undef FillRgn
58#undef FrameRgn
59#undef GetPixel
60#undef InvertRgn
61#undef LineTo
62#undef OffsetRgn
63#undef PaintRgn
64#undef Polygon
65#undef ResizePalette
66#undef SetRectRgn
67#undef EqualRect
68#undef FillRect
69#undef FrameRect
70#undef GetCursor
71#undef InvertRect
72#undef OffsetRect
73#undef PtInRect
74#undef SetCursor
75#undef SetRect
76#undef ShowCursor
77#undef UnionRect
78#endif
79
80#define COBJMACROS
81
82#include "windef.h"
83#include "winbase.h"
84#include "objbase.h"
85
86#include "wincodecs_private.h"
87
88#include "wine/debug.h"
89#include "wine/library.h"
90
92
93#if defined(HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H) && \
94 MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_4
95
96typedef struct IcnsEncoder {
97 IWICBitmapEncoder IWICBitmapEncoder_iface;
98 LONG ref;
100 IconFamilyHandle icns_family;
101 BOOL any_frame_committed;
102 int outstanding_commits;
103 BOOL committed;
105} IcnsEncoder;
106
107static inline IcnsEncoder *impl_from_IWICBitmapEncoder(IWICBitmapEncoder *iface)
108{
109 return CONTAINING_RECORD(iface, IcnsEncoder, IWICBitmapEncoder_iface);
110}
111
112typedef struct IcnsFrameEncode {
113 IWICBitmapFrameEncode IWICBitmapFrameEncode_iface;
114 IcnsEncoder *encoder;
115 LONG ref;
117 UINT size;
118 OSType icns_type;
119 BYTE* icns_image;
120 int lines_written;
121 BOOL committed;
122} IcnsFrameEncode;
123
124static inline IcnsFrameEncode *impl_from_IWICBitmapFrameEncode(IWICBitmapFrameEncode *iface)
125{
126 return CONTAINING_RECORD(iface, IcnsFrameEncode, IWICBitmapFrameEncode_iface);
127}
128
129static HRESULT WINAPI IcnsFrameEncode_QueryInterface(IWICBitmapFrameEncode *iface, REFIID iid,
130 void **ppv)
131{
132 IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
133 TRACE("(%p,%s,%p)\n", iface, debugstr_guid(iid), ppv);
134
135 if (!ppv) return E_INVALIDARG;
136
137 if (IsEqualIID(&IID_IUnknown, iid) ||
138 IsEqualIID(&IID_IWICBitmapFrameEncode, iid))
139 {
140 *ppv = &This->IWICBitmapFrameEncode_iface;
141 }
142 else
143 {
144 *ppv = NULL;
145 return E_NOINTERFACE;
146 }
147
148 IUnknown_AddRef((IUnknown*)*ppv);
149 return S_OK;
150}
151
152static ULONG WINAPI IcnsFrameEncode_AddRef(IWICBitmapFrameEncode *iface)
153{
154 IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
156
157 TRACE("(%p) refcount=%u\n", iface, ref);
158
159 return ref;
160}
161
162static ULONG WINAPI IcnsFrameEncode_Release(IWICBitmapFrameEncode *iface)
163{
164 IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
166
167 TRACE("(%p) refcount=%u\n", iface, ref);
168
169 if (ref == 0)
170 {
171 if (!This->committed)
172 {
173 EnterCriticalSection(&This->encoder->lock);
174 This->encoder->outstanding_commits--;
175 LeaveCriticalSection(&This->encoder->lock);
176 }
177 HeapFree(GetProcessHeap(), 0, This->icns_image);
178
179 IWICBitmapEncoder_Release(&This->encoder->IWICBitmapEncoder_iface);
181 }
182
183 return ref;
184}
185
186static HRESULT WINAPI IcnsFrameEncode_Initialize(IWICBitmapFrameEncode *iface,
187 IPropertyBag2 *pIEncoderOptions)
188{
189 IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
190 HRESULT hr = S_OK;
191
192 TRACE("(%p,%p)\n", iface, pIEncoderOptions);
193
194 EnterCriticalSection(&This->encoder->lock);
195
196 if (This->initialized)
197 {
199 goto end;
200 }
201 This->initialized = TRUE;
202
203end:
204 LeaveCriticalSection(&This->encoder->lock);
205 return hr;
206}
207
208static HRESULT WINAPI IcnsFrameEncode_SetSize(IWICBitmapFrameEncode *iface,
209 UINT uiWidth, UINT uiHeight)
210{
211 IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
212 HRESULT hr = S_OK;
213
214 TRACE("(%p,%u,%u)\n", iface, uiWidth, uiHeight);
215
216 EnterCriticalSection(&This->encoder->lock);
217
218 if (!This->initialized || This->icns_image)
219 {
221 goto end;
222 }
223
224 if (uiWidth != uiHeight)
225 {
226 WARN("cannot generate ICNS icon from %dx%d image\n", uiWidth, uiHeight);
228 goto end;
229 }
230
231 switch (uiWidth)
232 {
233 case 16:
234 case 32:
235 case 48:
236 case 128:
237 case 256:
238 case 512:
239 break;
240 default:
241 WARN("cannot generate ICNS icon from %dx%d image\n", This->size, This->size);
243 goto end;
244 }
245
246 This->size = uiWidth;
247
248end:
249 LeaveCriticalSection(&This->encoder->lock);
250 return hr;
251}
252
253static HRESULT WINAPI IcnsFrameEncode_SetResolution(IWICBitmapFrameEncode *iface,
254 double dpiX, double dpiY)
255{
256 IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
257 HRESULT hr = S_OK;
258
259 TRACE("(%p,%0.2f,%0.2f)\n", iface, dpiX, dpiY);
260
261 EnterCriticalSection(&This->encoder->lock);
262
263 if (!This->initialized || This->icns_image)
264 {
266 goto end;
267 }
268
269end:
270 LeaveCriticalSection(&This->encoder->lock);
271 return S_OK;
272}
273
274static HRESULT WINAPI IcnsFrameEncode_SetPixelFormat(IWICBitmapFrameEncode *iface,
275 WICPixelFormatGUID *pPixelFormat)
276{
277 IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
278 HRESULT hr = S_OK;
279
280 TRACE("(%p,%s)\n", iface, debugstr_guid(pPixelFormat));
281
282 EnterCriticalSection(&This->encoder->lock);
283
284 if (!This->initialized || This->icns_image)
285 {
287 goto end;
288 }
289
290 memcpy(pPixelFormat, &GUID_WICPixelFormat32bppBGRA, sizeof(GUID));
291
292end:
293 LeaveCriticalSection(&This->encoder->lock);
294 return S_OK;
295}
296
297static HRESULT WINAPI IcnsFrameEncode_SetColorContexts(IWICBitmapFrameEncode *iface,
298 UINT cCount, IWICColorContext **ppIColorContext)
299{
300 FIXME("(%p,%u,%p): stub\n", iface, cCount, ppIColorContext);
301 return E_NOTIMPL;
302}
303
304static HRESULT WINAPI IcnsFrameEncode_SetPalette(IWICBitmapFrameEncode *iface,
305 IWICPalette *pIPalette)
306{
307 FIXME("(%p,%p): stub\n", iface, pIPalette);
309}
310
311static HRESULT WINAPI IcnsFrameEncode_SetThumbnail(IWICBitmapFrameEncode *iface,
312 IWICBitmapSource *pIThumbnail)
313{
314 FIXME("(%p,%p): stub\n", iface, pIThumbnail);
316}
317
318static HRESULT WINAPI IcnsFrameEncode_WritePixels(IWICBitmapFrameEncode *iface,
319 UINT lineCount, UINT cbStride, UINT cbBufferSize, BYTE *pbPixels)
320{
321 IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
322 HRESULT hr = S_OK;
323 UINT i;
324
325 TRACE("(%p,%u,%u,%u,%p)\n", iface, lineCount, cbStride, cbBufferSize, pbPixels);
326
327 EnterCriticalSection(&This->encoder->lock);
328
329 if (!This->initialized || !This->size)
330 {
332 goto end;
333 }
334 if (lineCount == 0 || lineCount + This->lines_written > This->size)
335 {
337 goto end;
338 }
339
340 if (!This->icns_image)
341 {
342 switch (This->size)
343 {
344 case 16: This->icns_type = kIconServices16PixelDataARGB; break;
345 case 32: This->icns_type = kIconServices32PixelDataARGB; break;
346 case 48: This->icns_type = kIconServices48PixelDataARGB; break;
347 case 128: This->icns_type = kIconServices128PixelDataARGB; break;
348 case 256: This->icns_type = kIconServices256PixelDataARGB; break;
349 case 512: This->icns_type = kIconServices512PixelDataARGB; break;
350 default:
351 WARN("cannot generate ICNS icon from %dx%d image\n", This->size, This->size);
353 goto end;
354 }
355 This->icns_image = HeapAlloc(GetProcessHeap(), 0, This->size * This->size * 4);
356 if (!This->icns_image)
357 {
358 WARN("failed to allocate image buffer\n");
359 hr = E_FAIL;
360 goto end;
361 }
362 }
363
364 for (i = 0; i < lineCount; i++)
365 {
366 BYTE *src_row, *dst_row;
367 UINT j;
368 src_row = pbPixels + cbStride * i;
369 dst_row = This->icns_image + (This->lines_written + i)*(This->size*4);
370 /* swap bgr -> rgb */
371 for (j = 0; j < This->size*4; j += 4)
372 {
373 dst_row[j] = src_row[j+3];
374 dst_row[j+1] = src_row[j+2];
375 dst_row[j+2] = src_row[j+1];
376 dst_row[j+3] = src_row[j];
377 }
378 }
379 This->lines_written += lineCount;
380
381end:
382 LeaveCriticalSection(&This->encoder->lock);
383 return hr;
384}
385
386static HRESULT WINAPI IcnsFrameEncode_WriteSource(IWICBitmapFrameEncode *iface,
387 IWICBitmapSource *pIBitmapSource, WICRect *prc)
388{
389 IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
390 HRESULT hr;
391
392 TRACE("(%p,%p,%s)\n", iface, pIBitmapSource, debug_wic_rect(prc));
393
394 if (!This->initialized)
396
397 hr = configure_write_source(iface, pIBitmapSource, prc,
398 &GUID_WICPixelFormat32bppBGRA, This->size, This->size,
399 1.0, 1.0);
400
401 if (SUCCEEDED(hr))
402 {
403 hr = write_source(iface, pIBitmapSource, prc,
404 &GUID_WICPixelFormat32bppBGRA, 32, This->size, This->size);
405 }
406
407 return hr;
408}
409
410static HRESULT WINAPI IcnsFrameEncode_Commit(IWICBitmapFrameEncode *iface)
411{
412 IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
414 OSErr ret;
415 HRESULT hr = S_OK;
416
417 TRACE("(%p)\n", iface);
418
419 EnterCriticalSection(&This->encoder->lock);
420
421 if (!This->icns_image || This->lines_written != This->size || This->committed)
422 {
424 goto end;
425 }
426
427 ret = PtrToHand(This->icns_image, &handle, This->size * This->size * 4);
428 if (ret != noErr || !handle)
429 {
430 WARN("PtrToHand failed with error %d\n", ret);
431 hr = E_FAIL;
432 goto end;
433 }
434
435 ret = SetIconFamilyData(This->encoder->icns_family, This->icns_type, handle);
436 DisposeHandle(handle);
437
438 if (ret != noErr)
439 {
440 WARN("SetIconFamilyData failed for image with error %d\n", ret);
441 hr = E_FAIL;
442 goto end;
443 }
444
445 This->committed = TRUE;
446 This->encoder->any_frame_committed = TRUE;
447 This->encoder->outstanding_commits--;
448
449end:
450 LeaveCriticalSection(&This->encoder->lock);
451 return hr;
452}
453
454static HRESULT WINAPI IcnsFrameEncode_GetMetadataQueryWriter(IWICBitmapFrameEncode *iface,
455 IWICMetadataQueryWriter **ppIMetadataQueryWriter)
456{
457 FIXME("(%p, %p): stub\n", iface, ppIMetadataQueryWriter);
458 return E_NOTIMPL;
459}
460
461static const IWICBitmapFrameEncodeVtbl IcnsEncoder_FrameVtbl = {
462 IcnsFrameEncode_QueryInterface,
463 IcnsFrameEncode_AddRef,
464 IcnsFrameEncode_Release,
465 IcnsFrameEncode_Initialize,
466 IcnsFrameEncode_SetSize,
467 IcnsFrameEncode_SetResolution,
468 IcnsFrameEncode_SetPixelFormat,
469 IcnsFrameEncode_SetColorContexts,
470 IcnsFrameEncode_SetPalette,
471 IcnsFrameEncode_SetThumbnail,
472 IcnsFrameEncode_WritePixels,
473 IcnsFrameEncode_WriteSource,
474 IcnsFrameEncode_Commit,
475 IcnsFrameEncode_GetMetadataQueryWriter
476};
477
478static HRESULT WINAPI IcnsEncoder_QueryInterface(IWICBitmapEncoder *iface, REFIID iid,
479 void **ppv)
480{
481 IcnsEncoder *This = impl_from_IWICBitmapEncoder(iface);
482 TRACE("(%p,%s,%p)\n", iface, debugstr_guid(iid), ppv);
483
484 if (!ppv) return E_INVALIDARG;
485
486 if (IsEqualIID(&IID_IUnknown, iid) ||
487 IsEqualIID(&IID_IWICBitmapEncoder, iid))
488 {
489 *ppv = &This->IWICBitmapEncoder_iface;
490 }
491 else
492 {
493 *ppv = NULL;
494 return E_NOINTERFACE;
495 }
496
497 IUnknown_AddRef((IUnknown*)*ppv);
498 return S_OK;
499}
500
501static ULONG WINAPI IcnsEncoder_AddRef(IWICBitmapEncoder *iface)
502{
503 IcnsEncoder *This = impl_from_IWICBitmapEncoder(iface);
505
506 TRACE("(%p) refcount=%u\n", iface, ref);
507
508 return ref;
509}
510
511static ULONG WINAPI IcnsEncoder_Release(IWICBitmapEncoder *iface)
512{
513 IcnsEncoder *This = impl_from_IWICBitmapEncoder(iface);
515
516 TRACE("(%p) refcount=%u\n", iface, ref);
517
518 if (ref == 0)
519 {
520 This->lock.DebugInfo->Spare[0] = 0;
522 if (This->icns_family)
523 DisposeHandle((Handle)This->icns_family);
524 if (This->stream)
525 IStream_Release(This->stream);
527 }
528
529 return ref;
530}
531
532static HRESULT WINAPI IcnsEncoder_Initialize(IWICBitmapEncoder *iface,
533 IStream *pIStream, WICBitmapEncoderCacheOption cacheOption)
534{
535 IcnsEncoder *This = impl_from_IWICBitmapEncoder(iface);
536 HRESULT hr = S_OK;
537
538 TRACE("(%p,%p,%u)\n", iface, pIStream, cacheOption);
539
541
542 if (This->icns_family)
543 {
545 goto end;
546 }
547 This->icns_family = (IconFamilyHandle)NewHandle(0);
548 if (!This->icns_family)
549 {
550 WARN("error creating icns family\n");
551 hr = E_FAIL;
552 goto end;
553 }
554 IStream_AddRef(pIStream);
555 This->stream = pIStream;
556
557end:
559
560 return hr;
561}
562
563static HRESULT WINAPI IcnsEncoder_GetContainerFormat(IWICBitmapEncoder *iface,
564 GUID *pguidContainerFormat)
565{
566 FIXME("(%p,%s): stub\n", iface, debugstr_guid(pguidContainerFormat));
567 return E_NOTIMPL;
568}
569
570static HRESULT WINAPI IcnsEncoder_GetEncoderInfo(IWICBitmapEncoder *iface,
571 IWICBitmapEncoderInfo **ppIEncoderInfo)
572{
573 FIXME("(%p,%p): stub\n", iface, ppIEncoderInfo);
574 return E_NOTIMPL;
575}
576
577static HRESULT WINAPI IcnsEncoder_SetColorContexts(IWICBitmapEncoder *iface,
578 UINT cCount, IWICColorContext **ppIColorContext)
579{
580 FIXME("(%p,%u,%p): stub\n", iface, cCount, ppIColorContext);
581 return E_NOTIMPL;
582}
583
584static HRESULT WINAPI IcnsEncoder_SetPalette(IWICBitmapEncoder *iface, IWICPalette *pIPalette)
585{
586 TRACE("(%p,%p)\n", iface, pIPalette);
588}
589
590static HRESULT WINAPI IcnsEncoder_SetThumbnail(IWICBitmapEncoder *iface, IWICBitmapSource *pIThumbnail)
591{
592 TRACE("(%p,%p)\n", iface, pIThumbnail);
594}
595
596static HRESULT WINAPI IcnsEncoder_SetPreview(IWICBitmapEncoder *iface, IWICBitmapSource *pIPreview)
597{
598 TRACE("(%p,%p)\n", iface, pIPreview);
600}
601
602static HRESULT WINAPI IcnsEncoder_CreateNewFrame(IWICBitmapEncoder *iface,
603 IWICBitmapFrameEncode **ppIFrameEncode, IPropertyBag2 **ppIEncoderOptions)
604{
605 IcnsEncoder *This = impl_from_IWICBitmapEncoder(iface);
606 HRESULT hr = S_OK;
607 IcnsFrameEncode *frameEncode = NULL;
608
609 TRACE("(%p,%p,%p)\n", iface, ppIFrameEncode, ppIEncoderOptions);
610
612
613 if (!This->icns_family)
614 {
616 goto end;
617 }
618
619 if (ppIEncoderOptions)
620 {
621 hr = CreatePropertyBag2(NULL, 0, ppIEncoderOptions);
622 if (FAILED(hr))
623 goto end;
624 }
625
626 frameEncode = HeapAlloc(GetProcessHeap(), 0, sizeof(IcnsFrameEncode));
627 if (frameEncode == NULL)
628 {
630 goto end;
631 }
632 frameEncode->IWICBitmapFrameEncode_iface.lpVtbl = &IcnsEncoder_FrameVtbl;
633 frameEncode->encoder = This;
634 frameEncode->ref = 1;
635 frameEncode->initialized = FALSE;
636 frameEncode->size = 0;
637 frameEncode->icns_image = NULL;
638 frameEncode->lines_written = 0;
639 frameEncode->committed = FALSE;
640 *ppIFrameEncode = &frameEncode->IWICBitmapFrameEncode_iface;
641 This->outstanding_commits++;
642 IWICBitmapEncoder_AddRef(&This->IWICBitmapEncoder_iface);
643
644end:
646
647 return hr;
648}
649
650static HRESULT WINAPI IcnsEncoder_Commit(IWICBitmapEncoder *iface)
651{
652 IcnsEncoder *This = impl_from_IWICBitmapEncoder(iface);
653 size_t buffer_size;
654 HRESULT hr = S_OK;
655 ULONG byteswritten;
656
657 TRACE("(%p)\n", iface);
658
660
661 if (!This->any_frame_committed || This->outstanding_commits > 0 || This->committed)
662 {
664 goto end;
665 }
666
667 buffer_size = GetHandleSize((Handle)This->icns_family);
668 hr = IStream_Write(This->stream, *This->icns_family, buffer_size, &byteswritten);
669 if (FAILED(hr) || byteswritten != buffer_size)
670 {
671 WARN("writing file failed, hr = 0x%08X\n", hr);
672 hr = E_FAIL;
673 goto end;
674 }
675
676 This->committed = TRUE;
677
678end:
680 return hr;
681}
682
683static HRESULT WINAPI IcnsEncoder_GetMetadataQueryWriter(IWICBitmapEncoder *iface,
684 IWICMetadataQueryWriter **ppIMetadataQueryWriter)
685{
686 FIXME("(%p,%p): stub\n", iface, ppIMetadataQueryWriter);
687 return E_NOTIMPL;
688}
689
690static const IWICBitmapEncoderVtbl IcnsEncoder_Vtbl = {
691 IcnsEncoder_QueryInterface,
692 IcnsEncoder_AddRef,
693 IcnsEncoder_Release,
694 IcnsEncoder_Initialize,
695 IcnsEncoder_GetContainerFormat,
696 IcnsEncoder_GetEncoderInfo,
697 IcnsEncoder_SetColorContexts,
698 IcnsEncoder_SetPalette,
699 IcnsEncoder_SetThumbnail,
700 IcnsEncoder_SetPreview,
701 IcnsEncoder_CreateNewFrame,
702 IcnsEncoder_Commit,
703 IcnsEncoder_GetMetadataQueryWriter
704};
705
707{
708 IcnsEncoder *This;
709 HRESULT ret;
710
711 TRACE("(%s,%p)\n", debugstr_guid(iid), ppv);
712
713 *ppv = NULL;
714
715 This = HeapAlloc(GetProcessHeap(), 0, sizeof(IcnsEncoder));
716 if (!This) return E_OUTOFMEMORY;
717
718 This->IWICBitmapEncoder_iface.lpVtbl = &IcnsEncoder_Vtbl;
719 This->ref = 1;
720 This->stream = NULL;
721 This->icns_family = NULL;
722 This->any_frame_committed = FALSE;
723 This->outstanding_commits = 0;
724 This->committed = FALSE;
726 This->lock.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": IcnsEncoder.lock");
727
728 ret = IWICBitmapEncoder_QueryInterface(&This->IWICBitmapEncoder_iface, iid, ppv);
729 IWICBitmapEncoder_Release(&This->IWICBitmapEncoder_iface);
730
731 return ret;
732}
733
734#else /* !defined(HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H) ||
735 MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4 */
736
738{
739 ERR("Trying to save ICNS picture, but ICNS support is not compiled in.\n");
740 return E_FAIL;
741}
742
743#endif
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
const GUID IID_IUnknown
static BmpFrameEncode * impl_from_IWICBitmapFrameEncode(IWICBitmapFrameEncode *iface)
Definition: bmpencode.c:84
static BmpEncoder * impl_from_IWICBitmapEncoder(IWICBitmapEncoder *iface)
Definition: bmpencode.c:433
#define FIXME(fmt,...)
Definition: debug.h:111
#define WARN(fmt,...)
Definition: debug.h:112
#define ERR(fmt,...)
Definition: debug.h:110
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
HRESULT write_source(IWICBitmapFrameEncode *iface, IWICBitmapSource *source, const WICRect *prc, const WICPixelFormatGUID *format, UINT bpp, INT width, INT height)
Definition: main.c:155
HRESULT configure_write_source(IWICBitmapFrameEncode *iface, IWICBitmapSource *source, const WICRect *prc, const WICPixelFormatGUID *format, INT width, INT height, double xres, double yres)
Definition: main.c:123
HRESULT CreatePropertyBag2(const PROPBAG2 *options, UINT count, IPropertyBag2 **ppPropertyBag2)
Definition: propertybag.c:281
unsigned int BOOL
Definition: ntddk_ex.h:94
ULONG Handle
Definition: gdb_input.c:15
GLuint GLuint end
Definition: gl.h:1545
GLsizeiptr size
Definition: glext.h:5919
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
HRESULT IcnsEncoder_CreateInstance(REFIID iid, void **ppv)
Definition: icnsformat.c:737
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
unsigned int UINT
Definition: ndis.h:50
_Out_ LPRECT prc
Definition: ntgdi.h:1658
long LONG
Definition: pedump.c:60
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
Definition: send.c:48
Definition: parse.h:23
static void buffer_size(GLcontext *ctx, GLuint *width, GLuint *height)
Definition: swimpl.c:888
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Definition: synch.c:751
static BOOL initialized
Definition: syslog.c:39
rwlock_t lock
Definition: tcpcore.h:0
#define DWORD_PTR
Definition: treelist.c:76
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
int ret
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
WICBitmapEncoderCacheOption
Definition: wincodec.idl:69
static const char * debug_wic_rect(const WICRect *rect)
#define WINAPI
Definition: msvc.h:6
#define WINCODEC_ERR_WRONGSTATE
Definition: winerror.h:3281
#define WINCODEC_ERR_UNSUPPORTEDOPERATION
Definition: winerror.h:3308
#define WINCODEC_ERR_NOTINITIALIZED
Definition: winerror.h:3285
#define E_NOINTERFACE
Definition: winerror.h:2364
unsigned char BYTE
Definition: xxhash.c:193