cplussharp / graph-studio-next

GraphStudioNext is a tool for developers to build and test DirectShow Graphs
355 stars 94 forks source link

Better error feedback and warning re proppage.dll if property pages can't be created #301

Open TheShadowRunner opened 7 years ago

TheShadowRunner commented 7 years ago

Not entirely sure if this is a bug or request, but the controls are missing in the "MS DVD Navigator" fiter's property page. So while it's possible to build a DVD playback graph, it's impossible to navigate in a DVD menu for instance. I'm talking about this tab, on XP SP3 32bit:

Thanks for your support.

Also, I see graphstudionext was updated to 0.7.1.11, where can the changelog be read?

mikecopperwhite commented 7 years ago

Thanks for the report.

This is almost certainly because you haven't installed and registered proppage.dll where the property pages for many Microsoft filters are implemented. You need to register the 32/64 bit versions of this DLL depending whether you're using GSN 32bit and/or 64bit.

Proppage.dll is part of the Windows SDK. https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk is the latest version which I think should do the job though older versions are available. I'm not aware of any other way of getting it barring dubious download sites. This will also get GraphEdit (GraphEdt.exe) and OleView which are useful DirectShow debugging tools. In particular, it's worth cross checking any questionable GSN behaviour in GraphEdit to see if it's 'normal' DirectShow behaviour. This is a bit of an FAQ for this project.

We have a warning about proppage.dll if we fail to connect to a remote graph. Perhaps we need to give the user some warning and a reminder about proppage.dll if GSN can't create a property page CLSID retrieved by GetPages()

    DSUtil::ShowError(hr, _T("Failed to connect to remote graph. Note the error E_NOINTERFACE or REGDB_E_CLASSNOTREG can be caused by failing to register proppage.dll from the Windows SDK."));

Afraid there's no up to date changelog at the moment just the commit notes here which are hopefully fairly readable : https://github.com/cplussharp/graph-studio-next/commits/master. We all have other jobs and are maintaining this project on a very occasional basis...

mikecopperwhite commented 7 years ago

Possible implementation: if GSN fails to instantiate any property page CLSIDs returned by GetPages(), create an extra text tab that lists the CLSIDs, error messages and a reminder about registering proppage.dll. A message box popping up every time a property page can't be created could get really annoying for the user if a property page isn't available.

We could possibly test whether proppage.dll has been registered by creating a known property page or proxy/stub implemented by proppage.dll and report a more specific error message or error indication if we fail to create the test object. Could even do this test on startup.

I think there's a similar issue with evrprop.dll implementing the property page for the Enhanced Video Renderer filter.

TheShadowRunner commented 7 years ago

Thank you very much mikecopperwhite, registering proppage.dll did the trick. I think displaying an error message when proppage isn't registered (or detected by GSN) is a good idea.

Now that I can use DVD Nav, another issue has come to light though, it's just impossible to seek (I tried with a couple DVDs). Trying to seek using the GSN timebar just does nothing at all (not even an error). Also using Play > Seek always gives an error whatever function I try (E_NOTIMPL (0x80004001)) Is this expected?

mikecopperwhite commented 7 years ago

I'm not familiar with DVD filters or what seeking facilities they offer. Some filters or combinations don't support seeking. Don't have a DVD drive to test with to hand either. E_NOTIMPL typically means that the operation isn't implemented (i.e. deliberately not supported).

As a first step, try running the same test using GraphEdt.exe in the Windows SDK for comparison.

Also check the MSDN documentation for this filter. https://msdn.microsoft.com/en-us/library/windows/desktop/dd388609(v=vs.85).aspx https://msdn.microsoft.com/en-us/library/windows/desktop/dd388593(v=vs.85).aspx https://msdn.microsoft.com/en-us/library/windows/desktop/dd318241(v=vs.85).aspx

TheShadowRunner commented 7 years ago

Ok I was able to test the same graph in GraphEdt, and indeed seeking doesn't work there either. It's strange but proves that it's not something missing from GSN ^^;

mikecopperwhite commented 7 years ago

Added an FAQ document covering some of this at: https://github.com/cplussharp/graph-studio-next/blob/master/docs/FAQ.md

Linked from the home page (readme.md)