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

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

наложение графики на видео

 
Пост #53493 от 13 мая 2008, 16:26 

Thomirov

Необходимо захватить видео с TV-тюнера Behold 609, ноложить свою графику (крест с возможностью перемещения пользователем) и вывести в preview
Отправить личное сообщениеПрофиль пользователяРоссия
Смоленск
Постов: 11
Нарушений: Нет
Пост #53516 от 16 мая 2008, 00:52 

Vlafy

Thomirov,
Это несложно. Можно реализовать несколькими путями. Если не нужен захват, а только просмотр, то самое простое - воспользоваться возможностью наложения в самом рендерере.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #53520 от 16 мая 2008, 08:31 

Thomirov

Захват можкт использоваться только 1 кадра - фотография......
Можеш подробнее расказать....?
Отправить личное сообщениеПрофиль пользователяРоссия
Смоленск
Постов: 11
Нарушений: Нет
Пост #53529 от 16 мая 2008, 19:12 

Vlafy

Thomirov,
А вы вообще имеете представление о том, как писать программы, работающие с ТВ-тюнерами? Если нет, то объяснять придётся долго. Сходите ещё сюда: http-ссылка
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #53540 от 17 мая 2008, 12:44 

Thomirov

Частично граф построить удаеться..... Прада не могу переключать каналы, похоже не установлен фильтр.....

добавлено спустя 2 минут

Да на основе этого сайта и делаю..... А вот как смещивать два канала - один с видео, а второй сос своей графикой и как эту графику сделать?
Отправить личное сообщениеПрофиль пользователяРоссия
Смоленск
Постов: 11
Нарушений: Нет
Пост #53542 от 17 мая 2008, 21:02 

alexplev

Здесь на сайте есть ссылка на книгу "DirectShow и телевидение", где описан весь процесс, который Вам нужен. Прочитайте и все станет ясно.
Отправить личное сообщениеПрофиль пользователя---
Постов: 5
Нарушений: Нет
Пост #53543 от 17 мая 2008, 22:29 

Vlafy

Thomirov,
У видео рендерера можно использовать несколько входов, на первый подавать видео с тюнера, на второй - вашу "графику". Если эта графика находится в файле, то надо использовать соответствующий source-фильтр для его чтения.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #53544 от 18 мая 2008, 00:19 

Thomirov

Так как смешивать понятно. Еще два вопроса:
1. Как переключать входы TV-тюнера (S-Video? Composit, TV) - вроде должен быть специальный фильтр, но в моей системе он не стоит.... Где его скачать и как поставить?
2. Как нарисовать отдельно свою гравику для смешивания - например крест (Delphi пример). Можете примерчик выложить?
Отправить личное сообщениеПрофиль пользователяРоссия
Смоленск
Постов: 11
Нарушений: Нет
Пост #53545 от 18 мая 2008, 00:48 

Vlafy

Thomirov : Как переключать входы TV-тюнера (S-Video? Composit, TV) - вроде должен быть специальный фильтр, но в моей системе он не стоит
Этого не может быть. Все фильтры ставятся при установке драйверов. Если драйвера установлены полностью и правильно, то всё там есть.
Эти фильтры называются TV Tuner и Crossbar. Посмотрите примеры сборки графов для работы с тюнерами, там ничего сложного нет.

Thomirov :Как нарисовать отдельно свою гравику для смешивания - например крест (Delphi пример)
У меня готовых примеров нет, да и дельфи я для этого не пользую, только MSVC++. Если нужно накладывать статичную картинку, то тут лучше писать свой фильтр и не заморачиваться наложением через рендерер. И скорее всего такие фильтры можно найти в инете (что-то типа фильтра наложения логотипа).
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #53546 от 18 мая 2008, 09:12 

Thomirov

Этого не может быть. Все фильтры ставятся при установке драйверов. Если драйвера установлены полностью и правильно, то всё там есть.:
[quote][/quote]
Вот Crossbar как раз и нет.... Где его можно найти?
Отправить личное сообщениеПрофиль пользователяРоссия
Смоленск
Постов: 11
Нарушений: Нет
Пост #53548 от 18 мая 2008, 11:54 

Vlafy

