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