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

Вниз

DirectShow. Как воспроизвести сразу 2 видеокамеры?   Найти похожие ветки 

 
WondeRu ©   (2004-07-29 15:07) [0]

Есть карточка захвата! К 2-ум композитным входам подключены камеры! Написал прогу, которая вызывает IAMCrossbar PropertyPage, там можно выбрать лишь одну камеру для текущего графа!
Как одновременно воспроизвести и получить опорные кадры с этих камер???


 
Анонимщик ©   (2004-07-29 17:57) [1]

Одновременно никак, у тебя ведь каналы коммутируемые. Делай что-то вроде IAMCrossBar.Route(0, 0) получай с одного канала, потом IAMCrossBar.Route(0, 1) - с другого.


 
Анонимщик ©   (2004-07-29 17:58) [2]

Забыл спросить. Сколько у тебя на карточке микросхем bt8xx? Если одна, то делать нужно так, как я сказал. Если две, тогда можно и "одновременно".


 
WondeRu ©   (2004-07-30 12:24) [3]

2Анонимщик ©
Одна микросхема!

Другой вопрос: Я работаю в режиме Preview! А как сделать так, чтобы картинка не показывалась, т.е. картинка шла в какой-нить буфер, а затем бы я его прорисовывал в зависимости от камеры на две области?

Использую компоненты DSPack, картинка выводится с помощью TVideoWindow! если нет его на форме, то граф создает свое окно и выводит картинку туда!


 
Анонимщик ©   (2004-07-30 12:53) [4]

Одна микросхема, значит - коммутация.

// пример, когда все создается в run-time:
// код пишу весь подряд, посмотри, кстати, тут кое-чего
// тебе сразу и не нужно, но потом пригодится

 FFilterGraph   := TFilterGraph.Create(nil);
 FFilter        := TFilter.Create(nil);
 FSampleGrabber := TSampleGrabber.Create(nil);

 FSampleGrabber.OnBuffer := NewPictureEvent; (* обработкой у меня эта пройедура занимается *)
 FFilterGraph.Mode := gmCapture;
 FFilter.FilterGraph := FFilterGraph;
 FSampleGrabber.FilterGraph := FFilterGraph;
 FFilterGraph.ClearGraph;
 FFilterGraph.Active := false;
 FFilter.BaseFilter.Moniker := AMoniker; (* об этом моникере сам позаботься следующим образом:
SysDev := TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
for i := 0 to SysDev.CountFilters - 1 do
begin
  SysDev.GetMoniker(i); // этот твои моникеры
end;
*)

 FFilterGraph.Active := true;

(FFilterGraph as ICaptureGraphBuilder2).FindInterface
       (
       nil,
       nil,
       FFilter as IBaseFilter,
       IID_IAMStreamConfig,
       FIAMStreamConfig
       );

(FFilterGraph as ICaptureGraphBuilder2).FindInterface
       (
       nil,
       nil,
       FFilter as IBaseFilter,
       IID_IAMVideoProcAmp,
       FIAMVideoProcAmp
       );

 (FFilterGraph as ICaptureGraphBuilder2).FindInterface
       (
       @LOOK_UPSTREAM_ONLY,
       nil,
       FFilter as IBaseFilter,
       IID_IAMCrossBar,
       FIAMCrossBar);

 (FFilterGraph as ICaptureGraphBuilder2).FindInterface
       (
       nil,
       nil,
       FFilter as IBaseFilter,
       IID_IAMAnalogVideoDecoder,
       FIAMAnalogVideoDecoder
       );

 (FFilterGraph as ICaptureGraphBuilder2).FindInterface
   (
   @PIN_CATEGORY_CAPTURE,
   @MEDIATYPE_Video,
   FFilter as IBaseFilter,
   PROPSETID_VIDCAP_CUSTOMBT848,
   FICustomCameraProp
   );

 (FFilterGraph as ICaptureGraphBuilder2).RenderStream
   (
   @PIN_CATEGORY_PREVIEW{@PIN_CATEGORY_CAPTURE},
   nil,
   FFilter as IBaseFilter,
   nil,
   FSampleGrabber as IBaseFilter
   );

