[PATCH] evr: Add stubs for EnhancedVideoRenderer

Nikolay Sivov bunglehead at gmail.com
Fri Aug 18 01:29:41 CDT 2017


On 18.08.2017 4:25, Fabian Maurer wrote:
> +static const IBaseFilterVtbl IBaseFilter_Vtbl =
> +{
> +    /*** IUnknown methods ***/
> +    EnhancedVideoRendererImpl_QueryInterface,
> +    EnhancedVideoRendererImpl_AddRef,
> +    EnhancedVideoRendererImpl_Release,
> +    /*** IPersist methods ***/
> +    EnhancedVideoRendererImpl_GetClassID,
> +    /*** IMediaFilter methods ***/
> +    EnhancedVideoRendererImpl_Stop,
> +    EnhancedVideoRendererImpl_Pause,
> +    EnhancedVideoRendererImpl_Run,
> +    EnhancedVideoRendererImpl_GetState,
> +    EnhancedVideoRendererImpl_SetSyncSource,
> +    EnhancedVideoRendererImpl_GetSyncSource,
> +    /*** IBaseFilter methods ***/
> +    EnhancedVideoRendererImpl_EnumPins,
> +    EnhancedVideoRendererImpl_FindPin,
> +    EnhancedVideoRendererImpl_QueryFilterInfo,
> +    EnhancedVideoRendererImpl_JoinFilterGraph,
> +    EnhancedVideoRendererImpl_QueryVendorInfo
> +};

Shouldn't it use strmbase?

> +HRESULT EnhancedVideoRendererImpl_Create(IUnknown *pUnkOuter, void **ppObj)
> +{
> +    EnhancedVideoRendererImpl *object;
> +
> +    TRACE("(%p,%p)\n", pUnkOuter, ppObj);
> +
> +    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(EnhancedVideoRendererImpl));
> +    if (!object)
> +        return E_OUTOFMEMORY;
> +
> +    object->IBaseFilter_iface.lpVtbl = &IBaseFilter_Vtbl;
> +    object->ref = 1;
> +
> +    *ppObj = &object->IBaseFilter_iface;
> +
> +    return S_OK;
> +}

This needs at test for aggregation support.

> +typedef struct {
> +    IBaseFilter IBaseFilter_iface;
> +    LONG ref;
> +} EnhancedVideoRendererImpl;

Does this need to be exposed?

> +    TRACE("(0x%p, %d, %p)\n", instance, reason, reserved);
> +

Format looks wrong.

> -        case DLL_WINE_PREATTACH:
> -            return FALSE;    /* prefer native version */

It still doesn't do anything.

> +static HRESULT WINAPI XFCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid, void **ppobj)
> +{

What does XF prefix stand for? Also please use consistent type names and
formatting.

> +/*******************************************************************************
> + * Retrieves class object from a DLL object
> + *
> + * NOTES
> + *    Docs say returns STDAPI
> + *
> + * PARAMS
> + *    rclsid [I] CLSID for the class object
> + *    riid   [I] Reference to identifier of interface for class object
> + *    ppv    [O] Address of variable to receive interface pointer for riid
> + *
> + * RETURNS
> + *    Success: S_OK
> + *    Failure: CLASS_E_CLASSNOTAVAILABLE, E_OUTOFMEMORY, E_INVALIDARG,
> + *             E_UNEXPECTED
> + */
> +HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)

I personally don't think this export needs a documentation header.

> +    if ( !IsEqualGUID( &IID_IClassFactory, riid )
> +         && ! IsEqualGUID( &IID_IUnknown, riid) )
> +        return E_NOINTERFACE;

I think it's better to let QueryInterface handle this.

> +    for (i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++)
> +    {
> +        if (IsEqualGUID(object_creation[i].clsid, rclsid))
> +            break;
> +    }
> +
> +    if (i == sizeof(object_creation)/sizeof(object_creation[0]))
> +    {
> +        FIXME("%s: no class found.\n", debugstr_guid(rclsid));
> +        return CLASS_E_CLASSNOTAVAILABLE;
> +    }

Does it support any other CLSIDs? This seems like too much. Static
factory instance will work too I suppose.



More information about the wine-devel mailing list