Registriert seit: 18. Mär 2005
1.682 Beiträge
Delphi 2006 Enterprise
|
Re: DivX Tonspur umstellen (Switch Audio)
21. Okt 2006, 18:55
Hallo,
ich habe mir dazu den Morgan Stream Switcher installiert und steuere den fern. Über den Filtergraph kannst Du feststellen, welcher Filter mehrere Tonspuren zur Verfügung stellt und dann eine auswählen.
Delphi-Quellcode:
function GetOutputPin(const BF: IBaseFilter): IPin;
var
EP: IEnumPins;
PD: PIN_DIRECTION;
begin
if BF.EnumPins(EP) = S_OK then
begin
while (EP.Next(1, Result, nil) = S_OK) do
begin
if (Result.QueryDirection(PD) = S_OK) and (PD = PINDIR_OUTPUT) then
begin
EP := nil;
Exit;
end;
Result := nil;
end;
EP := nil;
end;
end;
function FindAudioSwith(const FG: IFilterGraph): IBaseFilter;
// Sucht einen Filter, der das Umschalten von Audiospuren erlaubt
var
EF: IEnumFilters;
Pin: IPin;
SS: IAMStreamSelect;
SCount: Cardinal;
MT: TAMMediaType;
begin
if FG.EnumFilters(EF) = S_OK then
begin
while (EF.Next(1, Result, nil) = S_OK) do
begin
if Result.QueryInterface(IID_IAMStreamSelect, SS) = S_OK then
begin
if (SS.Count(SCount) = S_OK) and (SCount > 1) then
begin
Pin := GetOutputPin(Result);
if (Pin <> nil) and (Pin.ConnectionMediaType(MT) = S_OK) then
begin
if IsEqualGUID(MT.majortype, MEDIATYPE_AnalogAudio) or
IsEqualGUID(MT.majortype, MEDIATYPE_Audio) then
begin
SS := nil;
EF := nil;
Pin := nil;
Exit;
end;
end;
Pin := nil;
end;
SS := nil;
end;
Result := nil;
end;
EF := nil;
end else
Result := nil;
end;
procedure SetAudioStream(AFilterGraph: TFilterGraph; const Index: Integer);
// Schaltet auf den angegebenen Kanal um
var
FilterGraph: IFilterGraph;
BF: IBaseFilter;
SS: IAMStreamSelect;
begin
if AFilterGraph.QueryInterface(IID_IFilterGraph, FilterGraph) = S_OK then
begin
BF := FindAudioSwith(FilterGraph);
if BF <> nil then
begin
if BF.QueryInterface(IID_IAMStreamSelect, SS) = S_OK then
begin
if SS.Enable(Index, AMSTREAMSELECTENABLE_ENABLE) <> S_OK then
Beep;
SS := nil;
end;
BF := nil;
end;
FilterGraph := nil;
end;
end;
Gruß
xaromz
I am a leaf on the wind - watch how I soar
|
|
Zitat
|