Re2: Pushing up data through the stream in quartz
Robert Shearman
rob at codeweavers.com
Mon Apr 11 09:18:41 CDT 2005
Maarten Lankhorst wrote:
> HRESULT Capture_Run(CaptureBox * capBox, FILTER_STATE *state)
> {
> HRESULT hr;
> IMediaSample *pSample = NULL;
> LPBYTE pointer;
> hr = OutputPin_GetDeliveryBuffer((OutputPin *)capBox->pOut,
> &pSample, NULL, NULL, 0);
> TRACE("Meat 1: %lx - %p\n", hr, pSample);
> hr = IMediaSample_GetPointer(pSample, &pointer);
> TRACE("Meat 2\n");
> IMediaSample_SetActualDataLength(pSample, 320*240*3);
> TRACE("Meat 3\n");
> ZeroMemory(pointer, 320*240*3);
> TRACE("Meat 4\n");
> OutputPin_SendSample((OutputPin *)capBox->pOut, pSample);
> FIXME("%p -> (%p) stub\n", capBox, state);
> return S_OK;
> }
>
> I get E_VFW_NOT_COMMITTED after trying GetDeliveryBuffer, what's the
> cause?
>
This error is due to a memory allocator needing to be committed before
it can be used (see dlls/quartz/memallocator.c). You should call
IMemAllocator_Commit in the Run implementation of your filter and then
push one sample downstream. IIRC, you should also call
IMemAllocator_Decommit in the Stop implementation of your filter, but
this isn't done for the implementation I referred to
(dlls/quartz/transform.c).
Rob
More information about the wine-devel
mailing list