Thomirov : Вот Crossbar как раз и нет.... Где его можно найти?
Смотрите примеры графов для работы с тюнером. В графэдите кроссбар виден здесь: http://pctuner.ru/datas/users/3271-crossbar.gif

Обычно делается так:
// Включение нужного входа коммутатора (видео)
HRESULT CfvGraphCtrl::_SetVCrossbar(DWORD dwInput)
{
 HRESULT hr;
 long lOutPinCount,lInPinCount;
 long lOutVideoPinIndex=-1, lInVideoPinIndex;
 long lPhisicalPinInfo,lReleatedPin;
 IAMCrossbar *pCrossbar=NULL;

 do {
	
	hr = pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE,NULL,pBaseFilter, IID_IAMCrossbar, (void **)&pCrossbar);
	//hr=FindUpperXbar(pFilterGraph,pBaseFilter,&pCrossbar);
	assert(hr==0);
	if (FAILED(hr)) {
		hr=NO_CROSSBAR_FOUND;
		break;
	}

	//Включаем нужный вход коммутатора
	pCrossbar->get_PinCounts(&lOutPinCount,&lInPinCount);
	for (lOutVideoPinIndex=0; lOutVideoPinIndex<lOutPinCount; lOutVideoPinIndex++) {
		pCrossbar->get_CrossbarPinInfo(0,lOutVideoPinIndex,&lReleatedPin,&lPhisicalPinInfo);
		if (lPhisicalPinInfo==PhysConn_Video_VideoDecoder) {
			//Нашли видео выход коммутатора
			for(lInVideoPinIndex=0; lInVideoPinIndex<lInPinCount; lInVideoPinIndex++) {
				pCrossbar->get_CrossbarPinInfo(-1,lInVideoPinIndex,&lReleatedPin,&lPhisicalPinInfo);
				if (lPhisicalPinInfo==dwInput/*PhysConn_Video_Composite/*PhysConn_Video_Tuner*/) {
					//Нашли тюнерский вход платы захвата
					hr=pCrossbar->Route(lOutVideoPinIndex,lInVideoPinIndex);//Коммутируем...
					if (FAILED(hr)) hr=UNABLE_ROUTE_CROSSBAR;
					break;
				}
			}
		break;
		}
	}
 } while (FALSE);
 SAFE_RELEASE(pCrossbar);
 return hr;
}
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #53549 от 19 мая 2008, 11:17 

Thomirov

Завтра попробую

добавлено спустя 20 ч. 33 минут

Вопрос с Crossbar решен... Просто у меня оказалась русифицированная версия и не сразу сообразил где их иcкать

добавлено спустя 2 ч. 38 минут

Можеш расказать про рисование своей графики...

Графика предстовляет собой крест.... должна быть возможность его перемещния и поворота.... толщина - 1 пиксель экрана (именно экрана, а не видеоизображения - при увеличении видеоизображения крест должен оставаться неизменной толщины)
Отправить личное сообщениеПрофиль пользователяРоссия
Смоленск
Постов: 11
Нарушений: Нет
Пост #53921 от 3 июня 2008, 14:49 

Thomirov

Никто не рисовал графику в Preview?
Отправить личное сообщениеПрофиль пользователяРоссия
Смоленск
Постов: 11
Нарушений: Нет
Пост #53922 от 3 июня 2008, 16:44 

Vlafy

Thomirov,
Я делал тот же крест, но с помощью своего фильтра. Но тогда не получится реализовать требование "толщина - 1 пиксель экрана (именно экрана, а не видеоизображения - при увеличении видеоизображения крест должен оставаться неизменной толщины)". Потому что в фильтре можно менять только пиксели в исходной картинке. Конечно, можно сделать изменение разрешения в фильтре, чтобы он масштабировал исходную картинку к разрешению экрана, но возни много и ни к чему это, имхо. Зачем вам такое странное требование?
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #54077 от 10 июня 2008, 11:59 

Thomirov

