SDK для FD422

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

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

Ответить
Alekzander
Сообщения: 17
Зарегистрирован: 17 сен 2009 15:58

SDK для FD422

Сообщение Alekzander »

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

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

Титровальное SDK для плат FD422, FD322, FD842 и виртуальных плат отличается от титровального SDK для плат FD300 очень мало - только при выборе устройства. Но программу прийдется переписывать, чтобы научить ее "видеть" новые устройства.

Во-первых, надо изменить CLSID для типа устройств, вместо

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

extern "C" const GUID CLSID_SLTMTitleServerTargetMgr = {0xDD02FC80,0x7D6E,0x440B, 0xBF,0x32,0x1A,0x29,0x77,0x4D,0xDC,0x1A}};
надо использовать

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

extern "C" const GUID CLSID_FDExtTitleTargetMgr = {0xBAFE501E,0x4874,0x4EF9, 0x8E,0xF3,0x22,0xD8,0xF3,0x97,0xDC,0x82}};
Во-вторых, надо использовать интерфейс ISLTitleServerTargetMgrExt, чтобы перебрать все устройства, для которых метод get_TargetInfoByIndex2 возвращает не ноль (единицу) в последнем параметре Valid. То есть надо показывать пользователю только "валидные" устройства. Раньше в плате FD300 индекс устройства означал индекс платы. В новых устройствах индекс не равен индексу платы - это просто некоторое число. На одной плате может быть много устройств, из которых большинство не "валидные".

В остальном все осталось по прежнему.
Alekzander
Сообщения: 17
Зарегистрирован: 17 сен 2009 15:58

Сообщение Alekzander »

Все таки, можно ли получить обновленное SDK?
Тот же ISLTitleServerTargetMgrExt у меня не описан.
Alekzander
Сообщения: 17
Зарегистрирован: 17 сен 2009 15:58

Сообщение Alekzander »

vd писал(а):А вы уверены, что вам нужен этот объект?

Вы создаете титровальный объект для показа титров на плате. Раньше вы его создавали с одним GUID, теперь нужно создавать с другим. Остальные объекты для работы с титрами работают точно так же, как и раньше.
Ну вот выше написано:
писал(а): Во-вторых, надо использовать интерфейс ISLTitleServerTargetMgrExt, чтобы перебрать все устройства
Не уверен, обратился к вам за помощью.
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

Проблема в том, что у нас и самих пока нет SDK по новым объектам :-)

Попробую кратко описать функции интерфейса ISLTitleServerTargetMgrExt.

HRESULT _stdcall get_TargetsCount([out] long* pVal);

С помощью этой функции вы получаете количество объектов, позволяющих показывать титры. Грубо говоря, это титровальная подсистема платы. Если у вас лицензия на один выход платы FD422, такой объект будет всего один (как и на плате FD300)/

HRESULT _stdcall get_TargetByIndex(
[in] long TargetNumber,
[out] IUnknown** ppUnk);

По индексу объекта возвращает указатель на объект. Собственно, его и нужно использовать вместо старого объекта, который был на плате FD300.

HRESULT _stdcall get_TargetInfoByIndex(
[in] long TargetNumber,
[out] BSTR* pTargetName,
[out] char* pValid);

По индексу объекта возвращает его текстовое название в pTargetName, в pValid возвращается 1, если объект доступен для использования.

HRESULT _stdcall get_TargetIndexByName(
[in] unsigned long LocaleID,
[in] BSTR TargetName,
[out] long* TargetNumber);

Возвращает по имени объекта его индекс.

HRESULT _stdcall get_TargetInfoByIndex2(
[in] long TargetNumber,
[in] unsigned long LocaleID,
[out] BSTR* pTargetName,
[out] char* pValid);
};

Позволяет получить имя объекта не только по-английски, но и по-русски, если в LocaleID указать значение 0x0419.

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

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

Если компилятор не видит интерфейса ISLTitleServerTargetMgrExt, то надо убедиться, что к проекту подключена (импортирована) библиотека SLTitleHelper.
Для проекта на C++ это можно сделать добавлением в stdafx.h следующей строки:

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

// import SLTitleHelper.dll
#import "libid:FBC308B7-D791-4D18-8A3E-394AE86B124F" raw_interfaces_only named_guids
В проекты на Delphi или C# это можно сделать командой меню импорта библиотеки.
Alekzander
Сообщения: 17
Зарегистрирован: 17 сен 2009 15:58

Сообщение Alekzander »

Импорт библиотеки через stdafx.h не помог.
Использую MS Visual C++ Express 2010.

Вот как выглядит stdafx.h:

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

#pragma once
#define _WIN32_WINNT	0x500
#define _WIN32_DCOM
#include <stdio.h>
#include <tchar.h>
#include <atlbase.h>
#import "libid&#58;FBC308B7-D791-4D18-8A3E-394AE86B124F" raw_interfaces_only named_guids
Кроме того возник вот такой вопрос:
C АВ300 я использовал TitleShotDataType_RGBA описаный в sltitlesdk_h.h

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

typedef /* &#91;v1_enum&#93; */ 
enum CTitleShotDataType
    &#123;	TitleShotDataType_RGBA	= 0,
	TitleShotDataType_YUVA	= 1
    &#125; 	CTitleShotDataType;
в файле же SLTitleHelper.h вижу следующее:

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

typedef /* &#91;v1_enum&#93; */ 
enum CTitleShotDataType
    &#123;	TitleShotDataType_BGRA	= 0,
	TitleShotDataType_BGR	= 1,
	TitleShotDataType_UYVY	= 2,
	TitleShotDataType_YUY2	= 3,
	TitleShotDataType_UYVY_HD	= 4,
	TitleShotDataType_YUY2_HD	= 5,
	TitleShotDataType_BGRA_Premult	= 6
    &#125; 	CTitleShotDataType;
RGBA нет вообще, тогда как весь мой код построен на RGBA. Как быть?[/code]
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

Помимо import, нужно еще использовать namespace.

Константа TitleShotDataType_RGBA теперь называется TitleShotDataType_BGRA (это более правильное название - в одном пикселе цветовые компоненты всегда были расположены именно в таком порядке). Можете сделать соответствующий define, либо просто использовать значение 0.
Alekzander
Сообщения: 17
Зарегистрирован: 17 сен 2009 15:58

Сообщение Alekzander »

С namespace получилось, спасибо. Хотя я сделал rename_namespace так как незнаю, какой генерируется :)

Пришлось добавить описание

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

extern "C" GUID CLSID_FDExtTitleTargetMgr = &#123;0xBAFE501E,0x4874,0x4EF9,&#123;0x8E,0xF3,0x22,0xD8,0xF3,0x97,0xDC,0x82&#125;&#125;; 
extern "C" GUID CLSID_SLResourceHolder=&#123;0xD24014E7,0xAF25,0x4D11,&#123;0x8E,0xFC,0x45,0xF6,0x3B,0x24,0xB2,0x67&#125;&#125;;
Про BGRA понятно, я было испугался что вы изменили порядок компонент.

В целом теперь проект собирается, в понедельник проверю на железе :)
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

Напишите потом, заработало или нет.
Alekzander
Сообщения: 17
Зарегистрирован: 17 сен 2009 15:58

Сообщение Alekzander »

Заработало, спасибо за помощь!
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

Не за что :-)
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Здравствуйте!

Подскажите пожалуйста ГУИД компонента CLSID_SLTMTitleNoPremultServerTargetMgr для FD422?
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

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

На плате FD422 вот прямо такого CLSID_SLTMTitleNoPremultServerTargetMgr у нас нет. Но есть кое-что другое. Поэтому напишите, пожалуйста, письмо на адрес техподдержки. В нём привидите, пожалуйста, пример кода и описание того, что вы делаете.

forward@softlab.tv
forward@sl.iae.nsk.su
forward@softlab-nsk.com
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Если позволите, я тут отпишусь. Мы как-то подключали титровалку в пульт, а пульт занимался микшированием имея с титровалки Fill+Key. Так вот, когда использовался CLSID_SLTMTitleServerTargetMgr, изображение результирующее было хаотично окантовано зелёными пятнами. Вы посоветовали использовать CLSID_SLTMTitleNoPremultServerTargetMgr.

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

Еще попутный вопрос. Получается, компонент CLSID_SLTMTitleServerTargetMgr работает с premultiplied картинками. Означает ли это, что я должен в FIFO буфер поставлять именно изображения в premultiplied? Или этим как-то железяка занимается?

Спасибо.
Ответить