Re[2]: Как задать размер буфера в DirectShow?
От: Аноним  
Дата: 01.03.02 04:44
Оценка:
Snax, я так пробовал:

HRESULT MyPlugIn::DecideBufferSize (IMemAllocator* pAlloc, ALLOCATOR_PROPERTIES* pProp){

HRESULT hr;

DbgLog((LOG_TRACE, 2, TEXT("DecideBufferSize")));

DbgLog((LOG_TRACE, 2, TEXT("Default Allocator props %d,%d,%d,%d"), pProp->cBuffers, pProp->cbBuffer, pProp->cbAlign, pProp->cbPrefix)); //выдаёт {0, 0, 1, 0}

ALLOCATOR_PROPERTIES required, actual;
required.cBuffers=1;
required.cbBuffer=8192;
required.cbAlign=1;
required.cbPrefix=0;
hr=pAlloc->SetProperties(&required, &actual);

if(hr>=0){

*pProp=actual;
DbgLog((LOG_TRACE, 2, TEXT("actual Allocator props %d,%d,%d,%d"), pProp->cBuffers, pProp->cbBuffer, pProp->cbAlign, pProp->cbPrefix)); //выдаёт {1, 8192, 1, 0}

}

else{
DbgLog((LOG_TRACE, 2, TEXT("pAlloc->SetProperties() FAILED=%.08lXh"), hr));
return E_FAIL;
}

ALLOCATOR_PROPERTIES in, out;

InputPin()->PeekAllocator()->GetProperties(&in);
OutputPin()->PeekAllocator()->GetProperties(&out);

DbgLog((LOG_TRACE, 2, TEXT("in my decide Allocator props %d,%d,%d,%d"), in.cBuffers, in.cbBuffer, in.cbAlign, in.cbPrefix)); //выдаёт {1, 11024, 1 ,0}
DbgLog((LOG_TRACE, 2, TEXT("out my decide Allocator props %d,%d,%d,%d"), out.cBuffers, out.cbBuffer, out.cbAlign, out.cbPrefix)); //выдаёт {1, 8192, 1 ,0}
//Такая фигня с CTransInPlaceFilter, который вроде как должен одну память под Input
//and Output Pin пользовать.
return hr;
}

И в итоге в функции Transform(IMediaSample* pSample) я имею pSample->GetActualDataLength()==11024; Это такой буфер выставляет редактор Cool Edit Pro, в других буфер другой, но не тот , кторый я выставил в DecideBufferSize (8192). Ещё посмотри мой ответ Lostar-у, он выше твоего, я как там написано пробовал, но всё с таким же успехом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.