Hello,
On 10/15/2013 09:52 PM, Michael Müller wrote:
I am wondering what would be the best way to handle programs which rely on the Video Mixing Renderer 7 (quartz.dll) as it's supposed to be available on XP and later, but Wine contains only an implementation of version 9.
The program I am speaking of is Silverlight which uses the VMR 7 Interface to create a filter graph and then queries for the IAMCertifiedOutputProtection interface. I am currently using a hack fix to get around this by returning a VMR9 instance when a VMR7 is requested and implementing the missing subinterfaces (which are only part of VMR7). This solution is clearly not perfect and I am searching for a better way to get around this issue.
The most similar way to Windows would be to completely rewrite the current implementation of the VMR9 as VMR7 using DirectDraw, which would take a lot of time and most probably end up in having a lot of duplicate code. I am wondering whether using d3d9 for VMR7 would also be an acceptable solution. We could move all the d3d9 related stuff to a separate file so that VMR7.c and VMR9.c only offer the version specific interfaces and use the same code internally. This shouldn't be a big problem since the differences between the VMR7 and VMR9 interfaces are often only very small. Though it would not completely fit the behavior of windows.
if the differences are small then there are different options to reuse the common parts: - Use the same object (struct) for both VMR7 and 9. Just set the correct vtbl pointers during object creation.
- Use a separate struct for the common parts and include it in both objects. Kind off like it is done at the moment with the BaseRenderer and the other Base* stuff.
- If it is feasible to have VMR7 implemented in d3d9 you could even make VMR7 a small wrapper around VMR9. Aka COM aggregate the VMR9 object and just implement the parts you can't forward.
I am open for other ideas on how to solve the problem, but as Silverlight does not even use the VMR7 object for playing the video but only to check for the graphic driver certificate I don't think it would justify to rewrite everything using Direct Draw if there are no other programs needing this interface.
I have an old kids education game that uses both ddraw and quartz that doesn't works. I'll check if it uses VMR7. If yes it is worthwhile to do it right as it is a whole class of such multimedia apps from the early days.
bye michael