среда, 26 октября 2011 г.

НОВОСТЬ. Добавлена поддержка плат видеозахвата с форматом YUV.

Многие карты видеозахвата используют цветовую модель YUV (YUY2), которая не поддерживалась нашим программным обеспечением. Теперь есть возможность использовать и такие карты. Для этого необходимо установить обновление, которое можно взять с нашего ftp-сайта: ftp://ftp.nata-info.ru/software/dxcapture_update/dxcapture_update.zip
Также добавлен динтерлейс для высоты кадра более 288 линий.
Вот содержание файла readme.txt из архива:
Обновление для компонента DxCapture (видеозахват).

Добавлена поддержка плат видеозахвата с форматами YUY2 UYUV.
Добавлена поддержка деинтерлейса для кадров высотой более 288 линий (размер полукадра).
Установка:
Скопируйте содержимое архива в папку с установленной программой (с заменой dxcaptureu7.dll)
Установите один раз пакет поддержки VC2008 redist (vc2008redist_x86.exe), после установки файл можно удалить.
Запустите командный файл reg_dxcapture.cmd для регистрации библиотек.

Интерфейс:

Запустите программу. На вкладке "Видео-источник" появится кнопка с чередующимися полосами. Если высота кадра захвата превышает 288, то кнопка будет активна. Нажав на нее можно выбрать метод применяемый для устранения эффекта "гребенки" (денитерлейсинг). Выберите на закладке Deinterlace Settings лучший, на ваш взгляд, метод денитерлейса (при выборе пункта "Use DScaler Plug-in" нужно выбрать плагин из списка "DScaler Plug-in").

Рекомендации:

Для настройки размеров оцифровки выберите на вкладке "Видео-источник" профиль оцифровки из выпадающего списка (самый правый на панели) пункт "Редактировать". Представленные профили можно изменить или добавить новый.
Измените название профиля на удобное.
В секции "Размеры оцифровки" задайте размеры наиболее соответствующие размерам вашего экрана соблюдая пропорцию 4:3, чтобы не внести искажения в пропорций объектов. Некоторые карты могут не поддерживать все размеры (свойства карты можно посмотреть кликнув правой мышью по полю кадра видезахвата и выбрав пункт "Посмотреть возможности устройства"). В этом случае после сохранения изменений при повторном открытии будут выставлены наиболее близкие значения, вместо указанных вами.
В секции "Координаты видимой области" задайте размеры близкие к размерам указанным в секции "Размеры оцифровки", но соблюдая соотношения сторон вашего экрана. Эта область будет выделен на поле кадра захвата пунктирным прямоугольником, который можно таскать и изменять с помощью мыши.
В секции "Координаты вывода на экран" задайте размеры соответствующие вашему экрану.

понедельник, 24 октября 2011 г.

API. Планировщик.

Планировщик обычно используется во всех видеотабло, именно он отвечает за показ Списков воспроизведения. Планировщиков в конфигурации может быть несколько, например табло состоящих из нескольких частей, для которых требуется независимый вывод. С помощью планировщика можно загружать списки воспроизведения, логотипы, приостанавливать воспроизведение, обновлять журнал воспроизведения и т.д. Еще одним замечательным свойством планировщика, является выполнение пользовательских скриптов, заданных в плейлисте. Таким образом в плейлист, после заданного клипа, можно вставить скрипт, если кликнуть мышкой по стрелке на кнопке "Вставить новый элемент" и выбрать "Мастер заданий".

Далее будем придерживаться соглашения, что код будет написан моноширинным шрифтом, вместо object должно стоять имя компонента, указанное в конфигурационном файле (не забудьте указать перед ним Application). В квадратные скобки будут браться необязательные параметры.

Программный идентификатор: progid:NISheduler.ShedulerUI

Примечание: Доступ из скриптов к объекту Планировщик на самом деле происходит через объект NISheduler.ShedulerUI, который агрегирует собственно сам Планировщик.

