Имя:
Пароль:
-- ИЛИ --
Войти, используя:

Форум   Общая тематика и компьютеры   Программирование

не могу разобраться с получением интерфейсов

 
Пост #66783 от 6 апреля 2010, 20:21 

samael26

Здравствуйте, уважаемые программисты!
Необходимо захватить звук и видео с тв-тюнера и вывести их. Вначале делаю так:
 CoInitialize(nil);
 // создаём объект для построения графа фильтров
 if FAILED(CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IGraphBuilder, pGraphBuilder)) then
  begin
   ShowMessage('Ошибка создания графа фильтров!');
   Halt;
  end;

 // создаём объект для построения графа захвата
 if FAILED(CoCreateInstance(CLSID_CaptureGraphBuilder2, nil, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, pCaptureGraphBuilder)) then
  begin
   ShowMessage('Ошибка создания графа захвата!');
   Halt;
  end;

 // задаём граф фильтров для использования в построении графа захвата
 if FAILED(pCaptureGraphBuilder.SetFiltergraph(pGraphBuilder)) then
  begin
   ShowMessage('Невозможно задать граф фильтров для использования в построении графа захвата!');
   Halt;
  end;
граф представлен здесь
как дальше получить интерфейсы всех фильтров? если делаю так
var
  FindCLSID: TFilCatNode;
.............................................................
function  TfrmMain.GetCLSID(index : word) : TFilCatNode;
begin
 FSysDev2 := TSysDevEnum.Create;
 for i := 0 to FSysDev2.CountCategories - 1 do
  begin
   if FSysDev2.Categories[i].FriendlyName=NameCategoty[index] then
    begin
     FSysDev2.SelectIndexCategory(i);
     for j:=0 to FSysDev2.CountFilters-1 do
      if FSysDev2.Filters[j].FriendlyName=NameFilter[index] then
       Result:=FSysDev2.Filters[j];
     break;
    end;
  end;
end;
.....................................
 FindCLSID:=GetDeviceID(1);
 if Failed(CoCreateInstance(FindCLSID.CLSID, nil, CLSCTX_INPROC, IID_IAMTVTuner, pGotviewTvTuner)) then
  begin
   ShowMessage('Невозможно получить интерфейс Gotview Tv Tuner!');
   Halt;
  end;
то получаю все необходимые интерфейсы, но не у всех можно получить входные и выходные пины (например нельзя у Gotview Tv Audio и Gotview Crossbar)! может есть другой способ получения интерфейсов, чтобы можно было обратиться к пинам?!
Отправить личное сообщениеПрофиль пользователяРоссия
Рубцовск
Постов: 10
Нарушений: Нет
Пост #66787 от 6 апреля 2010, 23:59 

Vlafy

samael26,
В инете можно найти пример простейшей программы для построения графа захвата. Называется iuTuner, начните поиск с www.iulabs.com. Там будет понятно, как с этим всем работать.
Ещё можно посмотреть в исходниках Amcap.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #66798 от 7 апреля 2010, 17:56 

samael26

нашёл исходники iuTuner, а где можно взять исходники AMCap? чё-то нигде не могу найти. киньте линк плиз, буду очень благодарен
Отправить личное сообщениеПрофиль пользователяРоссия
Рубцовск
Постов: 10
Нарушений: Нет
Пост #66799 от 7 апреля 2010, 18:38 

Vlafy

samael26,
В DirectShow SDK (где-то до 2005-го года) и/или в Windows Platform SDK (после 2005-го).
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #66807 от 8 апреля 2010, 09:37 

samael26

попробовал такой способ
(FilterGraph as ICaptureGraphBuilder2).FindInterface((@look_upstream_only, nil, 
          GotviewTvTuner as IBaseFilter, IID_IAMCrossBar, pCB))

но эта строчка при дебаге выдаёт ошибку 'Interface not supported'...
что может быть причиной?!?! могу выложить исходники если надо. Помогите разобраться, ОЧЕНЬ СРОЧНО НАДО... диплом "горит"!!!! :-(
Отправить личное сообщениеПрофиль пользователяРоссия
Рубцовск
Постов: 10
Нарушений: Нет
Пост #66808 от 8 апреля 2010, 10:15 

Vlafy

samael26,
Вместо look_upstream_only поставьте PIN_CATEGORY_CAPTURE.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #66825 от 9 апреля 2010, 17:37 

samael26

Vlafy, СПАСИБО БОЛЬШОЕ ЗА ПОДСКАЗКУ!!!!!!!!! всё наконец-то заработало, щас буду собирать граф!

добавлено спустя 45 Минут

блин! рано обрадовался :-( почему пины не хотят соединяться?

добавлено спустя 15 часов 45 Минут

фильтры GotviewTvTuner и GotviewTvAudio не соединяются!
А если соединять GotviewTvAudio и GotviewCrossbar, то вылетает ошибка
что может быть причиной?

добавлено спустя 6 часов 48 Минут

всё! разобрался :-)
только теперь возникает вопрос: "как убрать окошко, которое открывается при запуске графа? причём оно открывается независимо от того, запущен ли режим ТВ или режим УКВ-приёмника!". кто знает, подскажите плиз...
Отправить личное сообщениеПрофиль пользователяРоссия
Рубцовск
Постов: 10
Нарушений: Нет
Пост #66856 от 9 апреля 2010, 19:36 

Vlafy

samael26 : как убрать окошко, которое открывается при запуске графа?
Какое окошко?
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #66885 от 12 апреля 2010, 11:10 

samael26

окошко называется "ActiveMovie Window"
Отправить личное сообщениеПрофиль пользователяРоссия
Рубцовск
Постов: 10
Нарушений: Нет
Пост #66891 от 12 апреля 2010, 18:36 

Vlafy

samael26,
У вас видео рендерер в графе есть, поэтому и окошко появляется. Уберите рендерер - перестанет появляться.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Если Вы зарегистрированы, то для отправки сообщений, пожалуйста, авторизуйтесь.
-- ИЛИ --
Войдите, используя: Facebook Twitter Yandex Вконтакте Mail.ru ...
Страница создана за 0.083 секунды
Copyright © 1999-2012 PcTuner.Ru · Design by Alex Dovby