static HRESULT WINAPI BmpEncoder_CreateNewFrame(IWICBitmapEncoder *iface, IWICBitmapFrameEncode **ppIFrameEncode, IPropertyBag2 **ppIEncoderOptions) { BmpEncoder *This = impl_from_IWICBitmapEncoder(iface); BmpFrameEncode *encode; HRESULT hr; static const PROPBAG2 opts[1] = { { PROPBAG2_TYPE_DATA, VT_BOOL, 0, 0, (LPOLESTR)wszEnableV5Header32bppBGRA }, }; TRACE("(%p,%p,%p)\n", iface, ppIFrameEncode, ppIEncoderOptions); if (This->frame) return WINCODEC_ERR_UNSUPPORTEDOPERATION; if (!This->stream) return WINCODEC_ERR_NOTINITIALIZED; if (ppIEncoderOptions) { hr = CreatePropertyBag2(opts, ARRAY_SIZE(opts), ppIEncoderOptions); if (FAILED(hr)) return hr; } encode = HeapAlloc(GetProcessHeap(), 0, sizeof(BmpFrameEncode)); if (!encode) { IPropertyBag2_Release(*ppIEncoderOptions); *ppIEncoderOptions = NULL; return E_OUTOFMEMORY; } encode->IWICBitmapFrameEncode_iface.lpVtbl = &BmpFrameEncode_Vtbl; encode->ref = 2; IStream_AddRef(This->stream); encode->stream = This->stream; encode->initialized = FALSE; encode->width = 0; encode->height = 0; encode->bits = NULL; encode->format = NULL; encode->xres = 0.0; encode->yres = 0.0; encode->lineswritten = 0; encode->colors = 0; encode->committed = FALSE; *ppIFrameEncode = &encode->IWICBitmapFrameEncode_iface; This->frame = encode; return S_OK; }
static HRESULT WINAPI IcnsEncoder_CreateNewFrame(IWICBitmapEncoder *iface, IWICBitmapFrameEncode **ppIFrameEncode, IPropertyBag2 **ppIEncoderOptions) { IcnsEncoder *This = impl_from_IWICBitmapEncoder(iface); HRESULT hr = S_OK; IcnsFrameEncode *frameEncode = NULL; TRACE("(%p,%p,%p)\n", iface, ppIFrameEncode, ppIEncoderOptions); EnterCriticalSection(&This->lock); if (!This->icns_family) { hr = WINCODEC_ERR_NOTINITIALIZED; goto end; } hr = CreatePropertyBag2(NULL, 0, ppIEncoderOptions); if (FAILED(hr)) goto end; frameEncode = HeapAlloc(GetProcessHeap(), 0, sizeof(IcnsFrameEncode)); if (frameEncode == NULL) { hr = E_OUTOFMEMORY; goto end; } frameEncode->IWICBitmapFrameEncode_iface.lpVtbl = &IcnsEncoder_FrameVtbl; frameEncode->encoder = This; frameEncode->ref = 1; frameEncode->initialized = FALSE; frameEncode->size = 0; frameEncode->icns_image = NULL; frameEncode->lines_written = 0; frameEncode->committed = FALSE; *ppIFrameEncode = &frameEncode->IWICBitmapFrameEncode_iface; This->outstanding_commits++; IWICBitmapEncoder_AddRef(&This->IWICBitmapEncoder_iface); end: LeaveCriticalSection(&This->lock); return hr; }
static HRESULT WINAPI PngEncoder_CreateNewFrame(IWICBitmapEncoder *iface, IWICBitmapFrameEncode **ppIFrameEncode, IPropertyBag2 **ppIEncoderOptions) { PngEncoder *This = impl_from_IWICBitmapEncoder(iface); HRESULT hr; PROPBAG2 opts[1]= {{0}}; TRACE("(%p,%p,%p)\n", iface, ppIFrameEncode, ppIEncoderOptions); EnterCriticalSection(&This->lock); if (This->frame_count != 0) { LeaveCriticalSection(&This->lock); return WINCODEC_ERR_UNSUPPORTEDOPERATION; } if (!This->stream) { LeaveCriticalSection(&This->lock); return WINCODEC_ERR_NOTINITIALIZED; } opts[0].pstrName = (LPOLESTR)wszPngInterlaceOption; opts[0].vt = VT_BOOL; opts[0].dwType = PROPBAG2_TYPE_DATA; hr = CreatePropertyBag2(opts, 1, ppIEncoderOptions); if (FAILED(hr)) { LeaveCriticalSection(&This->lock); return hr; } This->frame_count = 1; LeaveCriticalSection(&This->lock); IWICBitmapEncoder_AddRef(iface); *ppIFrameEncode = &This->IWICBitmapFrameEncode_iface; return S_OK; }
static HRESULT WINAPI BmpEncoder_CreateNewFrame(IWICBitmapEncoder *iface, IWICBitmapFrameEncode **ppIFrameEncode, IPropertyBag2 **ppIEncoderOptions) { BmpEncoder *This = impl_from_IWICBitmapEncoder(iface); BmpFrameEncode *encode; HRESULT hr; TRACE("(%p,%p,%p)\n", iface, ppIFrameEncode, ppIEncoderOptions); if (This->frame) return WINCODEC_ERR_UNSUPPORTEDOPERATION; if (!This->stream) return WINCODEC_ERR_NOTINITIALIZED; hr = CreatePropertyBag2(NULL, 0, ppIEncoderOptions); if (FAILED(hr)) return hr; encode = HeapAlloc(GetProcessHeap(), 0, sizeof(BmpFrameEncode)); if (!encode) { IPropertyBag2_Release(*ppIEncoderOptions); *ppIEncoderOptions = NULL; return E_OUTOFMEMORY; } encode->IWICBitmapFrameEncode_iface.lpVtbl = &BmpFrameEncode_Vtbl; encode->ref = 2; IStream_AddRef(This->stream); encode->stream = This->stream; encode->initialized = FALSE; encode->width = 0; encode->height = 0; encode->bits = NULL; encode->format = NULL; encode->xres = 0.0; encode->yres = 0.0; encode->lineswritten = 0; encode->committed = FALSE; *ppIFrameEncode = &encode->IWICBitmapFrameEncode_iface; This->frame = encode; return S_OK; }
static HRESULT WINAPI JpegEncoder_CreateNewFrame(IWICBitmapEncoder *iface, IWICBitmapFrameEncode **ppIFrameEncode, IPropertyBag2 **ppIEncoderOptions) { JpegEncoder *This = impl_from_IWICBitmapEncoder(iface); HRESULT hr; TRACE("(%p,%p,%p)\n", iface, ppIFrameEncode, ppIEncoderOptions); EnterCriticalSection(&This->lock); if (This->frame_count != 0) { LeaveCriticalSection(&This->lock); return WINCODEC_ERR_UNSUPPORTEDOPERATION; } if (!This->initialized) { LeaveCriticalSection(&This->lock); return WINCODEC_ERR_NOTINITIALIZED; } hr = CreatePropertyBag2(NULL, 0, ppIEncoderOptions); if (FAILED(hr)) { LeaveCriticalSection(&This->lock); return hr; } This->frame_count = 1; LeaveCriticalSection(&This->lock); IWICBitmapEncoder_AddRef(iface); *ppIFrameEncode = &This->IWICBitmapFrameEncode_iface; return S_OK; }
static HRESULT WINAPI PngEncoder_CreateNewFrame(IWICBitmapEncoder *iface, IWICBitmapFrameEncode **ppIFrameEncode, IPropertyBag2 **ppIEncoderOptions) { PngEncoder *This = (PngEncoder*)iface; HRESULT hr; TRACE("(%p,%p,%p)\n", iface, ppIFrameEncode, ppIEncoderOptions); if (This->frame_count != 0) return WINCODEC_ERR_UNSUPPORTEDOPERATION; if (!This->stream) return WINCODEC_ERR_NOTINITIALIZED; hr = CreatePropertyBag2(ppIEncoderOptions); if (FAILED(hr)) return hr; This->frame_count = 1; IWICBitmapEncoder_AddRef(iface); *ppIFrameEncode = (IWICBitmapFrameEncode*)&This->lpFrameVtbl; return S_OK; }
static HRESULT WINAPI ComponentFactory_CreateEncoderPropertyBag(IWICComponentFactory *iface, PROPBAG2 *options, UINT count, IPropertyBag2 **property) { TRACE("(%p,%p,%u,%p)\n", iface, options, count, property); return CreatePropertyBag2(options, count, property); }