Свойства:

  • object.AutoRunFile [= строка]
    Файл со списком автозагрузки (autorun.xjob)
    Изменяя содержимое файла, можно добиться, что при следующем запуске будет загружен нужный плейлист
  • object.Playlist [= строка]
    Текущий плейлист. При присваивании аналогичен методу LoadPlayList(имяФайла, False, True)
  • object.Logos [= строка]
    Файл со списком логотипов.
  • object.Audio [ = булево значение (True|False)]
    Вывод звука.
  • object.StretchMode [= строка]
    Тип масштабирования для видеороликов.
    Допустимые значения:
    "stretch" - Растянуть под размер экрана.
    "crop" - Без масштабирования, видео обрезается под размер экрана.
    "preserveaspectratio" или "preserve" - Сохранить пропорции с рамкой. Видео на весь экран с сохранением пропорций. По краям могут возникнуть черные поля, если не пропорции видео не совпадают с экраном. Не обрезает.
    "preserveaspectratio_noletterbox" или "noletterbox" - Сохранить пропорции. Видео на весь экран с сохранением пропорций. Может обрезать края, если не пропорции видео не совпадают с экраном. Значение по умолчанию.
  • object.LogolistActive [= булево значение]
    Показывать логотипы.

Методы:

  • object.LoadPlayList имяФайла, безусловный, выполнить
    Загружает плейлист.
    имяФайла - Строка. Файл .xjob с плейлистом.
    безусловный - Булево значение. Если True, то немедленный запуск плейлиста; False - будет доигран текущий клип и затем загружен новый плейлист.
    выполнить - Булево значение. Запустить проигрыватель.
  • object.BackupAndEraseLog имяФайла
    Сохранить текущий файл журнала под именем имяФайла и очистить журнал.
  • object.PausePlaylist
    Приостановить вывод плейлиста.
  • object.ResumePlaylist
    Возобновить показ плейлиста.
  • object.PauseAll
    Приостановить показ (Плейлист/Логотипы/Видеозахват/Тест).
  • object.ResumeAll
    Возобновить показ.
  • object.RotateLogs
    Выполнить ротацию журнала (новое имя на основе текущей даты/месяца).
  • object.LoadLogoList имяФайла, выполнить
    Загрузить логотипы.
    имяФайла - Строка. Имя файла плейлиста с логотипами.
    выполнить - Булево значение. Начать показ логотипов.

Примеры использования:

В "Мастере заданий" представлены несколько примеров использования объекта Планировщик: Сменить/Очистить список воспроизведения, Сменить/Очистить список логотипов, Безусловная смена списка воспроизведения.
Предположим раз в день в 12 часов необходимо показать определенный плейлист, а в остальное время показывать стандартный список воспроизведения. Для этого создаем этот плейлист и в конец его ставим скрипт на выполнение "Сменить список воспроизведения" с указанием стандартного плейлиста. Сам скрипт будет выглядеть так (если имя планировщика в конфигурации задано как sheduler):
Application.Sheduler.Playlist="default.xjob"
Далее с помощью вкладки "Задания" создаем задание на запуск этого плейлиста в 12 ч. ежедневно. Учтите, если выбрать в задании "Сменить список воспроизведения", то плейлист загрузится не ровно 12 ч, а дождется завершения текущего активного клипа. Если необходимо запустить плейлист ровно в 12 ч выберите в Мастере заданий "Безусловная смена списка воспроизведения".

Введение в строение конфигурационного файла. Компоненты.

Эта статья является введением структуру конфигурационных файлов, что поможет в дальнейшем понять как обращаться к компонентам приложения из пользовательских скриптов. В следующих статьях я опишу API наиболее востребованных компонентов и примеры скриптов с наиболее востребованными функциями.

Само приложение может содержать множество компонентов и все компоненты должны быть описаны в конфигурационном XML файле. Такой файл лучше открыть с помощью редактора поддерживающего XML синтаксис или любым текстовым редактором, желательно поддерживающем кодировку UTF-8. Подойдет и Блокнот, только при сохранении файла под другим именем в диалоге Файл/Сохранить как... нужно указать Тип файла "Все файлы (*.*)", иначе Блокнот автоматически добавить расширение .txt. Настоятельно рекомендую сохранить резервную копию конфигурационного файла. Конфигурационных файлов для приложения может быть несколько, в этом случае необходимо указать дополнительный параметр при загрузке приложения -config:<Имя конфигурационного файла>.

