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

Вниз

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

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

Наверх




Память: 0.57 MB
Время: 0.039 c
1-1100767996
doma
2004-11-18 11:53
2004.12.05
ToolWindow из Dllины


14-1100796182
Marina_Sm
2004-11-18 19:43
2004.12.05
пример COM a на Delphi


3-1099547585
DimDim
2004-11-04 08:53
2004.12.05
Что за база?????


14-1100515598
AlexG
2004-11-15 13:46
2004.12.05
Что за Delphi 2005


14-1100697719
_none_
2004-11-17 16:21
2004.12.05
как сравнить 2 переменных типа TGUID...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский