Тормоза с vfw

Тема в разделе "WASM.WIN32", создана пользователем Exp10der, 24 янв 2009.

Статус темы:
Закрыта.
  1. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    Вобщем решил поиграть с веб камерой и чего то fps ~8-9 всего лишь, когда на сторонних прогах до 15-20 доходит, вот тривиальный кодес найденый в сети работает но.. в чём тормоз?..
    Код (Text):
    1. FCapHandle:=capCreateCaptureWindow('Video', WS_CHILD or WS_VISIBLE, 0, 0, PICWIDTH, PICHEIGHT, webcamForm.Handle, 1);
    2.  SendMessage(FCapHandle, WM_CAP_DRIVER_CONNECT, 0, 0);
    3.  SendMessage(FCapHandle, WM_CAP_SET_PREVIEWRATE, 15000, 0);
    4.  sendMessage(FCapHandle, WM_CAP_SET_OVERLAY, 1, 0);
    5.  SendMessage(FCapHandle, WM_CAP_SET_PREVIEW, 1, 0);
    6. ....
    7. SendMessage(FCapHandle, WM_CAP_SET_CALLBACK_FRAME, 0, 0);
    8.   SendMessage(FCapHandle, WM_CAP_GRAB_FRAME_NOSTOP, 1, 0);
    p. s. да и непонятно как девайс выбрать если у меня к примеру 4 камеры...
     
  2. agrischuk

    agrischuk New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2009
    Сообщения:
    47
    Как не странно, возможный тормоз - камера. Попробуй уменьшить разрешение, поиграйся с выходным форматом, попробуй отключить функцию авто-адаптации яркости (на logitech врядли получиться).

    На driver connect указываешь другой driver index.
     
  3. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    ...задача вообще сводится к максимально быстрому получению потока с нескольких камер и обработкой уже в моей проге, вот надо это реализовать и желательно без всяких извратов типа DShow ибо влом разбираться со всякими перегруженными всякой хренью интерфейсами, может напрямую к какому либо дрову подключиться и вкуривать поток через нечто подобное DeviceIoControl?

    agrischuk насчёт авто-адаптации яркости, vfw таких средств походу не предоставляет :dntknw: выставляешь разрешение 640/480 вместо 800/600 дефолтовых и изображение тупо обрезается вместо уменьшения тут дело не в размере картинки или формате - сторонние проги и на 800/600 - 20 фпс выдают....
     
  4. agrischuk

    agrischuk New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2009
    Сообщения:
    47
    "Другие проги" могут выдавать фиктивные фпс. Для дешевой камеры 640x480 - это хороший вопрос. Некотрые умудряються делать stretch с меньших резолюций.
    Далее. Предоставляет оно два макроса capCaptureSetSetup, capSetVideoFormat. Советую начать с их изучения. В первом случае имеется замечательный параметр wStepCaptureAverageFrames который иммено отвечает за формирование кадров из нескольких сэмплов. С помощью второго макроса следует начать кепчурить с разрешения 320x240 (QVGA). Также выключить кепчуринг звука, поставить несколько буферов и т. д.

    Мне удавалось получать 30 фпс QVGA на дешевом logitech.
     
  5. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    как то странно оно работает дёргаю capCaptureSequenceNoFile(FCapHandle); вроде чтоб на диск не скидывало ничего, и окно обновляется само по себе без моего участия... vfw вообще может просто дать буффер с данными и всё нигде ничего не отрисовывая.. я делал capSetCallbackOnFrame(Fcaphandle, @videoproc); но моя функция почемуто не получает управления... может у кого сорец найдётся толковый?...
     
  6. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    ..а всё отлично работает :) 15 FPS, пасиб за помощь..
     
Статус темы:
Закрыта.