синхронизация ввода-вывода в драйвере видеокамеры (

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

  1. Vol4oK

    Vol4oK New Member

    Публикаций:
    0
    Регистрация:
    1 май 2006
    Сообщения:
    15
    Такая проблема, если кто знает как можно решить буду очень благодарен, есть видеокамера, под неё в винде установлен драйвер, для драйвера есть длл АПИ для работы с камерой, в этой длл есть функция для захвата картинки из камеры. В общих чертах функция работает следующим образом: шлёт IOCTL на драйвер видеокамеры и тупо ждёт ответа функцией GetOverlappedResult, но этот метод хреновый так как если вдруг чтото случится (например выдернут камеру) то прога будет ждать прихода запроса пока не придёт конец света (или ресет ;) ) что совсем не гуд. Естественно тут сразу напрашивается повесить этот Overlapped Event на WaitForSingleObject в котором можно поставить таймаут, но этот метод тоже хреновый для приёма видео, так как при захвате видео в реальном времени получается что при получении каждого кадра тред уходит в сон и потом просыпается, на всю эту батву тратится много времени поэтому камера вместо того чтобы показывать нормально видео с 15 фпс даёт всего 2,5 - что совсем хреново.
    Может в винде существуют какие нить другие более быстрые и неизвращённые способы решения этой проблемы???
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ну.. создать отдельный поток, который какнибудь кильнет первый если слижком уж занянется ожидание
     
  3. Vol4oK

    Vol4oK New Member

    Публикаций:
    0
    Регистрация:
    1 май 2006
    Сообщения:
    15
    я думал над этим вариантом, вообще видео принимается отдельным потоком, удалённо контролировать этот тред сложно, хрен пойми что он там делает принимает или тормозит, а если каждый кадр получать в отдельном потоке то я думаю что врятле он 15 фпс будет тянуть, создание потока потока давольно трудоёмкий,потом будет много гемора с передачей буферов между потоками, ну в крайнем случае можно попробовать и этот вариант. Вообще странно почему WaitForSingleObject работает так долго...
     
  4. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    уверен что это действительно так? по идее драйвер должен это предусмотреть
     
  5. Vol4oK

    Vol4oK New Member

    Публикаций:
    0
    Регистрация:
    1 май 2006
    Сообщения:
    15
    суть не в этом, да возможно этот вариант можно обработать как нить более корректно, но суть не в этом, нужно чтобы камера умела работать в режиме триггера, те аппаратно на камеру подаётся прерывание и она делает снимок, прога и драйвер в это время ожидает прихода этого кадра, но допустим это аппаратное прерывание не сработало, и нужно это корректно обработать, те прога должна выдать ошибку если триггер видео камеры не отвечает в течении какого-то времени, так что в любом случае нужно делать через таймауты.