Итак, вы сохранили резервную копию и теперь можно открыть конфигурационный файл для более детального рассмотрения. Если вы знакомы с XML-синтаксисом переходите к следующему абзацу, для остальных кратко: XML— это описанная в текстовом формате иерархическая структура, предназначенная для хранения любых данных. Визуально структура может быть представлена как дерево элементов. Элементы XML описываются тегами. Каждый элемент может содержать именованные атрибуты и содержимое. Элемент обычно состоит из открывающего и закрывающего тегов, обрамляющих текст и другие элементы. Открывающий тег состоит из имени элемента в угловых скобках, например, <step>, а закрывающий тег состоит из того же имени в угловых скобках, но перед именем ещё добавляется косая черта, например, </step>. Содержимым элемента называется всё, что расположено между открывающим и закрывающим тегами, включая текст и другие (вложенные) элементы.

Не все элементы описанные в конфигурационном файле должны быть обязательно загружены. Некоторые можно отключать, это может быть иногда удобно. Для этого все элементы можно разбить на именованные группы и в конфигурационном файле указать какие группы вы хотите задействовать. Для этого обычно где-то вначале файла создается элемент <components> в котором перечислены задействованные группы компонентов в виде элементов <component>Имя группы</component> у которых содержимое является именем группы. Для указания, что данный элемент в конфигурационном файле относится к группе необходимо добавить к нему атрибут _component_dependent="Имя группы"

Будем считать, что с группами мы разобрались. Перейдем к самому важному для нас. Все компоненты в конфигурационном файле описываются элементом
<object name="Имя объекта" clsid="Программный идентификатор" description="Описание компонента"...>
</object>
Здесь указаны обязательные атрибуты "Имя объекта" - по этому имени этот компонент будет доступен из скриптов. "Программный идентификатор" - название класса компонента, все API привязаны именно к данному классу. Доступ к приложению из скриптов должен начинаться с объекта Application, за которым через точку идет имя объекта указанное в конфигурационном файле. Далее я расскажу о доступных свойствах и функциях (API) для наиболее востребованных классов, которые вы сможете использовать в своих скриптах.

понедельник, 17 октября 2011 г.

Настройка управления яркостью видеоэкранов

В прошлой статье рассказывалось как настроить службу NiBUS, после чего можно перейти к вопросу как правильно настроить управление яркостью из ПО AdvertisePro. Это необходимо если в журнале сообщений есть сообщение "Не задана конфигурация цифровой магистрали" или периодически появляются сообщения "Ошибка установки MIB-переменной Brightness".
Откройте программу, выберите меню Сервис/Настройка.../DVIMaster. В окне справа необходимо задать адрес "нулевого" входного модуля. Если список пуст, добавьте новое устройство кнопкой в правой части окна. Адрес вводится в шестнадцатеричном формате в виде Домен.Группа.Устройство. Домен всегда равен FF, устройство равно 01, а группа задается во входном модуле с адресом 0.0 видном на индикаторах на задней панели. Номер группы хранится в 15 параметре. Чтобы его посмотреть или изменить используйте три кнопки на плате управления модулем. Нажмите среднюю кнопку, чтобы перейти в режим правки/просмотра (нажатие 1 и 3 кнопки одновременно выведет модуль в обычный режим, выход также осуществляется при переходе к следующему параметру при редактировании последнего параметра а также при истечении таймаута нажатия кнопок в течении 40 секунд ). На индикаторе слева будет показан номер параметра, справа его значение. Для перехода к следующему параметру жмите первую (левую) кнопку, для перехода к предыдущему первую и вторую одновременно. Нажатие средней кнопки увеличивает значение, правой - уменьшает значение параметра. Список всех параметров можно найти в документе .\docs\mcdvi.tech_ref.pdf. Переходим к 15 параметру (номер параметров и их значения отображаются шестнадцатеричном формате) и запоминаем его или меняем на требуемый. Обычные значения группы FF (255) или 00. Чтобы не бегать в экран при вводе адреса можно попробовать ввести сначала адрес FF.FF.01 или FF.00.01, в поле MIB-файл нужно выбрать mcdvi.mib.xsd (для старых LVDS экранов здесь нужно указать dvimaster.mib.xsd)  и нажать кнопку проверить. Если появится сообщение MIB-устройство успешно опрошено можно жать кнопку OK и попробовать изменить яркость экрана ползунком для задания яркости экрана в программе. Если в сообщении указано, что устройство опрошено но не совпадает тип, значит мы указали адрес другого устройства (обычно это DVI-мастер в экранах с передачей по оптике). Попробуйте следующий адрес. Если и он не подходит, то следует убедиться, что все устройства подключены к 485 интерфейсу и все таки посмотреть 15 параметр у входного модуля, чтобы быть уверенным, что адрес задан правильно.

