Zitat:
Baue dir einen ähnlichen Code mit ein und lasse dir per OutputDebugString ausgeben, wie die korrekten Namen sind.
Habe ich versucht und bekomme auch den Pin.
Nur es kracht trotzdem
Delphi-Quellcode:
function FindConnectedPin(pFilter: IBaseFilter; PinDir: PIN_DIRECTION; var ppPin: IPin): HRESULT;
var
pEnum: IEnumPins;
pPin: IPin;
hr: HRESULT;
bFound: BOOL;
bIsConnected: BOOL;
begin
ppPin := nil;
pEnum := nil;
pPin := nil;
hr := pFilter.EnumPins(pEnum);
if (FAILED(hr)) then
begin
result := hr;
exit;
end;
bFound := FALSE;
while (pEnum.Next(1, pPin, nil) = S_OK) do
begin
hr := IsPinConnected(pPin, bIsConnected);
if (SUCCEEDED(hr)) then
begin
if (bIsConnected) then
hr := IsPinDirection(pPin, PinDir, bFound);
end;
if (FAILED(hr)) then
begin
pPin := nil;
break;
end;
if (bFound) then
begin
ppPin := pPin;
break;
end;
pPin := nil;
end;
pEnum := nil;
if (not bFound) then
hr := VFW_E_NOT_FOUND;
result := hr;
end;
FindConnectedPin(FVideoRenderer.VMRFilter, PINDIR_INPUT, pPin);
pPin.QueryInterface(IID_IOverlay, Overlay);
Overlay ist Nil trotz gefundenen Pin und dann kracht es natürlich. (wenn nicht abgesichert)
gruss