Перейти к содержанию
Fire Monkey от А до Я
  • 0

DirectShow9


OnePeople

Вопрос

Есть код определяющий количество аудиодорожек в видео

procedure TfGeneral.GetSoundStreamsCount;
var EnumFilters: IEnumFilters; {The Variables needed for Filter Operations}
BaseFilter: IBaseFilter;
FilterInfo: TFilterInfo;
Klasse:TGuid;
begin
fVideo.lbAudioStreams.Clear;
glb_SoundStreams:=0; {plain }
(pFilterGraph as IFilterGraph).EnumFilters(EnumFilters); {Enumerate Filters}
While (EnumFilters.Next(1, BaseFilter, nil)=S_OK) do
begin
BaseFilter.QueryFilterInfo(FilterInfo);
BaseFilter.GetClassID(Klasse);
if IsEqualGUID(Klasse,CLSID_DSoundRender)  then
begin
glb_SoundStreams:=glb_SoundStreams+1; {counting}
AddMenuItem(fVideo.lbAudioStreams,'Audio '+IntToStr(glb_SoundStreams),'','',nil,true);
end;
end;
end;

И есть файл в нем две дорожки Одна AC3, вторая DTS. По этому коду находит только DTS, в каком интерфейсе искать вторую?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Перерыв интернет так толкого ничего и не нашел пришлось читать майкрософта, может кому пригодиться:

 

Кол-во аудиодорожек и применение:

Спойлер

function GetFilterSplitter(vg:IGraphBuilder): IBaseFilter;
var EnumFilters: IEnumFilters;
  BaseFilter: IBaseFilter;
  FilterInfo: TFilterInfo;
begin
(vg as IGraphBuilder).EnumFilters(EnumFilters);
  While (EnumFilters.Next(1, BaseFilter, nil)=S_OK) do
    begin
      BaseFilter.QueryFilterInfo(FilterInfo);
      If pos('Splitter',FilterInfo.achName)<>0 then
        begin
          result:=BaseFilter;
          exit;
        end;
    end;
end;

procedure TfGeneral.GetSoundStreamsCount;
var
  SCount: Cardinal;
  BaseFilter: IBaseFilter;
  pMT:PAMMediaType;
  str: IAMStreamSelect;
  I: Integer;
  flag,cid,group:Cardinal;
  NStr:PWideChar;
  asd,unk: IInterface;
begin
  fVideo.lbAudioStreams.Clear;
  glb_SoundStreams:=0;
  BaseFilter:=GetFilterSplitter(pGraphBuilder);
  BaseFilter.QueryInterface(IAMStreamSelect, str);
  str.Count(SCount);
  for I := 1 to SCount do
    begin
      str.Info(i,pMT,flag,cid,group,NStr,asd,unk);
      if IsEqualGUID(pMT.majortype, MEDIATYPE_Audio) then
        begin
          glb_SoundStreams:=glb_SoundStreams+1;
          AddMenuItem(fVideo.lbAudioStreams,NStr+' (Audio '+IntToStr(glb_SoundStreams)+')',IntToStr(i),'',nil,true);
        end;
    end;
end;

procedure TfGeneral.SetAudioStream(dsGraphBuilder: IGraphBuilder;  TrackID: Integer);
var
  BaseFilter :IBaseFilter;
  str:IAMStreamSelect;
  SCount:Cardinal;
begin
  BaseFilter:=GetFilterSplitter(pGraphBuilder);
  BaseFilter.QueryInterface(IAMStreamSelect, str);
  str.Count(SCount);
  str.Enable(TrackID,AMSTREAMSELECTENABLE_ENABLE);
end;

 

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...