SDK для FD422

Здесь обсуждаются любые продукты компании СофтЛаб-НСК для телевизионного вещания (Форвард Т, Форвард ТС, Форвард Голкипер, Форвард Рефери, Форвард Офис, Форвард Инжест)

Модераторы: ElenVR, Людмила, PR

Ответить
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Всё понятно. К сожалению, человек, который мог бы корректно ответить на этот вопрос, слегка приболел. Как появится на работе я попрошу его ответить.
Игорь Таранцев
Сообщения: 493
Зарегистрирован: 04 янв 2004 12:45
Откуда: СофтЛаб-НСК

Сообщение Игорь Таранцев »

kasa писал(а):Еще попутный вопрос. Получается, компонент CLSID_SLTMTitleServerTargetMgr работает с premultiplied картинками. Означает ли это, что я должен в FIFO буфер поставлять именно изображения в premultiplied? Или этим как-то железяка занимается?
Нет, программа всегда должна записывать в FIFO картинку в обычном формате (не premultiplied). Это наши внутренние "заморочки" с названиями, которые сложились по историческим причинам. Можно сказать, что железка занимается переводом в premultiplied формат.

Для плат FD322, FD422, FD842 нужно использовать константу:

Код: Выделить всё

extern "C" const GUID CLSID_FDExtTitleTargetMgr = {0xBAFE501E,0x4874,0x4EF9,{0x8E,0xF3,0x22,0xD8,0xF3,0x97,0xDC,0x82}};
И есть одно очень важное отличие - "старое" API по выбору платы не очень хорошо подходит для новых плат. Обычно в старом API SLTitleHelper у интерфейса ISLTitleServerTargetMgr в качестве первого параметра метода get_TargetByIndex стоял номер платы (начиная с 0). Поскольку раньше на одной плате был только один title engine. Теперь первый параметр перестал быть номером платы, поскольку на одной плате теперь бывает много "титровальных машинок" (title engine). Причем в текущей конфигурации на плате работает только часть из них (например, всего один title engine). При смене конфигурации начинают работать другие titel engine. Соответственно, появился новый интерфейс ISLTitleServerTargetMgrExt, у которого появился метод get_TargetInfoByIndex, возвращающий флаг Valid. Если флаг равен единице (строго единице), то данный индекс сейчас работает. Здесь же возвращается имя "титровальной машинки", чтобы облегчить пользователю выбор нужной ему "титровальной машинки".
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Игорь Таранцев писал(а): Для плат FD322, FD422, FD842 нужно использовать константу:

Код: Выделить всё

extern "C" const GUID CLSID_FDExtTitleTargetMgr = {0xBAFE501E,0x4874,0x4EF9,{0x8E,0xF3,0x22,0xD8,0xF3,0x97,0xDC,0x82}};
Спасибо за развернутый ответ, однако не все до конца понятно. Надо экспериментировать.
А можете выдать мне заголовочные файлы - результат импорта библиотеки? Аналог того, что есть в SDK для FD300
Игорь Таранцев
Сообщения: 493
Зарегистрирован: 04 янв 2004 12:45
Откуда: СофтЛаб-НСК

Сообщение Игорь Таранцев »

Напишите запрос на стандартный адрес техподдержки и я вышлю Вам h- и c-файлы. Текст в файле слишком длинный, чтобы его вставлять в тело сообщения.
Людмила
Сообщения: 1407
Зарегистрирован: 10 сен 2004 12:09

Сообщение Людмила »

Адреса технической поддержки
forward@softlab.tv
forward@sl.iae.nsk.su
forward@softlab-nsk.com
В письме нужно указать ссылку на это сообщение в форуме.
AntonChik
Сообщения: 83
Зарегистрирован: 16 фев 2010 15:32
Откуда: г. Красноярск

Сообщение AntonChik »

Здравствуйте.
Рассмотрел сегодня пример FDTitleDotNetSamples для C#
И опять же с ходу не смог разобраться как запустить этот пример на Lite или FD422
Т.е. получаю окошко
Изображение
С данной проблемой я разобрался по части VC++
Обсуждалось здесь:
viewtopic.php?p=21189#21189

Но на C# по аналогии не сумел пока понять куда следует прописать нужный GUID, или что дописать.
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

К сожалению, люди, которые могли бы ответить на этот вопрос, сейчас на выставке. По приезду ответят.
Игорь Таранцев
Сообщения: 493
Зарегистрирован: 04 янв 2004 12:45
Откуда: СофтЛаб-НСК

Сообщение Игорь Таранцев »

Вы пытаетесь создать объект с CLSID = CLSID_SLTMTitleServerTargetMgr. Этот CLSID соответствует плате FD300. Видимо у Вас плата FD300 не установлена.
Для работы с видеопроцессором (программа SLTitlePreview для работы без платы) нужно использовать CLSID_SLDirectShowTitleEngine.
Для работы с платой FD422 - CLSID_FDExtTitleTargetMgr.
AntonChik
Сообщения: 83
Зарегистрирован: 16 фев 2010 15:32
Откуда: г. Красноярск

Сообщение AntonChik »

Игорь Таранцев, эти моменты я понимаю.
У меня скорей проблемы с С#-синтаксисом.
Поиски по проекту не привели меня к объявлениям всех этих CLSID или к инициализации с ними. Где-то это спрятано в библиотеках.

Далее как я понял вместо интерфейса ISLTMTitleRunTimeMgr можно использовать ISLTMTitleRunTimeMgr2 в котором метод Init имеет третий параметр Guid, куда следует передать, например, CLSID_SLDirectShowTitleEngine. Но опять же как и где объявить этот CLSID или откуда взять?
Можно небольшой пример кода?
shish07
Сообщения: 13
Зарегистрирован: 28 мар 2011 17:04

