SDK для FD422
Модераторы: ElenVR, Людмила, PR
-
- Сообщения: 17
- Зарегистрирован: 17 сен 2009 15:58
SDK для FD422
Здравствуйте!
Я являюсь программистом и разработал несколько титровальных программ для нужд нашей компании под FD300 при помощи предоставленного вами SDK.
Теперь мы приобрели FD422.
Хотелось бы узнать, является ли SDK для FD422 совместимым с FD300?
Или мне следует пересобрать свои программы под новые платы?
И как можно получить SDK для FD422?
Я являюсь программистом и разработал несколько титровальных программ для нужд нашей компании под FD300 при помощи предоставленного вами SDK.
Теперь мы приобрели FD422.
Хотелось бы узнать, является ли SDK для FD422 совместимым с FD300?
Или мне следует пересобрать свои программы под новые платы?
И как можно получить SDK для FD422?
-
- Сообщения: 493
- Зарегистрирован: 04 янв 2004 12:45
- Откуда: СофтЛаб-НСК
Титровальное SDK для плат FD422, FD322, FD842 и виртуальных плат отличается от титровального SDK для плат FD300 очень мало - только при выборе устройства. Но программу прийдется переписывать, чтобы научить ее "видеть" новые устройства.
Во-первых, надо изменить CLSID для типа устройств, вместо
надо использовать
Во-вторых, надо использовать интерфейс ISLTitleServerTargetMgrExt, чтобы перебрать все устройства, для которых метод get_TargetInfoByIndex2 возвращает не ноль (единицу) в последнем параметре Valid. То есть надо показывать пользователю только "валидные" устройства. Раньше в плате 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}};
В остальном все осталось по прежнему.
-
- Сообщения: 17
- Зарегистрирован: 17 сен 2009 15:58
-
- Сообщения: 17
- Зарегистрирован: 17 сен 2009 15:58
Ну вот выше написано:vd писал(а):А вы уверены, что вам нужен этот объект?
Вы создаете титровальный объект для показа титров на плате. Раньше вы его создавали с одним GUID, теперь нужно создавать с другим. Остальные объекты для работы с титрами работают точно так же, как и раньше.
Не уверен, обратился к вам за помощью.писал(а): Во-вторых, надо использовать интерфейс ISLTitleServerTargetMgrExt, чтобы перебрать все устройства
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
Проблема в том, что у нас и самих пока нет 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.
Остальное уже сказал Игорь Таранцев.

Попробую кратко описать функции интерфейса 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 следующей строки:
В проекты на Delphi или C# это можно сделать командой меню импорта библиотеки.
Для проекта на C++ это можно сделать добавлением в stdafx.h следующей строки:
Код: Выделить всё
// import SLTitleHelper.dll
#import "libid:FBC308B7-D791-4D18-8A3E-394AE86B124F" raw_interfaces_only named_guids
-
- Сообщения: 17
- Зарегистрирован: 17 сен 2009 15:58
Импорт библиотеки через stdafx.h не помог.
Использую MS Visual C++ Express 2010.
Вот как выглядит stdafx.h:
Кроме того возник вот такой вопрос:
C АВ300 я использовал TitleShotDataType_RGBA описаный в sltitlesdk_h.h
в файле же SLTitleHelper.h вижу следующее:
RGBA нет вообще, тогда как весь мой код построен на RGBA. Как быть?[/code]
Использую 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:FBC308B7-D791-4D18-8A3E-394AE86B124F" raw_interfaces_only named_guids
C АВ300 я использовал TitleShotDataType_RGBA описаный в sltitlesdk_h.h
Код: Выделить всё
typedef /* [v1_enum] */
enum CTitleShotDataType
{ TitleShotDataType_RGBA = 0,
TitleShotDataType_YUVA = 1
} CTitleShotDataType;
Код: Выделить всё
typedef /* [v1_enum] */
enum CTitleShotDataType
{ TitleShotDataType_BGRA = 0,
TitleShotDataType_BGR = 1,
TitleShotDataType_UYVY = 2,
TitleShotDataType_YUY2 = 3,
TitleShotDataType_UYVY_HD = 4,
TitleShotDataType_YUY2_HD = 5,
TitleShotDataType_BGRA_Premult = 6
} CTitleShotDataType;
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
Помимо import, нужно еще использовать namespace.
Константа TitleShotDataType_RGBA теперь называется TitleShotDataType_BGRA (это более правильное название - в одном пикселе цветовые компоненты всегда были расположены именно в таком порядке). Можете сделать соответствующий define, либо просто использовать значение 0.
Константа TitleShotDataType_RGBA теперь называется TitleShotDataType_BGRA (это более правильное название - в одном пикселе цветовые компоненты всегда были расположены именно в таком порядке). Можете сделать соответствующий define, либо просто использовать значение 0.
-
- Сообщения: 17
- Зарегистрирован: 17 сен 2009 15:58
С namespace получилось, спасибо. Хотя я сделал rename_namespace так как незнаю, какой генерируется 
Пришлось добавить описание
Про BGRA понятно, я было испугался что вы изменили порядок компонент.
В целом теперь проект собирается, в понедельник проверю на железе

