Конференция "Media" » Окна, сообщения и VFW [D7, WinXP]
 
  • Pavia © (18.09.15 15:22) [0]
    Наконец-то руки дошли до VFW.  Делаю захват видео с камеры. Без записи в файл. Метод захвата через CallBack функцией capSetCallbackOnVideoStream
    ОС Win-10, D7.

    Вопрос в том что зависает. Судя по всему после запуска все сообщения перенаправляются в CaptureWindow, c Form1. Диспетчер задач кажет что приложение не отвечает. Мышка крутиться в виде часиков(кружочик). Видео нормально отображается. Что говорит что диспетчер не прав.

    А после любого действия,  напротив сообщения не доходят до CaptureWindow и попадают в Form1.
    Под любым действием имеется ввиду нажатия на другое окно или кнопку. Хотя перетаскивание окна работает.

    Окно видео захвата создаю так:

    function CreateCapHandle(var WindowHandle:HWND):Boolean;
    begin
     WindowHandle:= capCreateCaptureWindow('VFW capture window', WS_TILED, 0, 0, 0, 0, HWND(HWND_MESSAGE), 0);
     if (WindowHandle=0) then
        begin
          Log.WriteLn(LOG_ERROR, 'Could not create capture window.',[]);
          Result:=False;
        end;
    end;



    Думаю что HWND(HWND_MESSAGE) надо что-то другое. Но как-бы уже все варианты по пробовал эффект одинаков.
  • Pavia © (18.09.15 20:53) [1]
    Ураа!! Вопрос решён.
         FCAPTUREPARMS.fYield:=True;
         FCAPTUREPARMS.fAbortLeftMouse:=False;
         FCAPTUREPARMS.fAbortRightMouse:=False;
         SetCaptureParms(WindowHandle, @FCAPTUREPARMS);
  • DVM © (19.09.15 18:00) [2]
    2015 год на дворе, а VFW года 1993 все еще используется. Есть же DirectShow.
  • Pavia © (19.09.15 20:03) [3]

    > 2015 год на дворе, а VFW года 1993 все еще используется.
    >  Есть же DirectShow.

    VFW я начал разбираться ещё когда только изучал Delphi эдак в 2000 году. А посему я был готов к худшиму. DirectX в планах, пока руки до него не дошли. Просто я эту неделю на VFW угробил. Пока что за DirectX браться не готов. Мне нервы дорожи.

    Насколько помню VFW появился ещё раньше чем 93 год. Сколько же глюков в этом VFW. А в драйверах на веб-камеры ещё больше. Ух!!!

    Вот только DirectX не спасает от глюков драйверов. Всё приложение пришлось перестроить.

    capDriverConnect - в лучшем случае не запускается. Особенно после включения ПК. В худшем зависает.
    не все драйверы работают под отладчиком. В интернете рекомендуется пауза в 1 секунду после создания окна.
    WindowDestroy - виснет. Пока не знаю почему.
    Думаю что большую часть глюков можно решить за счет паузы и проверки состояния в колбеке.
    capCaptureStop - виснит заменил на capCaptureAbort

    Во время работы:
    Кадры могут случайным образом сменить свой формат. Пока добавил чтение формата.
    ICDecompress не поддерживает входной формат сжатия BI_RGB.
  • Дмитрий Белькевич © (21.09.15 12:44) [4]
    Нужно быть готовым к тому, что в захвате почти везде сплошной ад. И, да, лучше Direct Show. DSPack, в целом, справляется. Существуют его относительно новые версии.
  • han_malign © (28.09.15 17:23) [5]

    > 2015 год на дворе, а VFW года 1993 все еще используется.
    >  Есть же DirectShow.

    - дык он тоже не самый свежий...
    там и DirectX Media Objects - уже стало устаревшим подмножеством Media Foundation Transforms...
  • NeyroSpace (07.10.15 00:35) [6]
    ICDecompress много чего не поддерживает... в инете ходит модуль-обертка под IC*  функции, переведенный в делфи из сишного проекта VirtualDub. Так вот в модуле (и в виртуалдабе соответственно) куча ошибок. Многие вещи сделаны через Ж, лишь бы заработало, о чем и сказано в комментариях кода. Я потратил кучу времени, чтобы все это причесать и устранить, но, например, кодек MS h264 так и не удалось запустить.... Хотя подозреваю, что он тупо не может работать с форматом 24бит цвет, а хочет исключительно 16 бит. А xvid удалось побороть только с большим шаманским бубном - по непонятной причине он рушиться при определенном соотношении x к y (например, при 640х480, зато при 640х479 работает на ура).
    Сама концепция VFW подразумевала работу как с видео, так и с аудио фреймами, но добиться инициализации аудио компрессора так и не удалось... В общем я плюнул на это дело и стал биться головой о DirectShow. Но тут тоже идешь как чугунный скороход. Каждый маленький шажок стоит невероятное количество часов... Как только начинаешь писать свои фильтры, как всплывают ошибки в DSPACK. Опять-таки, весь инет с ними сталкивается и никто не может толком написать решения. Вдвойне обидно, что те, кто их уже решил не вносят правку в исходники.
    На гитхабе запостил пару корректировок не знаю внесут ли в сходник и вообще занимается ли этим кто-то или все опенсоурс сообщества только тырят друг у друга исходники и баг репорты) Гугл прикрыл у себя DSPACK, ну пересли его на гитхаб, а толку? Правок-то как не было, так и нет...
  • NeyroSpace (07.10.15 01:09) [7]
    ICDecompress обычно может выполнить преобразование лишь к формату RGB. Только кодек FFDShow может декомпрессировать кадр в нечто отличное. Т.е. он сначала внутри себя декомпрессирует в RGB, а потом преобразует в YUV или что-то подобное. Виндозные кодеки очень старенькие... а новых в VFW, кроме FFDShow и xvid больше нет. Сам же FFDShow и xvid используют DirectShow фильтры, а потом заворачивают поток в интерфейсы драйвера VFW.
    вот тут были исходники xvid для VFW, если интересно (да и сам кодек, думаю, тебе пригодится):
    http://www.koepi.info/xvid.html
    Это для некромантов и любителей написать костыли под какие-то ооочень старые, но надежные программы)

    Я когда писал передачу видео по сети, то захват все равно делал при помощи DirectShow грабера, а из VFW использовал только ICCompress/ICDecompress. А на самом деле вообще советую не тратить на VFW время, а погрузиться в директшоу. Правда, если захочется получить доступ к отдельным кадрам - придется писать свой фильтр и встраиваться в цепочку) Но, если въехал в концепцию - это уже не составит труда. Зато не будет разницы грабить видео фрэймы или аудио.
 
Конференция "Media" » Окна, сообщения и VFW [D7, WinXP]
Есть новые Нет новых   [134427   +37][b:0][p:0.001]