Virtual Dub: Pause & Clipboard

Тема в разделе "WASM.SOFTWARE", создана пользователем Paguo_86PK, 21 июл 2009.

  1. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Предисловие автора:
    Нынче использую китайский видеоглазок, Chronos Video Shuttle 2, Virtual Dub 1.8 в качестве системы видеонаблюдения в одном "стратегическом" помещении.
    Как известно, дешёвые видеоглазки используют CMOS или другие пассивные и очень шумные матрицы.
    Захват идёт с разрешением 352x288 и частотой 5 кадров в секунду. Также, захватывается и один канал звука 16 бит 8 кГц.
    Видео на лету сжимается с помощью DivX-3 Low-motion 64kbps 100% качества и опорный кадр каждые 60 секунд. Звук - в MP3 1kbps.
    Каждый день пишется от 6 до 10 часов. И за первую неделю уже набралось почти 1Гб в 6-ти файлах! Конечно, это "видеосырьё" и многою вырежу/удалю. Но...

    Пролог:
    Уже на третий день достало то, что приходилось вручную расчитывать действие в кадре с реальным временем, так-как в кадре часов небыло и надо было дату создания файла калькулировать с позицией видео прямо мозгами. А это, понимаете, утомительно!
    Что-то не нашёл в сети я подобных фильтров, если даже они есть...
    Имеется Subtitler, но для работы в реальном времени он не годится и реальное время им не выведешь.

    Глава первая:
    Взял я SDK от Virtual Dub и за часа два отладил собственный фильтр, выводящий в углу кадра и дату, и время. Фонты - мои собственные 3x7, алгоритм - на ассемблере. В общем, работает довольно быстро и стабильно. Сутками гоняю, не повисло.
    В общем, собственным фильтром я доволен. Решил написать ещё версию.

    Глава вторая:
    Делал я одну утилиту. Работает в фоновом режиме. Следит за буфером обмена. Перехватывает текст на предмет наличия в нём первого слова "SEND". Т.е. работает как сервер. Почтовый. :)
    Так, пишешь в блокноте строку "SEND AC=75", наводишь указатель на нужное окно оставаясь в активном блокноте, жмёшь Ctrl+C и окно под указателем становится прозрачным на 75%.
    Если же скопировать строку "SEND WND", то в буфере утилита возвратит "RPLY HWND=идентификатор_окна". Т.е. функций много, полезных при отладке своих программ.
    Можно и дать команду отобразить HDC. Но, "опасная" штука почему-то, т.к. иногда система идёт на убийство...

    Глава третья:
    Решил я "скрестить" движок той утилиты с телом фильтра. Чтобы, когда это нужно, прямо из блокнота давать команды.
    Типо сменить позицию отображения времени/даты, цвет символов, вставить текстовую метку и т.д. Т.е. дотянуть фильтр до функций примитивного линейного монтажа.
    А то заходить в настройки фильтра и менять параметры - не очень весело...

    Эпилог:
    В операционной системе механизмы работы с буфером обмена реализованы не достаточно стабильно и оперативно. Сколько я занимаюсь этим, часто мой код или виснет, или вылетает. А иногда вызывает BSOD или просто вынуждает тупо жать Reset. Что в Windows'9x, что в NT...
    По-этому, идея "скрещивания" и заманчивая, и, в то же время, очень опасная, когда речь идёт о "стратегическом" видеонаблюдении.

    Комментарий автора:
    Хотел в свой фильтр добавить детектор движения. Но, в Virtual Dub не реализовано при захвате функции паузы. Как физически, со стороны пользователя, так и логически, средствами фильтров.
    Я вот не уверен. Но, подозреваю. Если я в фильтр и вживлю детектор движений, то как затем поступить? Ведь в лучшем случае, если фильтр не передаст кадр, Virtual Dub начнёт их дропать! А в худшем, всё может повиснуть.
    Как я уже сказал, видеоглазок очень "шумит". Хотя в видеопроцессоре я сделал насыщенность цвета очень малой, а яркость и контраст - предельными. Качество в моём случае не играет роли. Главное - зафиксировать сам факт происходящего. А тут нужен и детектор движения, и функция паузы.