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