Жаль что ни кто не ответил пришлось разбираться самому
| Код | Function TForm1.GetAudioTracks:Integer; var pEnum : IEnumFilters; pFilter :IBaseFilter; cFetched : dword; CL:TGUID; begin result:=0; pGraphBuilder.EnumFilters(pEnum); while pEnum.Next(1, pFilter, @cFetched) = S_OK do begin pFilter.GetClassID(CL); if IsEqualGUID(CL,CLSID_DSoundRender) then inc(Result); pFilter:=nil; end; pFilter:=nil; pEnum:=nil; end;
|
Теперь создалась еще одна ситуация. Можно конечно удалить ненужные звуковые фильтра с помощью следующей функции
| Код | pGraphBuilder.RemoveFilter(pFilter);
|
но если фильм уже проигрывается и пользователь решил изменить звуковой поток на другой, а фильтра то уже нету так как он удалён. Можно конечно не удалять а ставить на паузу
но при перемотке главного потока звуковой фильтр начинает снова воспроизводится и его каждый раз приходится ставить на паузу. а если звуковых потоков 3, 4 или более придётся ставить все потоки на паузу кроме основного при каждой перемотке. Хотелось бы узнать как лучше поступить в такой ситуации. ps от этого com интерфейса крыша едит уже и почему всё так сложно!))) Всех с Праздником!!! |