Сообщение shish07 »

Добрый день!
AntonChik писал(а):Игорь Таранцев, эти моменты я понимаю.
У меня скорей проблемы с С#-синтаксисом.
Поиски по проекту не привели меня к объявлениям всех этих CLSID или к инициализации с ними. Где-то это спрятано в библиотеках.

Далее как я понял вместо интерфейса ISLTMTitleRunTimeMgr можно использовать ISLTMTitleRunTimeMgr2 в котором метод Init имеет третий параметр Guid, куда следует передать, например, CLSID_SLDirectShowTitleEngine. Но опять же как и где объявить этот CLSID или откуда взять?
Можно небольшой пример кода?
Сами CLSID-ы можно поискать с помощью 'OleView', правда нужно знать в каких dll-ках/exe-шках смотреть :shock:

Привожу объявления основных CLSID-ов (на c#), которые используются у нас

Код: Выделить всё

// FD300 основной
        static readonly private Guid _SLTMTitleServerTargetMgr          = new Guid("dd02fc80-7d6e-440b-bf32-1a29774ddc1a");
// FD300 слой артиста
        static readonly private Guid _SLTMTitleArtServerTargetMgr = new Guid("4acf2000-688a-4cfe-b524-1afb657136ab");
// FD300 слой подложки
        static readonly private Guid _SLTMTitleBackServerTargetMgr = new Guid("bb94349b-d939-459f-80d7-12af0726aacb");
// FD300 основной No premult
        static readonly private Guid _SLTMTitleNoPremultServerTargetMgr = new Guid("abcce56a-c309-4fc8-9371-0f58cbaaac68");

// DirectShow Videoprocessor
        static readonly private Guid _DSTitleFilterMgr = new Guid("{0x73DA552F,0x4946,0x4670,{0x84,0x84,0x95,0x8F,0x97,0xA2,0x23,0xF2}}");
// DVM6 board
        static readonly private Guid _DVMTitleTargetMgr = new Guid("{0xCA5260BE,0x10C2,0x438A,{0xB5,0xA5,0x94,0x23,0x7C,0x05,0x83,0x17}}");
// FDExt family board (FD322, FD422, FD842...)
        static readonly private Guid _FDExtTitleFilterMgr = new Guid("{0xBAFE501E,0x4874,0x4EF9,{0x8E,0xF3,0x22,0xD8,0xF3,0x97,0xDC,0x82}}");
Объявить эти переменные можно в любом вашем классе.

При инициализации, кроме CLSID-а, необходимо передать ещё один параметр - boardIndex, некий номер платы. Смысл этого параметра зависит от таргета, который инициализируем.
В большинстве случаев это действительно номер платы, видеопроцессора и т.д.
В случае с FDExt, это более сложное понятие, так как плат может быть несколько, каждая из плат содержит по несколько входов/выходов, какие-то из них активны/неактивны...
Короче в FDExt есть целый набор интерфейсов по перечислению и идентификации этих 'концов'.

Удачи.
AntonChik
Сообщения: 83
Зарегистрирован: 16 фев 2010 15:32
Откуда: г. Красноярск

Сообщение AntonChik »

спасибо. теперь разобрался. все работает.
AntonChik
Сообщения: 83
Зарегистрирован: 16 фев 2010 15:32
Откуда: г. Красноярск

Сообщение AntonChik »

Здравствуйте.
Написал программу на машине без платы, работает.
Запускаю на машине с платой FD422, получаю исключение:

Изображение

т.е. старая сборка SLTMTitleRunTime_4.6.12119.1550 уже не поддерживается.

Если пробую запускать со сборкой новой версии
SLTMTitleRunTime_5.0.14009.1133
то там нет нужных интерфейсов, например, ISLTMTitleRunTimeMgr3,
которые были в SLTMTitleRunTime_4.6.12119.1550
Изображение

Палка о двух концах. Как быть?
Может есть какое-то более новое описание SDK, для работы без старых интерфейсов?
Игорь Таранцев
Сообщения: 493
Зарегистрирован: 04 янв 2004 12:45
Откуда: СофтЛаб-НСК

Сообщение Игорь Таранцев »

Выложил изменения в SDK в папку:
ftp://ftp.sl.iae.nsk.su/Public/ForwardT ... RunTimeSDK
В файле "SLTMTitleRunTimeSDK.zip" собственно документ.
В файле "FDTitleSamples_CS_CPP.zip" пример на C++.
В файле "FDTitleCSharp_v2.zip" - пример на C#.
В самом начале документа описание того, какова теперь инициализация объекта.
AntonChik
Сообщения: 83
Зарегистрирован: 16 фев 2010 15:32
Откуда: г. Красноярск

Сообщение AntonChik »

Игорь, спасибо.
Это то что нужно. Все получилось.
AntonChik
Сообщения: 83
Зарегистрирован: 16 фев 2010 15:32
Откуда: г. Красноярск

Сообщение AntonChik »

Здравствуйте.
Хотел бы вернуться вот к этому вопросу, т.к. сложилась аналогичная ситуация.
kasa писал(а):Мы как-то подключали титровалку в пульт, а пульт занимался микшированием имея с титровалки Fill+Key. Так вот, когда использовался CLSID_SLTMTitleServerTargetMgr, изображение результирующее было хаотично окантовано зелёными пятнами. Вы посоветовали использовать CLSID_SLTMTitleNoPremultServerTargetMgr.

Это помогло, пятна исчезли. Сейчас я перевожу свой софт на FD422 и хотелось бы сохранить функциональность.
Есть тут какое-то решение?
Ответить