PDA

View Full Version : Get button positions in a DVD menu using DirectShow?


FatBastard
19th November 2002, 10:19
Hi!

I try to code a DVD Player for a hardware card with MPEG2 decoding capabilities in C++ for Windows. So for me it seems to be the easiest way to use the DirectShow interface, the MS DVD Navigator and the MS DVD Sample application, because I thought this will be a good point to start from and I can do improvements later.

Now Video and Audio playback works fine and the SubPicture is decoded also as well.
I get the complete bitmap for one menu, out of the SubPicture pin of the MS DVD Navigator.

My problem is now: I want to be able to navigate in the DVD menu, so I need the button highlight information for the current menu (The rectangle values of the actual selected button). This is needed to blend in the correct part of the decoded bitmap, cause it contains all buttons and not only one.

I know on which position the button highlight infos are stored in the .vob file (the navigation pack - NAV Pack), but this is useless cause I need to get the info from the MS DVD Navigator.

I tried the IDVDInfo2::GetButtonRect function but it is not implemented in the C++ Version. So I tried the IDVDInfo2::IDVDGetButtonAtPosition to "raster" the positions manually but this functions is not implemented, too (thx to M$ -grr-).

Then I tried the AM_KSPROPSETID_DvdSubPic from the IKspropertySet interface but the MS DVD navigator donīt support this interface and the InterVideo DVD Navigator (which I tried alternatively) says that it donīt supports this special property set.

I know there must be a way, because the InterVideo Video Renderer or PowerDVD Video Renderer gets this information and makes it possible for the user to navigate.

So my questions is:

Can me anybody help to find a way to get the button highlight information from the MS DVD navigator?

My ideas are:
Getting the NAV Pack informations from the DVD Navigator to parse the button highlight infos myself. (but how?)
Maybe a function from the IDVDInfo,IDVDInfo2,IDVDControl or IDVDControl2 interfaces delivers the information I need, but i donīt see it, yet.
There is another "transport mechanism" in the filter chain from where I am able get the needed info. (but where?)

I hope that someone is able to help me.

Bye FatBastard