FFilterGraph.Play;

В процедуре NewPictureEvent вызываешь процедуру
FSampleGrabber.GetBitmap(tmpBitmap, Buffer, BufferLen);

Что неясно?


 
WondeRu ©   (2004-07-30 13:04) [5]

Для моего случая я думаю можно отставить только создание
FIAMCrossBar и RenderStream. Я прав?

Если не сложно прокомментируй каждый FindInterface в 2-х словах. Что для чего? это так, для общего развития!


 
Анонимщик ©   (2004-07-30 13:08) [6]

Прав.
FIAMStreamConfig - для конфигурирования
FIAMVideoProcAmp - для получения/установки, например, яркости-контраста и т.д.
FIAMCrossBar - для переключения каналов (Route и get_IsRoutedTo)
FIAMAnalogVideoDecoder - для установки PAL/SECAM и т.д.
FICustomCameraProp - это выброси вообще, специфично для той карточки, что я использую
Более подробно читай в хелпе по интерфейсам и функциям.


 
WondeRu ©   (2004-07-30 13:17) [7]

Анонимщик, спасибо БОЛЬШОЕ за помощь!
Кстати, а где твоя анкета?


 
Анонимщик ©   (2004-07-30 13:20) [8]

Пожалуйста.


 
WondeRu ©   (2004-08-02 16:52) [9]

Вообще муть получается!!!(((
Кадры бегают! Нет синхронизации! Иногда част ькартинки с одной камеры налазит на др камеру!

После получения очередного кадра я прорисовываю картинку (на своем месте каждый канал), затем переключаю канал!

все дрыгается!

как правильно сделать, чтобы сразу показывать все 4 канала БиТишки в реалтайме?

код:


procedure TVideoCapture.SampleGrabberBuffer(sender: TObject;
 SampleTime: Double; pBuffer: Pointer; BufferLen: Integer);
var
 BIHeader: tagBitmapInfo;
 MediaType: TAMMediaType;
 xpos, ypos, Index: Integer;
begin
 try
   FSampleGrabber.SampleGrabber.GetConnectedMediaType(MediaType);
   if IsEqualGUID(MediaType.formattype, FORMAT_VideoInfo) then
   begin
     if MediaType.cbFormat = SizeOf(TVideoInfoHeader) then  // check size
       BIHeader.bmiHeader := (PVideoInfoHeader(MediaType.pbFormat)^.bmiHeader);
   end
   else if IsEqualGUID(MediaType.formattype, FORMAT_VideoInfo2) then
   begin
     if MediaType.cbFormat = SizeOf(TVideoInfoHeader2) then  // check size
       BIHeader.bmiHeader := (PVideoInfoHeader2(MediaType.pbFormat)^.bmiHeader);
   end;
 finally
   FreeMediaType(@MediaType);
 end;

 Canvas.Lock;
 try
   try
     SetStretchBltMode(Canvas.Handle, COLORONCOLOR);
     with BIHeader.bmiHeader do
       begin
         Index := FCrossbar.InputCrossbarPins[FCrossbar.RoutedInputPins[FCrossBar.NowRoute].PinIndex].PinIndex;

         xpos := (Index mod 2) * (biWidth div 2 + 5);
         ypos := (Index div 2) * (biHeight div 2 + 5);

         StretchDIBits(Canvas.Handle,
                       xpos,
                       ypos,
                       biWidth div 2,
                       biHeight div 2,
                       0,
                       0,
                       biWidth,
                       biHeight,
                       pBuffer,
                       BIHeader,
                       DIB_RGB_COLORS,
                       SRCCOPY);
       end;
   except
   end;
 finally
   Canvas.Unlock;
 end;
 
 //переключение камер
 if FCrossBar.RoutedInputPinsCount > 0 then
   FCrossBar.RouteNext;
end;



 
WondeRu ©   (2004-08-04 09:29) [10]

Может кто скажет в чем ошибка, плизз!!!


 
Анонимщик ©   (2004-08-16 16:58) [11]

Ветку наверх.
Ну как, получилось уже?


 
WondeRu ©   (2004-08-24 12:58) [12]

Анонимщик ©   (16.08.04 16:58) [11]
Ветку наверх.
Ну как, получилось уже?


неа! может я не в том месте переключаю каналы? где их щелкать?


 
Анонимщик ©   (2004-08-25 11:57) [13]

Щелкай где хочешь. Но потом либо делай задержку миллисекунд, скажем, 65, либо, что лучше, если у тебя карточка с родными драйверами и есть компакт с демо какими нибудь, то посмотри, как там сделан этот момент. Кстати, посмотри, сколько у тебя InputPins?


 
Sapersky   (2004-08-25 13:05) [14]

Не знаю, как там конкретно в DirectShow, но вообще при видеозахвате имеет смысл переключать каналы после прихода очередного кадра...
То, что синхронизации нет - ну, камеры не синхронизированы, вот её и нет :)
И реалтайм с 4 каналов определённо не получится... Делим 25 FPS на 4, да ещё, если синхронизации нет, дополнительные задержки при переключении... в общем, кадра 3-4 в секунду будет.


 
Анонимщик ©   (2004-08-25 13:57) [15]

Sapersky
А это вообще к чему?


 
WondeRu ©   (2004-08-25 14:31) [16]

Анонимщик ©   (25.08.04 11:57) [13]
сколько у тебя InputPins

4 шт!

где задержку?
у меня в коде после
if FCrossBar.RoutedInputPinsCount > 0 then
  FCrossBar.RouteNext; ????
Боюсь - там  никак! Отдельно таймер делать для переключения?


 
Sapersky   (2004-08-25 14:45) [17]

А это вообще к чему?

Это к
WondeRu ©   (02.08.04 16:52) [9]

Вроде бы в тему? :)


 
WondeRu ©   (2004-08-25 14:51) [18]

WondeRu ©   (25.08.04 14:31) [16]
4 шт!

вообще-то не помню! )


 
Анонимщик ©   (2004-08-25 15:32) [19]

