Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "Media";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.014 c
2-1141196983
Urvin
2006-03-01 10:09
2006.03.19
Тормоза Firebird a


2-1141296138
VitV
2006-03-02 13:42
2006.03.19
Выполнение запроса по нажатию кнопки...


2-1141639332
Dysan
2006-03-06 13:02
2006.03.19
как заменить программе саму себя?


4-1134847215
Wiz@rd
2005-12-17 22:20
2006.03.19
Dll или нет...


2-1141452138
Ezorcist
2006-03-04 09:02
2006.03.19
Недавняя олимпиада для школьников по прграммерству





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский