+ if (!IsEqualIID(&IID_IUnknown, iid) && !IsEqualIID(&IID_IWICBitmapFrameDecode, iid)) + return E_NOINTERFACE;
This should accept IWICBitmapSource.
+ if (This->frame) IWICBitmapFrameDecode_Release(This->frame); + if (This->decoder) This->decoder->Release(&This->decoder);
We can't assume the caller will release the frame before the decoder.
- *count = 0; - return E_NOTIMPL; + *count = 1; + return S_OK;
This should probably do something similar to what you had before where we print a fixme if there are multiple frames.