Приходиться электронным способом масштабировать видео для просмотра мелких деталей - если делать в фильтр нет большого смысла... Наверное надо как-то перехватывать обновление поверхности на которую выводиться кадр видео и добавлять свою.... Но как это сделать я не знаю... Если не трудно пришли пример как делать свой фильтр. С DirectShow начал работать недавно и пока оч. многогих простых вещей не знаю
Отправить личное сообщениеПрофиль пользователяРоссия
Смоленск
Постов: 11
Нарушений: Нет
Пост #54083 от 10 июня 2008, 13:02 

Vlafy

Thomirov,
Есть хороший сайт http-ссылка Кроме того, на моём сайте ( http-ссылка ) тоже есть по этому поводу немного.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #54296 от 18 июня 2008, 11:42 

Thomirov

Хочу сделать следующим образом - захватываю кадр, масштабирую его, накладываю на него свою графику и вывожу на экран. И так с частотой 25 или 50 кадров.
1. Оптимально ли это?
2. Есть ли другой способ?
3. Как перехватывать захват кадра?

добавлено спустя 1 минута

Да и как перехватывать обновление окна вывода видеоизображения?
Отправить личное сообщениеПрофиль пользователяРоссия
Смоленск
Постов: 11
Нарушений: Нет
Пост #57105 от 23 октября 2008, 12:35 

andrju

Thomirov,
пиши свой видео рендер.
Отправить личное сообщениеПрофиль пользователяГермания
Постов: 6
Нарушений: Нет
Пост #61053 от 9 апреля 2009, 16:24 

Thomirov

Thomirov : Код:
// Включение нужного входа коммутатора (видео)
HRESULT CfvGraphCtrl::_SetVCrossbar(DWORD dwInput)
{
HRESULT hr;
long lOutPinCount,lInPinCount;
long lOutVideoPinIndex=-1, lInVideoPinIndex;
long lPhisicalPinInfo,lReleatedPin;
IAMCrossbar *pCrossbar=NULL;

do {

hr = pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE,NULL,pBaseFilter, IID_IAMCrossbar, (void **)&pCrossbar);
//hr=FindUpperXbar(pFilterGraph,pBaseFilter,&pCrossbar);
assert(hr==0);
if (FAILED(hr)) {
hr=NO_CROSSBAR_FOUND;
break;
}

//Включаем нужный вход коммутатора
pCrossbar->get_PinCounts(&lOutPinCount,&lInPinCount);
for (lOutVideoPinIndex=0; lOutVideoPinIndex<lOutPinCount; lOutVideoPinIndex++) {
pCrossbar->get_CrossbarPinInfo(0,lOutVideoPinIndex,&lReleatedPin,&lPhisicalPinInfo);
if (lPhisicalPinInfo==PhysConn_Video_VideoDecoder) {
//Нашли видео выход коммутатора
for(lInVideoPinIndex=0; lInVideoPinIndex<lInPinCount; lInVideoPinIndex++) {
pCrossbar->get_CrossbarPinInfo(-1,lInVideoPinIndex,&lReleatedPin,&lPhisicalPinInfo);
if (lPhisicalPinInfo==dwInput/*PhysConn_Video_Composite/*PhysConn_Video_Tuner*/) {
//Нашли тюнерский вход платы захвата
hr=pCrossbar->Route(lOutVideoPinIndex,lInVideoPinIndex);//Коммутируем...
if (FAILED(hr)) hr=UNABLE_ROUTE_CROSSBAR;
break;
}
}
break;
}
}
} while (FALSE);
SAFE_RELEASE(pCrossbar);
return hr;
}

Можеш привести пример на Delphi?
Отправить личное сообщениеПрофиль пользователяРоссия
Смоленск
Постов: 11
Нарушений: Нет
Пост #61587 от 30 апреля 2009, 23:06 

krym

Добрый день! У меня такой вопрос. Я живу в Алуште и хочу установить веб камеру на набережной с видом на ратоду (символ Алушты) есть ли камеры или как можно сделать, что бы на картинке было видно (www) на сайт который ее выставил. Или еще лучше ссылка. ( какая камера позволяет это сделать.
Отправить личное сообщениеПрофиль пользователяРоссия
Алушта
Постов: 1
Нарушений: Нет
Пост #61650 от 3 мая 2009, 02:12 

Rumlin

krym,
Вопрос в бюджете, лучшими считают IP камеры Axiss.
Вот пример работы . Программы в комплекте с камерой. Встраивание на сайт легко и непринужденно, но цена $$$ :)