WondeRu
Меня интересовали InputPins именно видео, и именно те, что соответствуют твоему выходу.
Так, вот еще увидел. Ты сначала пишешь, что у тебя два композитных входа, а затем - что четыре. Так сколько их?
Какая плата?
А количество пинов проверь с помощью вызовов нужных функций, а не на глазок.


 
WondeRu ©   (2004-08-25 15:59) [20]

Анонимщик ©   (25.08.04 15:32) [19]
плата дома валяется, сейчас вспомнить не могу (но отношение помню 3:1, тока не помню чего входит и чего выходит)! Вообще планировал сначала 2 камеры вешать на 2 композитных входа, но потом решил сделать на все (стандартная conexant bt 878: 2 composite, 1 tv, 1 s-video)!
Щас пытаюсь делать смотрелку для всех входов!


 
Анонимщик ©   (2004-08-25 18:15) [21]

Еще раз спрашиваю: как называется твоя карточка? Ты ее что, на мусорке нашел, что маркировки сказать не можешь? Что такое три к одному?


 
WondeRu ©   (2004-08-26 08:35) [22]

посмотрел! Пины: просмотр, запись, dvi, аналоговый выход! Карточка Conexant называется, на bt848!!! Об остальных параметрах - без понятия!


 
Анонимщик ©   (2004-08-26 12:02) [23]

Это не карточка Conexant называется, а микросхема. Не буду придираться, что ты там о пинах сказал, но видимо, тебе никто ничем не сможет помочь, так как информации о том, въехал уже чип в синхронизацию или нет, взять неоткуда. Поэтому делаешь так: после переключения канала ввыдерживаешь таймаут (от 60 до 80 миллисекунд) и толкьо потом обрабатываешь картинку на BufferCB.


 
WondeRu ©   (2004-08-26 12:54) [24]

