Конференция "Media" » перечисление пинов [D7, WinXP]
 
  • DV (25.06.07 15:07) [0]
    DirectShow фильтр "DV Splitter" имеет три пина (видно в графэдите). Но когда получаем из него интерфейс IEnumPins и в цикле вызываем Next(1,...) для перечисления всех пинов, то возвращается только один входной пин.
    Двы выходных пина для видео и аудио просто отсутствуют как класс.
    В чем косяк?

    PS код не привожу, он в точности повторяет примеры SDK
  • wicked © (03.07.07 21:17) [1]
    а просишь какие пины?
    там же вроде флажками задается, какие пины отдать в енумератор
  • DV (04.07.07 00:15) [2]
    Нифига туда не передается

    Сначала запрашиваем енумератор
    HRESULT EnumPins(
     IEnumPins **ppEnum
    );

    Потом перечисляем все что есть
    HRESULT Next(
     ULONG cPins,
     IPin **ppPins,
     ULONG *pcFetched
    );

    Тип не задается нигде.
  • WondeRu at work (05.07.07 12:46) [3]
    Такое подойдет?

    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;

  • DV (05.07.07 14:16) [4]
    Спасибо конечно, но портировать примеры sdk с си на паскаль я и сам пока еще умею.
 
Конференция "Media" » перечисление пинов [D7, WinXP]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]