-
DirectShow фильтр "DV Splitter" имеет три пина (видно в графэдите). Но когда получаем из него интерфейс IEnumPins и в цикле вызываем Next(1,...) для перечисления всех пинов, то возвращается только один входной пин. Двы выходных пина для видео и аудио просто отсутствуют как класс. В чем косяк?
PS код не привожу, он в точности повторяет примеры SDK
-
а просишь какие пины? там же вроде флажками задается, какие пины отдать в енумератор
-
Нифига туда не передается
Сначала запрашиваем енумератор HRESULT EnumPins( IEnumPins **ppEnum );
Потом перечисляем все что есть HRESULT Next( ULONG cPins, IPin **ppPins, ULONG *pcFetched );
Тип не задается нигде.
-
Такое подойдет? function GetPin(pFilter: IBaseFilter; pinDir: PIN_DIRECTION; Index: Integer = 0): IPin;
var
bFound: Boolean;
pEnum : IEnumPins;
pPin : IPin;
PinDirThis: PIN_DIRECTION;
Count : Integer;
begin
Result := nil;
bFound := false;
pFilter.EnumPins(pEnum);
Count := 0;
while (pEnum.Next(1, pPin, nil) = S_OK) do
begin
pPin.QueryDirection(PinDirThis);
if (pinDir = PinDirThis) then
begin
if Count = Index then
begin
bFound := true;
break;
end;
Inc(Count);
end;
end;
pEnum.Reset;
if bFound then Result := pPin;
end;
-
Спасибо конечно, но портировать примеры sdk с си на паскаль я и сам пока еще умею.
|