[PATCH v4 7/9] qedit: Use the first pin's media type for filters without a filename.

Zebediah Figura zfigura at codeweavers.com
Thu Apr 23 14:51:03 CDT 2020


On 4/21/20 7:19 AM, Gabriel Ivăncescu wrote:
> Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
> ---
> 
> The IFileSourceFilter is not queried for filters placed via put_Filter,
> so obtain the media type from the first pin to use for finding a matching
> splitter.

The async reader (at least) exposes the same (first) media type from the
source as through IFileSourceFilter::GetCurFile(), so it seems to me we
could simplify by using this path for all filters.

>  dlls/qedit/mediadet.c | 45 +++++++++++++++++++++++++++++++------------
>  1 file changed, 33 insertions(+), 12 deletions(-)
> 
> diff --git a/dlls/qedit/mediadet.c b/dlls/qedit/mediadet.c
> index d1e8b71..0a9210c 100644
> --- a/dlls/qedit/mediadet.c
> +++ b/dlls/qedit/mediadet.c
> @@ -150,22 +150,43 @@ static HRESULT get_splitter(MediaDetImpl *This)
>      if (FAILED(hr))
>          return hr;
>  
> -    hr = IBaseFilter_QueryInterface(This->source, &IID_IFileSourceFilter,
> -                                    (void **) &file);
> -    if (FAILED(hr))
> +    if (This->filename)
>      {
> -        IFilterMapper2_Release(map);
> -        return hr;
> -    }
> +        hr = IBaseFilter_QueryInterface(This->source, &IID_IFileSourceFilter,
> +                                        (void **) &file);
> +        if (FAILED(hr))
> +        {
> +            IFilterMapper2_Release(map);
> +            return hr;
> +        }
>  
> -    hr = IFileSourceFilter_GetCurFile(file, &name, &mt);
> -    IFileSourceFilter_Release(file);
> -    CoTaskMemFree(name);
> -    if (FAILED(hr))
> +        hr = IFileSourceFilter_GetCurFile(file, &name, &mt);
> +        IFileSourceFilter_Release(file);
> +        CoTaskMemFree(name);
> +        if (FAILED(hr))
> +        {
> +            IFilterMapper2_Release(map);
> +            return hr;
> +        }
> +    }
> +    else
>      {
> -        IFilterMapper2_Release(map);
> -        return hr;
> +        mt.majortype = GUID_NULL;
> +        mt.subtype = GUID_NULL;
> +        mt.pbFormat = NULL;
> +
> +        hr = IBaseFilter_EnumPins(This->source, &pins);
> +        if (SUCCEEDED(hr))
> +        {
> +            if (IEnumPins_Next(pins, 1, &source_pin, NULL) == S_OK)
> +            {
> +                get_pin_media_type(source_pin, &mt);
> +                IPin_Release(source_pin);
> +            }
> +            IEnumPins_Release(pins);
> +        }
>      }
> +
>      type[0] = mt.majortype;
>      type[1] = mt.subtype;
>      CoTaskMemFree(mt.pbFormat);
> 



More information about the wine-devel mailing list