Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

DSPack   Найти похожие ветки 

 
palgen ©   (2005-10-09 22:43) [0]

Нужно брать сигнал с видеовхода TVTuner. По умолчанию сигнал берется с самого тюнера. Как мне программно изменить источник сигнала? Или иными словами у Filter есть BaseFilter, в котором можно это настроить (composite in - TVTuner - SVideo) через WDM Video Capture Sourse, а мне нужно это задать при запуске программы. Есть какие-нибудь идеи ?


 
WondeRu ©   (2005-10-10 08:39) [1]

Через Crossbar


 
palgen ©   (2005-10-10 17:33) [2]

А как его задать в программе в виде строки листинга ?


 
palgen ©   (2005-10-11 20:01) [3]

у какого элемента есть crossbar ? у Filter ?


 
palgen ©   (2005-10-12 17:08) [4]

задал croosbar , но на него реагирует только первое устройство - на второе устройство никакого действия ... почему ?


 
Анонимщики ©   (2005-10-12 17:30) [5]

У меня уже нет сил слушать твои причитания.
Интерфейс IAMCrossBar предоставляет не фильтр какой-то, а менеджер графа фильтров. А у фильтра его лучше не запрашивать.
Но есть еще вариант. Иногда с драйвером захвата идет еще и фильтр с названием вроде чего_то_там_CrossBar_чего_то_там_снова. Тогда можно и через этот фильтр работать.

По теме - посмотри примере в DSPack"е, как с помощью интерфейса IMoniker выбирать именно нужное устройство, по FriendlyName, например.

Вообще - тебе не совестно пытаться заниматься видеозахватом черте какое время и не понимать азов?


 
palgen ©   (2005-10-15 18:59) [6]

Вот листинг программы -
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var    
   hR1: HRESULT;
   hR2: HRESULT;
   CrossBar1: IAMCrossbar;
   CrossBar2: IAMCrossbar;
   SysDev: TSysDevEnum;
   i: integer;
   Device: TMenuItem;
begin
   SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
   if SysDev.CountFilters > 0 then
       for i := 0 to SysDev.CountFilters - 1 do begin
           Device := TMenuItem.Create(Devices);
           Device.Caption := SysDev.Filters[i].FriendlyName;
           Device.Tag := i;
           Devices.Add(Device);
         end;
//======== инициализация фильтра1 и графа1 ===============================
     FilterGraph.ClearGraph;
     FilterGraph.Active := false;
     Filter.BaseFilter.Moniker := SysDev.GetMoniker(TMenuItem(Sender).tag); - выбор устройства №1
     FilterGraph.Active := true;
     //============ запуск рендера1 и выставление параметров ==================
     with FilterGraph as ICaptureGraphBuilder2 do begin
         hR1 := FindInterface(@LOOK_UPSTREAM_ONLY, nil, Filter as IBaseFilter, IID_IAMCrossbar, CrossBar1);
         if (SUCCEEDED(hr1)) then begin
             with Crossbar1 as IAMCrossbar do begin
               Route(0, 1); - устанавливает в Composite In
               end;
           end;
         end;
     with FilterGraph as ICaptureGraphBuilder2 do begin
         RenderStream(@PIN_CATEGORY_CAPTURE, nil, Filter as IBaseFilter, SampleGrabber as IBaseFilter, VideoWindow as IbaseFilter);
       end;
     SetVideoParams(FilterGraph as ICaptureGraphBuilder2, PIN_CATEGORY_CAPTURE, Filter as IBaseFilter);
     //============ запуск графа1 =============================================
     FilterGraph.Play;
     //============ инициализация фильтра2 и графа2 ===========================
     FilterGraph1.ClearGraph;
     FilterGraph1.Active := false;
     Filter1.BaseFilter.Moniker := SysDev.GetMoniker(TMenuItem(Sender).tag+1); - выбор устройства №2
     FilterGraph1.Active := true;
     //============ запуск рендера2 и выставление параметров ==================
     with FilterGraph1 as ICaptureGraphBuilder2 do begin
         hR2 := FindInterface(@LOOK_UPSTREAM_ONLY, nil, Filter1 as IBaseFilter, IID_IAMCrossbar, CrossBar2);
         if (SUCCEEDED(hr2)) then begin
             with Crossbar2 as IAMCrossbar do begin
               Route(0, 1); - устанавливает в Composite In
               end;
           end;
         end;
     with FilterGraph1 as ICaptureGraphBuilder2 do begin
         RenderStream(@PIN_CATEGORY_CAPTURE, nil, Filter1 as IBaseFilter, SampleGrabber1 as IBaseFilter, VideoWindow1 as IbaseFilter);
       end;
     SetVideoParams(FilterGraph1 as ICaptureGraphBuilder2, PIN_CATEGORY_CAPTURE, Filter1 as IBaseFilter);
     //============ запуск графа2 =============================================
     FilterGraph1.Play;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function SetVideoParams(CB_B2: ICaptureGraphBuilder2; Category: TGUID;
fSource: IBaseFilter): HResult;
var
   StreamConf: IAMStreamConfig;
   PAMT: PAMMediaType;