Бюджетный вариант с поомщью компьютера и web камеры возможен программами, которые есть на этом сайте, но они не бесплатные.

Вот еще анонс. Что оно будет и когда - неизвестно.

Лучший вариант это IP камеры - минимум расходов на электроэнергию,компактно, удобно.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяКуба
Simferopol
Постов: 8031
Нарушений: Нет
Feci quod potui, faciant meliora potente
Пост #61887 от 12 мая 2009, 16:25 

Thomirov

Не могу понять почему нет захвата с тюнера.

procedure TForm2.Button4Click(Sender: TObject);
Var
  evCode :  Longint;
begin
  CoCreateInstance (CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IGraphBuilder, pGraphBuilder);
  CoCreateInstance (CLSID_CaptureGraphBuilder2, nil, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, pCaptureGraphBuilder2);

  CoCreateInstance (CLSID_BeholdCrosbar, nil, CLSCTX_INPROC_SERVER, IID_IBaseFilter, pCrosbar);
  CoCreateInstance (CLSID_BeholdCapture, nil, CLSCTX_INPROC, IID_IBaseFilter, pCapture);
  CoCreateInstance (CLSID_VideosRenderss, nil, CLSCTX_INPROC, IID_IBaseFilter, pVideoRenderss); 

  pCaptureGraphBuilder2.SetFiltergraph(pGraphBuilder);

{  pGraphBuilder.AddSourceFilter(StringToOleStr({Form2.OpenDialog1.FileName}{'c:\1.avi'), '', pSourceFile);     }

{  pGraphBuilder.AddSourceFilter('', 'Capture', pCapture);  }

  pGraphBuilder.AddFilter(pCrosbar, 'Crosbar');
  pGraphBuilder.AddFilter(pCapture, 'Capture');  
  pGraphBuilder.AddFilter(pVideoRenderss, 'VideoRenderss');

  pCrosbarOut := GetPin (pCrosbar, PINDIR_OUTPUT);
  pCaptureIn := GetPin (pCapture, PINDIR_INPUT);
  pGraphBuilder.Connect(pCrosbarOut, pCaptureIn);

  pCaptureOut := GetPin (pCapture, PINDIR_OUTPUT);
  pVideosRenderssIn := GetPin (pVideoRenderss, PINDIR_INPUT);
  pGraphBuilder.Connect(pCaptureOut, pVideosRenderssIn);

  pGraphBuilder.QueryInterface(IID_IMediaControl, pMediaControl);
  pGraphBuilder.QueryInterface(IID_IMediaEvent, pMediaEvent);

{  pGraphBuilder.RenderFile(StringToOleStr({Form2.OpenDialog1.FileName}{'c:\1.avi'), ''); } {
  pCaptureGraphBuilder2.RenderStream(nil, nil, pCrosbar as IBaseFilter, nil, nil);
  pCaptureGraphBuilder2.RenderStream(nil, nil, pCapture as IBaseFilter, nil, nil);  }
  pCaptureGraphBuilder2.RenderStream(nil, nil, pVideoRenderss as IBaseFilter, nil, nil);

  pGraphBuilder.QueryInterface(IID_IVideoWindow, pVideoWindow);
  pVideoWindow.put_Owner(Form2.Panel1.Handle);
  pVideoWindow.put_WindowStyle(WS_CHILD);
  pVideoWindow.put_Left(0);
  pVideoWindow.put_Width(Form2.Panel1.Width);
  pVideoWindow.put_Top(0);
  pVideoWindow.put_Height(Form2.Panel1.Height);

  pMediaControl.Run;
  pMediaEvent.WaitForCompletion(INFINITE, evCode);
Отправить личное сообщениеПрофиль пользователяРоссия
Смоленск
Постов: 11
Нарушений: Нет
Если Вы зарегистрированы, то для отправки сообщений, пожалуйста, авторизуйтесь.
-- ИЛИ --
Войдите, используя: Facebook Twitter Yandex Вконтакте Mail.ru ...
Страница создана за 0.116 секунды
Copyright © 1999-2012 PcTuner.Ru · Design by Alex Dovby