HRESULT qcap_driver_run(Capture *capBox, FILTER_STATE *state) { HANDLE thread; HRESULT hr; TRACE("%p -> (%p)\n", capBox, state); if (*state == State_Running) return S_OK; EnterCriticalSection(&capBox->CritSect); capBox->stopped = 0; if (*state == State_Stopped) { *state = State_Running; if (!capBox->iscommitted++) { ALLOCATOR_PROPERTIES ap, actual; BaseOutputPin *out; ap.cBuffers = 3; if (!capBox->swresize) ap.cbBuffer = capBox->width * capBox->height; else ap.cbBuffer = capBox->outputwidth * capBox->outputheight; ap.cbBuffer = (ap.cbBuffer * capBox->bitDepth) / 8; ap.cbAlign = 1; ap.cbPrefix = 0; out = (BaseOutputPin *)capBox->pOut; hr = IMemAllocator_SetProperties(out->pAllocator, &ap, &actual); if (SUCCEEDED(hr)) hr = IMemAllocator_Commit(out->pAllocator); TRACE("Committing allocator: %x\n", hr); } thread = CreateThread(NULL, 0, ReadThread, capBox, 0, NULL); if (thread) { capBox->thread = thread; SetThreadPriority(thread, THREAD_PRIORITY_LOWEST); LeaveCriticalSection(&capBox->CritSect); return S_OK; } ERR("Creating thread failed.. %u\n", GetLastError()); LeaveCriticalSection(&capBox->CritSect); return E_FAIL; } ResumeThread(capBox->thread); *state = State_Running; LeaveCriticalSection(&capBox->CritSect); return S_OK; }
static void CommitDecommitTest(void) { IMemAllocator* pMemAllocator; HRESULT hr; hr = CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER, &IID_IMemAllocator, (LPVOID*)&pMemAllocator); ok(hr==S_OK, "Unable to create memory allocator %x\n", hr); if (hr == S_OK) { ALLOCATOR_PROPERTIES RequestedProps; ALLOCATOR_PROPERTIES ActualProps; IMediaSample *sample = NULL, *sample2 = NULL; RequestedProps.cBuffers = 2; RequestedProps.cbBuffer = 65536; RequestedProps.cbAlign = 1; RequestedProps.cbPrefix = 0; hr = IMemAllocator_SetProperties(pMemAllocator, &RequestedProps, &ActualProps); ok(hr==S_OK, "SetProperties returned: %x\n", hr); hr = IMemAllocator_Commit(pMemAllocator); ok(hr==S_OK, "Commit returned: %x\n", hr); hr = IMemAllocator_Commit(pMemAllocator); ok(hr==S_OK, "Commit returned: %x\n", hr); hr = IMemAllocator_GetBuffer(pMemAllocator, &sample, NULL, NULL, 0); ok(hr==S_OK, "Could not get a buffer: %x\n", hr); hr = IMemAllocator_Decommit(pMemAllocator); ok(hr==S_OK, "Decommit returned: %x\n", hr); hr = IMemAllocator_Decommit(pMemAllocator); ok(hr==S_OK, "Cecommit returned: %x\n", hr); /* Decommit and recommit while holding a sample */ if (sample) { hr = IMemAllocator_Commit(pMemAllocator); ok(hr==S_OK, "Commit returned: %x\n", hr); hr = IMemAllocator_GetBuffer(pMemAllocator, &sample2, NULL, NULL, 0); ok(hr==S_OK, "Could not get a buffer: %x\n", hr); IUnknown_Release(sample); if (sample2) IUnknown_Release(sample2); hr = IMemAllocator_Decommit(pMemAllocator); ok(hr==S_OK, "Cecommit returned: %x\n", hr); } IMemAllocator_Release(pMemAllocator); } }
static HRESULT WINAPI Gstreamer_transform_DecideBufferSize(TransformFilter *tf, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) { GstTfImpl *This = (GstTfImpl*)tf; ALLOCATOR_PROPERTIES actual; if (!ppropInputRequest->cbAlign) ppropInputRequest->cbAlign = 1; ppropInputRequest->cbBuffer = This->cbBuffer; if (ppropInputRequest->cBuffers < 2) ppropInputRequest->cBuffers = 2; return IMemAllocator_SetProperties(pAlloc, ppropInputRequest, &actual); }
static HRESULT WINAPI VfwPin_DecideBufferSize(BaseOutputPin *iface, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) { ALLOCATOR_PROPERTIES actual; /* What we put here doesn't matter, the driver function should override it then commit */ if (!ppropInputRequest->cBuffers) ppropInputRequest->cBuffers = 3; if (!ppropInputRequest->cbBuffer) ppropInputRequest->cbBuffer = 230400; if (!ppropInputRequest->cbAlign) ppropInputRequest->cbAlign = 1; return IMemAllocator_SetProperties(pAlloc, ppropInputRequest, &actual); }
static HRESULT WINAPI AVIDec_DecideBufferSize(TransformFilter *tf, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) { AVIDecImpl *pAVI = (AVIDecImpl*)tf; ALLOCATOR_PROPERTIES actual; if (!ppropInputRequest->cbAlign) ppropInputRequest->cbAlign = 1; if (ppropInputRequest->cbBuffer < pAVI->pBihOut->biSizeImage) ppropInputRequest->cbBuffer = pAVI->pBihOut->biSizeImage; if (!ppropInputRequest->cBuffers) ppropInputRequest->cBuffers = 1; return IMemAllocator_SetProperties(pAlloc, ppropInputRequest, &actual); }
static HRESULT WINAPI Parser_OutputPin_DecideBufferSize(BaseOutputPin *iface, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) { Parser_OutputPin *This = (Parser_OutputPin*)iface; ALLOCATOR_PROPERTIES actual; if (ppropInputRequest->cbAlign && ppropInputRequest->cbAlign != This->allocProps.cbAlign) FIXME("Requested Buffer cbAlign mismatch %i,%i\n",This->allocProps.cbAlign, ppropInputRequest->cbAlign); if (ppropInputRequest->cbPrefix) FIXME("Requested Buffer cbPrefix mismatch %i,%i\n",This->allocProps.cbPrefix, ppropInputRequest->cbPrefix); if (ppropInputRequest->cbBuffer) FIXME("Requested Buffer cbBuffer mismatch %i,%i\n",This->allocProps.cbBuffer, ppropInputRequest->cbBuffer); if (ppropInputRequest->cBuffers) FIXME("Requested Buffer cBuffers mismatch %i,%i\n",This->allocProps.cBuffers, ppropInputRequest->cBuffers); return IMemAllocator_SetProperties(pAlloc, &This->allocProps, &actual); }
static HRESULT WINAPI ACMWrapper_DecideBufferSize(TransformFilter *tf, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) { ACMWrapperImpl *pACM = (ACMWrapperImpl*)tf; ALLOCATOR_PROPERTIES actual; if (!ppropInputRequest->cbAlign) ppropInputRequest->cbAlign = 1; if (ppropInputRequest->cbBuffer < pACM->pWfOut->nAvgBytesPerSec / 2) ppropInputRequest->cbBuffer = pACM->pWfOut->nAvgBytesPerSec / 2; if (!ppropInputRequest->cBuffers) ppropInputRequest->cBuffers = 1; return IMemAllocator_SetProperties(pAlloc, ppropInputRequest, &actual); }
static HRESULT WINAPI AVICompressorOut_DecideBufferSize(BaseOutputPin *base, IMemAllocator *alloc, ALLOCATOR_PROPERTIES *ppropInputRequest) { AVICompressor *This = impl_from_BasePin(&base->pin); ALLOCATOR_PROPERTIES actual; TRACE("(%p)\n", This); if (!ppropInputRequest->cBuffers) ppropInputRequest->cBuffers = 1; if (ppropInputRequest->cbBuffer < This->max_frame_size) ppropInputRequest->cbBuffer = This->max_frame_size; if (!ppropInputRequest->cbAlign) ppropInputRequest->cbAlign = 1; return IMemAllocator_SetProperties(alloc, ppropInputRequest, &actual); }
static HRESULT WINAPI QTVDecoder_DecideBufferSize(TransformFilter *tf, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) { QTVDecoderImpl *This = impl_from_TransformFilter(tf); ALLOCATOR_PROPERTIES actual; TRACE("()\n"); if (!ppropInputRequest->cbAlign) ppropInputRequest->cbAlign = 1; if (ppropInputRequest->cbBuffer < This->outputSize) ppropInputRequest->cbBuffer = This->outputSize + ppropInputRequest->cbAlign; if (!ppropInputRequest->cBuffers) ppropInputRequest->cBuffers = 1; return IMemAllocator_SetProperties(pAlloc, ppropInputRequest, &actual); }