[PATCH v3 2/3] mfplat: Add IMFAttributes interface to IMFByteStream.

Zebediah Figura z.figura12 at gmail.com
Fri Nov 2 15:37:48 CDT 2018


On 11/2/18 3:27 PM, Sven Baars wrote:
> +static HRESULT WINAPI mfbytestream_mfattributes_QueryInterface(
> +    IMFAttributes *iface, REFIID riid, void **out)
> +{
> +    mfbytestream *This = impl_from_IMFByteStream_IMFAttributes(iface);
> +
> +    TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), out);
> +
> +    if(IsEqualGUID(riid, &IID_IUnknown) ||
> +       IsEqualGUID(riid, &IID_IMFByteStream))
> +    {
> +        *out = &This->IMFByteStream_iface;
> +    }
> +    else if(IsEqualGUID(riid, &IID_IMFAttributes))
> +    {
> +        *out = &This->IMFAttributes_iface;
> +    }
> +    else
> +    {
> +        FIXME("(%s, %p)\n", debugstr_guid(riid), out);
> +        *out = NULL;
> +        return E_NOINTERFACE;
> +    }
> +
> +    IUnknown_AddRef((IUnknown*)*out);
> +    return S_OK;
> +}
> +
> +static ULONG WINAPI mfbytestream_mfattributes_AddRef(IMFAttributes *iface)
> +{
> +    mfbytestream *This = impl_from_IMFByteStream_IMFAttributes(iface);
> +    ULONG ref = InterlockedIncrement(&This->attributes.ref);
> +
> +    TRACE("(%p) ref=%u\n", This, ref);
> +
> +    return ref;
> +}
> +
> +static ULONG WINAPI mfbytestream_mfattributes_Release(IMFAttributes *iface)
> +{
> +    mfbytestream *This = impl_from_IMFByteStream_IMFAttributes(iface);
> +    ULONG ref = InterlockedDecrement(&This->attributes.ref);
> +
> +    TRACE("(%p) ref=%u\n", This, ref);
> +
> +    if (!ref)
> +    {
> +        HeapFree(GetProcessHeap(), 0, This);
> +    }
> +
> +    return ref;
> +}

You should forward these methods to the IMFByteStream implementation to 
avoid duplicating code.

Otherwise this patch looks fine to me.



More information about the wine-devel mailing list