Анонимщик ©   (26.08.04 12:02) [23]
вроде ясно!) Попробую! завтра результат сообщу!


 
ProtoStar   (2004-08-30 18:49) [25]

Можно поинтересоваться с какой целью пишется программа??.


 
WondeRu ©   (2004-08-31 09:29) [26]

ProtoStar   (30.08.04 18:49) [25]
Можно поинтересоваться с какой целью пишется программа??.


можно! Пишется (уже написана) программа распознавания различных дефектов поверхности металлов в рантайм! Видеокамерой посмотрели, и  тебе ответ "Типа классно сделали!!!" или "Уже пора выбрасывать железяку"!
написать-то написал, а в голову закралась мысль: "как сделать предпросмотр с 4-х камер?!" с тех пор и не вылазит оттуда!!! Может еще где пригодится!

Можно поинтересоваться, с какой целью Вы меня спрашиваете?


 
Sapersky   (2004-08-31 12:08) [27]

можно! Пишется (уже написана) программа распознавания различных дефектов поверхности металлов в рантайм!

Для таких целей (если требуется одновременно изображение с нескольких камер) всё же лучше несколько карт, или карта с несколькими чипами.
Платная версия драйверов Ивана Ускова, как заявлено, может работать с несколькими картами на BT.
Или есть карта, называется Flying Stream (сам с ней работаю) - но но она довольно дорогая, $200 с одним входом. Там свой API, и момент поступления кадра определяется вполне конкретно.
Относительно синхронизации камер - у некоторых (например, охранных, т.н. CCTV) есть синхронизация по питанию, line lock. Не очень удобно, правда - при включении в другую розетку нужно перенастраивать.


 
WondeRu ©   (2004-09-01 14:56) [28]

Sapersky   (31.08.04 12:08) [27]
может работать с несколькими картами на BT.

есть и бесплатные (по крайней мере для меня) версии!)
Да ладно, эта прога - пока только научная работа, а по заводам начну толкать только через год, когда универ закончу и еще одно НИИ подключу к работе!)

Sapersky   (31.08.04 12:08) [27]
есть синхронизация по питанию

с этого места можно поподробнее с указанием производителей?


 
Анонимщик ©   (2004-09-01 16:49) [29]

Все такие дорогие, тебе действительно realtime нужен? Точнее, сколько тебе нужно кадров в секунду с каждого входа? А что касается api, то они встречаются и для не очень дорогих карточек, и для них, действительно, можно узнать, с какого канала кадр и въехала ли уже микросхема в синхронизацию.


 
WondeRu ©   (2004-09-01 17:13) [30]

Анонимщик ©   (01.09.04 16:49) [29]
realtime нужен

ага
WondeRu ©   (31.08.04 9:29) [26]
написать-то написал, а в голову закралась мысль: "как сделать предпросмотр с 4-х камер?!" с тех пор и не вылазит оттуда!!! Может еще где пригодится!


кадров? чем больше тем лучше! CCTV делать не собираюсь, боюсь не составлю конкуренции даже самарским фирмам!


 
Sapersky   (2004-09-01 17:38) [31]

есть синхронизация по питанию
с этого места можно поподробнее с указанием производителей?


Ну вот, например:

http://www.akvilona.ru/brands/sanyo/description/mod000100010.htm

$140 вроде было... Можно найти дешевле (на том же сайте - KTC например), но в этой мне понравилось, что скорость затвора вручную менять можно - для разглядывания быстро движущихся предметов должно быть полезно, хотя ещё не пробовал. Опять же, есть подстройка синхронизации - сразу они совпадают весьма редко (у меня ни разу не совпали :)).
Но вообще лучше делать программу независимой от синхронизации. Тем более, если она нужна только для отображения (если я правильно понял).

А что касается api, то они встречаются и для не очень дорогих карточек, и для них, действительно, можно узнать, с какого канала кадр и въехала ли уже микросхема в синхронизацию.