Настройка службы NIBUS.

После установки ПО AdvertisePro (Nata Supervision) в списке доступных служб (Панель управления/Администрирование/Службы) появляется служба nibus, которая позволяет обмениваться информацией с NiBUS устройствами по одноименному протоколу, используя 485 интерфейс. В частности для управления яркостью экрана. После установки требуется задать порт, через который будет проходить обмен информацией и скорость обмена. Чтобы задать эти параметры необходимо выполнить команду (Пуск/Выполнить или набрать в командной строке):
nibuss -c
В открывшемся окне укажите порт и скорость. Если у Вас Windows 7/Vista и включен UAC, то команду нужно запускать от имени администратора. Для связи по 485 интерфейсу используется трансиверы внешний Siolynx (подключается к RS232) или Siolynx 2 - подключается к USB и бывает внутренний в виде платы или внешний. Также возможно прямое подключение RS232 -> DVI master. Если подключение прямое к DVI-master, то скорость должна быть указана 28800, во всех остальных случаях 115200. Чтобы проверить правильность настроек и работоспособность трансивера Siolynx можно ввести команду:
ipgm -mib siolynx -ds
На выводе должен быть что-то похоже на это:

Nata-Info iDevices programmer. v.1.0.80, Jan  5 2009
Developed by Andrey Ivanov <support@nata-info.ru>
Copyright (c) 2009 Nata-Info Ltd. All rights reserved.

>> Parsing device MIB siolynx: OK
>> Binding to pipe: OK
>> Ackquiring device data (19 variables): .................OK
--- Трансивер SioLynx ---------------------------------------
1.                                     Address: 00:00:00:00:5C:6A
2.                                     Версия устройства: 2.0 [0x7]
3.                                Время с момента старта: 1091707, с
4.                                        Результат POST: 1792
5.    Коллизий при передаче дейтаграмм в rs485-интерфейсе: 0
6.                      Принято байт по rs485-интерфейсу: 0
7.                 Передано дейтаграмм в rs485-интерфейс: 2983
8.            Не отправлено дейтаграмм в rs485-интерфейс: 0
9.                      Обнаружено маркеров захвата шины: 0
10.                 Обнаружено маркеров освобождения шины: 0
11.                           Таймаутов освобождения шины: 0
12.              Ошибок синхронизации на rs485 интерфейсе: 0
13.          Игнорировано старт-битов на rs485 интерфейсе: 0
14.              Ошибок синхронизации на rs232 интерфейсе: 0
15.           Ошибок контрольной суммы в rs232 интерфейсе: 0
16.                Принято дейтаграмм по rs232 интерфейсу: 2998
17.                                     Переполнений фифо: 0
18.                             Записей в журнале событий: 0
Красным выделен MAC-адрес трансивера
Если вывод отличается, то скорее всего неправильно задан порт или трансивер Siolynx не исправен. После успешной проверки можно, например, запустить gMib2 указать тип устройства (меню Файл/Найденные в системе), его адрес и, если устройство доступно, активируются кнопки Обновить и Отправить.
В следующей статье будет рассказано как настроить настроить управление яркостью видеоэкрана.