Пришлось добавить описание
Код: Выделить всё
extern "C" GUID CLSID_FDExtTitleTargetMgr = {0xBAFE501E,0x4874,0x4EF9,{0x8E,0xF3,0x22,0xD8,0xF3,0x97,0xDC,0x82}};
extern "C" GUID CLSID_SLResourceHolder={0xD24014E7,0xAF25,0x4D11,{0x8E,0xFC,0x45,0xF6,0x3B,0x24,0xB2,0x67}};
В целом теперь проект собирается, в понедельник проверю на железе

-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
-
- Сообщения: 17
- Зарегистрирован: 17 сен 2009 15:58
-
- Сообщения: 90
- Зарегистрирован: 04 сен 2008 01:50
- Откуда: Красноярск
-
- Сообщения: 7093
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
На плате FD422 вот прямо такого CLSID_SLTMTitleNoPremultServerTargetMgr у нас нет. Но есть кое-что другое. Поэтому напишите, пожалуйста, письмо на адрес техподдержки. В нём привидите, пожалуйста, пример кода и описание того, что вы делаете.
forward@softlab.tv
forward@sl.iae.nsk.su
forward@softlab-nsk.com
forward@softlab.tv
forward@sl.iae.nsk.su
forward@softlab-nsk.com
-
- Сообщения: 90
- Зарегистрирован: 04 сен 2008 01:50
- Откуда: Красноярск
Если позволите, я тут отпишусь. Мы как-то подключали титровалку в пульт, а пульт занимался микшированием имея с титровалки Fill+Key. Так вот, когда использовался CLSID_SLTMTitleServerTargetMgr, изображение результирующее было хаотично окантовано зелёными пятнами. Вы посоветовали использовать CLSID_SLTMTitleNoPremultServerTargetMgr.
Это помогло, пятна исчезли. Сейчас я перевожу свой софт на FD422 и хотелось бы сохранить функциональность.
Еще попутный вопрос. Получается, компонент CLSID_SLTMTitleServerTargetMgr работает с premultiplied картинками. Означает ли это, что я должен в FIFO буфер поставлять именно изображения в premultiplied? Или этим как-то железяка занимается?
Спасибо.
Это помогло, пятна исчезли. Сейчас я перевожу свой софт на FD422 и хотелось бы сохранить функциональность.
Еще попутный вопрос. Получается, компонент CLSID_SLTMTitleServerTargetMgr работает с premultiplied картинками. Означает ли это, что я должен в FIFO буфер поставлять именно изображения в premultiplied? Или этим как-то железяка занимается?
Спасибо.