Hi Fabian,
On 18/08/17 11:25, Fabian Maurer wrote:
- if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IBaseFilter))
- {
Your missing some IID checks here.
Alistair.
Hi Alistair,
Your missing some IID checks here.
You mean for example the DirectShow interfaces like "IAMCertifiedOutputProtection" "IMediaEventSink" and so on?
I skipped them for now, because they are not needed to fix that particular bug. Do I have to add all of them at once?
Regards, Fabian Maurer
Hi Fabian,
You mean for example the DirectShow interfaces like "IAMCertifiedOutputProtection" "IMediaEventSink" and so on?
No, QI will also need to check for the following interfaces IMediaFilter, IPersist.
e.g. IBaseFilter -> IMediaFilter-> IPersist -> IUnknown
Best Regards Alistair.
Hi Alistair,
You mean for example the DirectShow interfaces like "IAMCertifiedOutputProtection" "IMediaEventSink" and so on?
No, QI will also need to check for the following interfaces IMediaFilter, IPersist.
e.g. IBaseFilter -> IMediaFilter-> IPersist -> IUnknown
Right, I overlooked that, will add a check for those. Thanks for explaining.
On a sitenote, MSDN states that EnhancedVideoRenderer exposes a lot more interfaces than just IBaseFilter.
It's a similar issue with VideoMixingRenderer in quartz/vmr9.c:
static const IUnknownVtbl IInner_VTable = { VMR9Inner_QueryInterface, VMR9Inner_AddRef, VMR9Inner_Release };
Maybe I should rework it like that? Having one unknown interface that is only used to query all the other interfaces.
Regards, Fabian Maurer