Вообще да, уже после заказа FStream набрёл на сайт http://tuner.ixbt.com/ - там имеются примеры "прямой" работы с картами на BT.


 
ProtoStar   (2004-09-01 21:49) [32]

Просто я пишу програмное обеспечение для собственного видео сервера (показ видео по расписанию, наложение титров, региональные вставки рекламы и т.п.)


 
WondeRu ©   (2004-09-02 09:38) [33]

Sapersky   (01.09.04 17:38) [31]
как я понял, Вы занимаетесь CCTV, а какая контора?

ProtoStar   (01.09.04 21:49) [32]
Просто я пишу програмное обеспечение для собственного видео сервера

в локальной сети или есть поддержка инета?


 
Sapersky   (2004-09-02 10:36) [34]

Нет, я занимаюсь машинным зрением, измерением, точнее. Но по бедности использую оборудование CCTV (самая дешёвая промышленная камера, тот же Pulnix, стоит около $700).


 
Анонимщик ©   (2004-09-02 11:45) [35]

WondeRu
Ты вот пишешь, что тебе realtime нужен, а я не уверен, объяснил бы.

Sapersky
Ну и как успехи в зрении?


 
Sapersky   (2004-09-02 13:58) [36]

Ну и как успехи в зрении?

Некоторые есть, скажем так :). Выставочная установка хотя и не очень стабильно, но работает и будет на следущей неделе выставляться в Москве. Но до практического внедрения ещё довольно далеко.
Система - измеритель брёвен на конвейере. Имеется 3 лазера перпендикулярно конвейеру, они создают на бревне черту, камеры, стоящие под углом, эту черту фиксируют, затем программа "склеивает" полный профиль бревна, а поскольку бревно едет, получаем в результате его 3D-модель.
Одна из самых сложных проблем - как (и можно ли в принципе) откалибровать камеры по цилиндру, положенному на место бревна (т.е. по окружности, точнее, каждая камера видит полуокружность). Сейчас использую в качестве калибра классическую сетку (чёрные квадратики) и калибрую по Tsai, но в производственных условиях это неудобно.
Ранее здесь этот вопрос не задавал, считая, что бесполезно... но сейчас воспользуюсь случаем :)


 
Sapersky   (2004-09-02 14:23) [37]

Вполне возможно, в скором будущем мне тоже придется делать что-то подобное


 
Анонимщик ©   (2004-09-02 14:24) [38]

Это был мой пост, извини


 
WondeRu ©   (2004-09-03 08:42) [39]

Анонимщик ©   (02.09.04 11:45) [35]
Ты вот пишешь, что тебе realtime нужен, а я не уверен, объяснил бы.


реалтайм нужен для самообразования, а для оценки качества изделий - порядка 2 сек. ресчетов делается, так что реалтайм для моей текущей проги не нужен!)
но мы не стоим не месте: пока все алгоритмы на Делфи, планирую  переписать спорные моменты на асм с использованием SSE и 3DNow!, но это когда алгоритмы полностью проработают! Оптимизация, как говорится, - в самую последнюю очередь!)


 
WondeRu ©   (2004-09-03 08:45) [40]

Sapersky   (02.09.04 10:36) [34]
по бедности использую оборудование CCTV

такая же муть!
+ есть доступ свободный к оборудованию!
но по моему сугубо личному мнению лучше пользоваться (цена/качество) Computar или Pelco камерами!



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

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

Наверх




Память: 0.58 MB
Время: 0.027 c
1-1100802846
Sniper-Max
2004-11-18 21:34
2004.12.05
Edit и удобный ввод времени... Как это сделать?


9-1085760603
karlsn
2004-05-28 20:10
2004.12.05
Игра типа "экономика"


1-1101223880
kaktus
2004-11-23 18:31
2004.12.05
полосотый DBGrid


3-1099575771
Shalnsk
2004-11-04 16:42
2004.12.05
Delphi&navigator


8-1094119325
Hman
2004-09-02 14:02
2004.12.05
Громкость в WinAmp е