Форум: "Media";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
ВнизДеинтерлейс Найти похожие ветки
← →
Дмитрий Белькевич (2006-01-15 14:34) [0]Нужно захватывать из потока видео шоты. С частотой 1-10 кадров в секунду. Пробовали видезахваты на bt848 и pinnacle av/dv. Везде лезет небезывестная "гребенка".
Вопрос: можно ли как-то заставить граббер захватывать без интерлейса (или купить соответствующий граббер, если он такой существует). Просто голые идущие подряд кадры. На другом компьютере (до которого, к сожалению, нет доступа) с этого же источника всё захватывается безо всякого интерлейса. Что там за граббер, я, к сожалению, не знаю, и открыть посмотреть нельзя. Важен факт, что такое - возможно.
И второй вопрос: если уж нельзя это никак исправить, существуют ли какие-нибудь готовые бибилиотеки/плагины, к которым можно "подцепиться", что бы они на выходе давали деинтерлейсное видео?
← →
WondeRu © (2006-01-16 10:07) [1]через что захватываешь?
← →
Дмитрий Белькевич (2006-01-16 12:39) [2]1. Через свой захват.
2. Через Virtual DUB
3. Через Pinnacle Studio.
Результат один - на низком разрешении (352х288) - всё хорошо, на высоком (720х576) - лезет гребенка.
Нужно, если возможно, либо выключить интерлейс в захвате программно или с помощью настроек драйверов, правда, ничего нигде пока не нашёл,
либо к своему видеограбберу подцепить фильтр от даба, либо от чего-то еще.
← →
WondeRu © (2006-01-16 13:19) [3]если через 1, то можно подключить фильтр деинтерлейса, он снимает гребенку. Я подключаю фильтр "Nero Video Processor", он устанавливается совместно с пакетом "Nero 6".
← →
Дмитрий Белькевич (2006-01-16 13:33) [4]Спасибо, гляну.
← →
Дмитрий Белькевич (2006-01-17 03:00) [5]Уточнил у заказчика - неры купленной у его нет, а с лицензиями там всё жестко. Есть ли еще варианты?
Пробую достучаться до IID_IVMRDeinterlaceControl9.
Выдаёт VFW_E_VMR_NO_DEINTERLACE_HW когда вызываю GetNumberOfDeinterlaceModes.
Не могу нигде вразумительное описание по IID_IVMRDeinterlaceControl9 найти.
Еще вариант: если сохранить два кадра подряд, можно ли из них восстановить неинтерлейсную катинку, или это впринципе не возможно?
← →
AlterEgo of WondeRu © (2006-01-17 21:28) [6]Дмитрий Белькевич (17.01.06 3:00) [5]
Пробую достучаться до IID_IVMRDeinterlaceControl9.
у меня тоже не пашет! в документашке написано, что VMR9 поддерживает хардварный деинтерлейс, а может и только с ним работает! но я еще не встречал такой платы!
Дмитрий Белькевич (17.01.06 3:00) [5]
Уточнил у заказчика - неры купленной у его нет, а с лицензиями там всё жестко
там необходима только одна длл-ка NeroVideoProc.ax
← →
Дмитрий Белькевич (2006-01-17 23:22) [7]Как к этому NeroVideoProc.ax фильтру подключиться? Кинь, плиз, код сюда или на мыло и спасибо за информацию.
← →
AlterEgo of WondeRu © (2006-01-18 00:38) [8]Дмитрий Белькевич (17.01.06 23:22) [7]
вот куски кода, думаю так понятно, если чего обращайтесь
uses DSPack;
var
Nero: TFilCatNode;
FSysDev2: TSysDevEnum;
................
FSysDev2 := TSysDevEnum.Create;
for i := 0 to FSysDev2.CountCategories - 1 do
if FSysDev2.Categories[i].FriendlyName = "DirectShow Filters" then
begin
FSysDev2.SelectIndexCategory(i);
j := FSysDev2.FilterIndexOfFriendlyName("Nero Video Processor");
if j <> -1 then
Nero := FSysDev2.Filters[j];
Break;
end;
................
hr := CoCreateInstance(Nero.CLSID, nil, CLSCTX_INPROC, IID_IBaseFilter, pBase);
if hr = s_ok then
hr := (FFilterGraph as IGraphBuilder).AddFilter(pBase, "Nero");
if hr <> s_ok then begin
MessageBox(0,"Не удается добавить Nero к графу фильтров","", mb_OK);
exit;
end;
//рендер в два этапа
(FFilterGraph as ICaptureGraphBuilder2).RenderStream(@PIN_CATEGORY_CAPTURE,
nil,
FFilter as IBaseFilter,
nil,
pBase);
(FFilterGraph as ICaptureGraphBuilder2).RenderStream(nil,
nil,
pBase,
nil,
FVideoWindow as IBaseFilter);
← →
Дмитрий Белькевич (2006-01-18 04:14) [9]Большое спасибо!
Я с IVMRDeinterlaceControl9 еще не сдался ;)
В форуме откопал:
"To enable YUV mixing mode, call IVMRMixerControl::SetMixingPrefs with the
MixerPref_RenderTargetYUV parameter. This call must be made before any of
the VMR"s input pins are connected."
Ответ создателя темы:
Setting the mixing prefs did the trick! Thanks! Output is much
cleaner now.
То есть, судя по всему, таки завёлся железячный деинтерлейсер.
Сейчас ищу чей IVMRMixerControl интерфейс. vmr9 не признаётся - не его.
Пока нужно быстро, потом обязательно подниму, если сама железяка даст.
← →
WondeRu © (2006-01-18 09:53) [10]Дмитрий Белькевич (18.01.06 4:14) [9]
Сейчас ищу чей IVMRMixerControl интерфейс. vmr9 не признаётся - не его.
FVideoWindow: TVideoWindow;
procedure TVideoCapture.SetCounter(const Value: Integer);
var
pVMRMixerControl9 : IVMRMixerControl9;
hr: HRESULT;
begin
if VCap.Counter > -2
then FCounter := Value;
if Value < -1 then
if FVideoWindow <> nil then
begin
hr := FVideoWindow.QueryInterface(IID_IVMRMixerControl9, pVMRMixerControl9);
if hr = S_OK then
pVMRMixerControl9.SetAlpha(1, 0);
end;
end;
← →
Дмитрий Белькевич (2006-01-18 13:35) [11]У меня TDSVideoWindowEx2 ипользуется для вывода превью.
Пробовал вчера еще у DSVideoWindowEx2 запросить - тоже не возвращает, сейчас полезу внутрь к его полю FVideoWindow, или, может приведением Делфи сама разрулит.
← →
Дмитрий Белькевич (2006-01-19 04:35) [12]Попробовал с неро. Получился честный квадрат Малевича, как он должен быть.
Всё нормально поподключалось, результат - s_ok на всех концах, но в окне предпросмотра пусто, пробовал как DSVideoWindowEx2, так и VideoWindow.
Может какие-то интерфейсы неровского фильтра подёргать нужно для его настройки?
FVideoWindow в DSVideoWindowEx2 тоже IVMRMixerControl не отдал, с VideoWindow пока не пробовал.
← →
WondeRu © (2006-01-19 10:14) [13]Дмитрий Белькевич (19.01.06 4:35) [12]
черный квадрат может возникать из-за того, что ты меняешь настройки пинов уже после подключения НЕРО :) А надо ДО!
← →
Дмитрий Белькевич (2006-01-27 04:54) [14]Добрый день. Был некоторое время в разъездах. Вот приехал, таки удалось всё посоединять и настройки не менять. Все заработало, деинтерлейс даёт. Но есть одно но - скорость. Получается где-то 0,2 - 0,5 фпс. Т.е. одного кадра нужно ждать 2-10 секунд. Процессор при этом (слабенький, правда - дюрон 1200), почти не загружен где-то 3-4%. Можно ли как-то от фильтра добиться работы в реальном времени? Спасибо за советы, очень помогают.
← →
vrem (2006-01-27 05:18) [15]>захватывать без интерлейса
Автор, видео идёт полями, все чётные строки, затем все нечётные, 50 полей в секунду. деинтерлейсеры клеют эти поля разными способами. Без интерлейса - это вам какое то одно поле захватывать надо, всё остальное полумеры :)
← →
Дмитрий Белькевич (2006-01-27 12:05) [16]Вот хочу заодно разобраться.
Четные/нечетные, в одном кадре - это всё понятно. Непонятно только, что обозначает слово "поля". Вот перед мной телевозор. Он в один момент времени показывает один кадр. Так? Так. В одном кадре, например, в PAL"е, 625 строчек так? Так. Я эти 625 строчек вижу? Скорее всего да, если сильно нужно, могу специально осцилограф на модулятор ткнуть и посчитать. Они размазаны гребенкой? Нет. Значит где-то этот телевизор эти строчки берет? Берет. 50 раз в секунду показывает честные кадры. Или в телевизоре реально 625/2 строчек, а остальное - эффекты интерполяции?
Как это клеит телевизор? Был бы алгоритм - сам бы написал. Благо asm, mmx, sse владею. Чувствую, будет как обычно. Помаюсь с чужой кривизной, и придётся свое что-то делать.
Спасибо за ответы.
← →
Иванов (2006-01-27 13:19) [17]В телевизоре показывается первое поле, затем через 1/50 секунды второе с небольшим смещением вниз. Проблема гребенки состоит в том, что в первом поле и во втором поле находится информация за разные моменты времени.
Деинтерлейс или пытается пересчитать оба поля к одному времени (достаточно долго по времени) или просто показывает поля (с половинным разрешением) друг за другом с частотой 50 кадров в секунду.
А нельзя в Вашей задаче захватить с интерлейсом, а потом не спеша выполнить деинтерлейс? Пусть даже с 0.5 fps
← →
Дмитрий Белькевич (2006-01-27 14:42) [18]Непонятно, почему фильтр (пробовал уже три - nero, как советовали, и две реализации фришного deintarlace) не грузит процессор почти. Интересно, если поставить на более мощную машину, поможет или нет?
Можно считать данные и позже, после захвата. Реалтайм не нужен.
← →
Дмитрий Белькевич (2006-01-27 14:49) [19]Еще насчет телевизора.
Тв показывает с частотой 50 Гц. Сигнал тоже идёт с этой частотой.
Свалился кадр номер один. В нём 625 строк. И что телевизор с ними делает? Показывает вначале четные, потом нечетные? Или запоминает (там линии задержки есть, насколько я помню) кадр, потом четные сточки первого мешает с нечетными второго, а четные второго с нечетными третьего. Тогда тв должен 100 гц показывать, иначе времени не хватит.
Не понимаю.
← →
Sapersky (2006-01-27 14:49) [20]Описание некоторых алгоритмов деинтерлейса:
http://compression.graphicon.ru/video/deinterlacing/deinterlacing.pdf
Кроме того, судя по информации из DX SDK, деинтерлейс может делать видеокарта при выводе через оверлей, правда, только довольно примитивным методом BOB, примерно то, что в статье называется Duplicate field. Хотя на практике вполне может оказаться, что подобных видеокарт не существует - в DX предостаточно никем не поддерживаемых возможностей.
← →
AlterEgo of WondeRu © (2006-01-29 21:16) [21]Дмитрий Белькевич (27.01.06 14:42) [18]
c NERO у меня грузит проц... притом замечательно... на 60% на обеих машинах: Athlon64 3000+ и Athlon64 2800+ по 512Мб на борту
← →
Дмитрий Белькевич (2006-01-29 21:41) [22]Спасибо за ссылку. Я уже как-то задавал вопрос, но в ответ тишина. Вторая попытка: как подлючить фильтры virtualdub"а?
← →
Дмитрий Белькевич (2006-01-29 21:57) [23]Посмотрел, фильтр всего две функции экспортирует:
000028B0 1 0000 VirtualdubFilterModuleDeinit
00002870 2 0001 VirtualdubFilterModuleInit2
Пойду сырцы даба ковырять, что-то ж он им передаёт....
← →
Дмитрий Белькевич (2006-01-31 04:59) [24]
> c NERO у меня грузит проц... притом замечательно... на 60%
> на обеих машинах: Athlon64 3000+ и Athlon64 2800+ по 512Мб
> на борту
Realtime renderring получается?
← →
WondeRu © (2006-01-31 09:04) [25]Дмитрий Белькевич (31.01.06 4:59) [24]
Realtime renderring получается?
Угу... приложение писал для одного ночного клуба... там именно пришлось применить NERO, для того чтобо нормально картинка выводилась с тюнера
← →
Дмитрий Белькевич © (2006-02-18 21:08) [26]Я, надеюсь, еще не надоел ;)
Добрался я опять до интерлейса.
Фильтр таки заработал, правда, не неровский, использовал фришный deinterlace.ax. Но есть одна особенность.
Перед подключением его к графу (CoCreateInstance, AddFilter(DeinterlaceFilter, "Deinterlace")), нужно обязательно вызвать страницу настроек:
OleCreatePropertyFrame(Handle, 30, 30, nil, 1, @StreamConf, auuid.cElems, auuid.pElems, 0, 0, nil);
иначе работает так, как я описывал выше - процессор почти не загружен, fps падает вначале до 5, потом медленно поток почти останавливается.
Если перед подключением фильтра вызвать страницу настроек потока, всё ок. Фильтр работает, загрузка - 50-55%. Может еще какие-нибудь умные у
кого мысли возникнут. Спасибо.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.042 c