begin
   Result:= E_FAIL;
   StreamConf:= nil;
   PAMT:= nil;
   try
     Result:= CB_B2.FindInterface(@Category, @MEDIATYPE_Video, fSource, IID_IAMStreamConfig, StreamConf);
       if Assigned(StreamConf) then
         begin
             StreamConf.GetFormat(PAMT);
               if Assigned(PAMT) then
                 begin
                   if PAMT.cbFormat= sizeOf(TVideoInfoHeader) then
                     begin
                       PVIDEOINFOHEADER(PAMT^.pbFormat)^.bmiHeader.biWidth:= x_res;
                       PVIDEOINFOHEADER(PAMT^.pbFormat)^.bmiHeader.biHeight:= y_res;
                       PVIDEOINFOHEADER(PAMT^.pbFormat)^.bmiHeader.biBitCount:= 24; //rgb24
                       PVIDEOINFOHEADER(PAMT^.pbFormat)^.AvgTimePerFrame:= 10000000 div 25; //25 fps
                       with PVIDEOINFOHEADER(PAMT^.pbFormat)^.bmiHeader do
                       PAMT^.lSampleSize := ((biWidth + 3) and (not (3))) * biHeight * biBitCount shr 3;
                       PVIDEOINFOHEADER(PAMT^.pbFormat)^.bmiHeader.biSizeImage:= PAMT^.lSampleSize;
                     end;
                   Result:= StreamConf.SetFormat(PAMT^)
                 end;
         end;
         result:= S_OK;
   except
   on E: Exception do
   MessageBox(0, PChar(E.Message), "", MB_OK or MB_ICONERROR);
   end;
   StreamConf:= nil;
   if Assigned(PAMT) then DeleteMediaType(PAMT);
end;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Route действует только на устройство №1, на №2 вообще никакого действия... Что можно сделать ?


 
Анонимщики ©   (2005-10-16 23:06) [7]

Да откуда же я знаю, что у теб за тэги?
И вообще, нет времени рабираться в твоем коде. Тебе направление дали, вот и дебажь.



Страницы: 1 вся ветка

Текущий архив: 2006.03.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
15-1140708360
Pazitron_Brain
2006-02-23 18:26
2006.03.19
USB 2


15-1140692403
старый маразматик(с)
2006-02-23 14:00
2006.03.19
... Но должны ли мы любить свою мать, невзирая ни на что?


4-1135711768
Варяг
2005-12-27 22:29
2006.03.19
Использование функции RegQueryValueEx()


3-1138109339
Tornado
2006-01-24 16:28
2006.03.19
MS SQL Server Connect


3-1138168743
Незнакомец
2006-01-25 08:59
2006.03.19
Правильный дроп таблицы