Ivan Leo Puoti wrote:

@@ -282,9 +283,15 @@
{
    IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;

-    FIXME("(%p/%p)->(%s,%lx) stub!\n", This, iface, debugstr_w(pszFileName), 
dwFlags);
+    TRACE("(%p/%p)->(%s,%lx)\n", This, iface, debugstr_w(pszFileName), 
dwFlags);

-    return E_NOTIMPL;
+    /* We should check the file format and fail to open it if we can't reder 
it */
+
+    This->FileHandle = CreateFileW(pszFileName, GENERIC_READ, FILE_SHARE_READ, 
NULL, OPEN_EXISTING, 0, NULL);
+    if(This->FileHandle == INVALID_HANLDE_VALUE)
+        return E_FAIL;
+
+    return CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
&IID_IGraphBuilder, (LPVOID*)&This->pFilterGraph);
}


This is wrong. Here is the pseudo-code I sent to Peter Åstrand for the very same function:

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.


--
Rob Shearman



Reply via email to