On Thu, 26 Jan 2006, Peter Åstrand wrote:
Hi. I'm trying to get the EaseReader application (http://www.dolphinaudiopublishing.com/products/EaseReader/) running in Wine. By using the native oleacc, oleaut32 and rpcrt4, it's now actually possible to start the application. The "self voicing" mode also works: The application "speaks", for example when hovering above menu choices. Listening to the actual DAISY book does not work, however. I get:
fixme:imm:ImmGetContext (0x10136): stub fixme:imm:ImmGetContext (0x10136): stub fixme:amstream:IAMMultiMediaStreamImpl_QueryInterface (0x7a4fdc50/0x7a4fdc50)->({bebe595c-9a6f-11d0-8fde-00c04fd9189d},0x7fc6e968) fixme:amstream:IAMMultiMediaStreamImpl_Initialize (0x7a4fdc50/0x7a4fdc50)->(0,1,(nil)) partial stub! fixme:amstream:IAMMultiMediaStreamImpl_AddMediaStream (0x7a4fdc50/0x7a4fdc50)->((nil),0x4b0d3200,0,(nil)) partial stub! fixme:amstream:IAMMultiMediaStreamImpl_OpenFile (0x7a4fdc50/0x7a4fdc50)->(L"c:\program files\easereader demo\help\22_highlig.mp3",8) stub!
It seems like the main problem is the IAMMultiMediaStreamImpl_OpenFile stub. I've tried a quick-n-dirty hack: Just calling ShellExecute from IAMMultiMediaStreamImpl_OpenFile. See the patch below. After installing Winamp, this actually works (but stop/seek etc doesn't work, of course).
So: Now I'm wondering: How difficult would it be to properly implement IAMMultiMediaStreamImpl_OpenFile?
Best Regards, Peter Åstrand
diff -u -r1.12 amstream.c --- amstream.c 7 Nov 2005 16:38:48 -0000 1.12 +++ amstream.c 1 Mar 2006 09:45:06 -0000 @@ -28,6 +28,7 @@
#include "winbase.h" #include "wingdi.h" +#include "shellapi.h"
#include "amstream_private.h" #include "amstream.h" @@ -284,6 +285,12 @@
FIXME("(%p/%p)->(%s,%lx) stub!\n", This, iface, debugstr_w(pszFileName), dwFlags);
+ if (dwFlags & AMMSF_RUN) { + static const WCHAR verbW[] = {'o', 'p', 'e', 'n', 0}; + ShellExecuteW(NULL, verbW, pszFileName, NULL, NULL, SW_SHOWNORMAL); + return S_OK; + } + return E_NOTIMPL; }
Peter Åstrand wrote:
On Thu, 26 Jan 2006, Peter Åstrand wrote:
Hi. I'm trying to get the EaseReader application (http://www.dolphinaudiopublishing.com/products/EaseReader/) running in Wine. By using the native oleacc, oleaut32 and rpcrt4, it's now actually possible to start the application. The "self voicing" mode also works: The application "speaks", for example when hovering above menu choices. Listening to the actual DAISY book does not work, however. I get:
fixme:imm:ImmGetContext (0x10136): stub fixme:imm:ImmGetContext (0x10136): stub fixme:amstream:IAMMultiMediaStreamImpl_QueryInterface (0x7a4fdc50/0x7a4fdc50)->({bebe595c-9a6f-11d0-8fde-00c04fd9189d},0x7fc6e968)
fixme:amstream:IAMMultiMediaStreamImpl_Initialize (0x7a4fdc50/0x7a4fdc50)->(0,1,(nil)) partial stub! fixme:amstream:IAMMultiMediaStreamImpl_AddMediaStream (0x7a4fdc50/0x7a4fdc50)->((nil),0x4b0d3200,0,(nil)) partial stub! fixme:amstream:IAMMultiMediaStreamImpl_OpenFile (0x7a4fdc50/0x7a4fdc50)->(L"c:\program files\easereader demo\help\22_highlig.mp3",8) stub!
It seems like the main problem is the IAMMultiMediaStreamImpl_OpenFile stub. I've tried a quick-n-dirty hack: Just calling ShellExecute from IAMMultiMediaStreamImpl_OpenFile. See the patch below. After installing Winamp, this actually works (but stop/seek etc doesn't work, of course).
So: Now I'm wondering: How difficult would it be to properly implement IAMMultiMediaStreamImpl_OpenFile?
Most of the base functionality is there. IAMMultiMediaStreamImpl_OpenFile is just a helper method. This is roughly what it should do: CoCreateInstance with IFileSourceFilter on CLSID_AsyncReader. Call IFileSourceFilter_Load. Get the output pin and stash it in This. Call IGraphBuilder_AddSourceFilter.
Then IAMMultiMediaStreamImpl_Render should do the following: Call IGraphBuilder_Render using the pin previously stashed away.
Care needs to be taken in both cases to ensure the IGraphBuilder object has been set and in the second case the pin as well.
Hope this helps, Rob