Руководство по программированию IMP
Документация API можно увидеть здесь:
IMP ( Ingenic Media Platform ) ( см. imp_system.h )
Базовые концепты
Программа T20 / T21 основана на следующих концепциях:
- Устройство ( = Device )
Устройство завершает функцию. Примеры:- Framesource : Заполните вывод видеоклипов.
- Encoder : Заполните функцию видеокода или кода изображения.
- Группа ( = Group )
Группа - наименьший блок ввода данных. Устройство может иметь несколько групп, и каждая группа может принимать только один канал ввода данных. Группа может иметь несколько результатов.
Группа также является контейнером для конкретных функций “ “. См. Объяснение в разделе «Канал» для более подробной информации. - ELIGO ( = Output )
Выход - самый маленький блок вывода данных на в группу.
Канал обычно связан с одним функциональным блоком.
Например:-
Для кодела канал завершает функцию H264 или кода JPEG.
-
Для IVS канал завершает функцию конкретного алгоритма, и при создании канала Channel определяются характерные алгоритмы, типичные параметры алгоритма.
-
Для OSD есть регион, аналогичный Channel, регион - это специфическая сверхметочная область, которая может быть верхним ( изображением ) крышка ( окклюзия ) и т. Д.
-
Для FrameSource канал производит исходное изображение и канал FrameSource на самом деле является группой
Канал, как функциональный блок, обычно сохранился в группе (, кроме FrameSource ) получения данных.
Количество каналов, которые могут быть записаны группой различных устройств, также различается.
-
Модульная ссылка ( Bind )
После двух групп связаны Bind, данные из исходной группы автоматически отправят в пункт назначения.
Поскольку Группа является наименьшим блоком ввода данных, а выход - это самый маленький блок вывода данных, deviceID, groupID и outputID srcCell в двух параметрах IMP_System_Bind (IMPCell * srcCell, IMPCell * dstCell) действительны.
Хотя dstCell действителен только для deviceID и groupID, outputID не имеет смысла, как вход в данные.
Пример 1:
IMPCell fs_chn0 = {DEV_ID_FS, 0, 0}; // FrameSource deviceID: DEV_ID_FS groupID: 0 outputID: 0
IMPCell enc_grp0 = {DEV_ID_ENC, 0, 0}; // ENC deviceID: DEV_ID_ENC groupID : 0 outputID: 0, où le troisième paramètre de enc_grp0 n'a pas de sens.
int ret = IMP_System_Bind (& fs_chn0, & enc_grp0);
if(ret <0>)
printf ("Bind FrameSource Channel0 and Encoder Group0 failed \ n");
Результат:
-
Группа генерирует группу, которая генерирует ссылку из Frageource для кодера.
-
Два канала зарегистрированы в группе Encoder, поэтому Group Encoder имеет две продукты: H264 и JPEG.
Пример 2:
// flux de données principal
IMPCell fs_chn0 = {DEV_ID_FS, 0, 0};
IMPCell osd_grp0 = {DEV_ID_OSD, 0, 0};
IMPCell enc_grp0 = {DEV_ID_ENC, 0, 0};
int ret = IMP_System_Bind(&fs_chn0, &osd_grp0);
if (ret < 0)
printf("Bind FrameSource Channel0 and OSD Group0 failed\n");
int ret = IMP_System_Bind(&osd_grp0, &enc_grp0);
if (ret < 0)
printf("Bind OSD Group0 and Encoder Group0 failed\n");
// flux de données lié
IMPCell fs_chn1_output0 = {DEV_ID_FS, 1, 0};
IMPCell ivs_grp0 = {DEV_ID_IVS, 0, 0};
IMPCell osd_grp1 = {DEV_ID_OSD, 1, 0};
IMPCell enc_grp1 = {DEV_ID_ENC, 1, 0};
int ret = IMP_System_Bind(&fs_chn1_output0, &ivs_grp0);
if (ret < 0)
printf("Bind FrameSource Channel1 and IVS Group0 failed\n");
int ret = IMP_System_Bind(&ivs_grp0, &osd_grp1);
if (ret < 0)
printf("Bind IVS Group0 and OSD Group1 failed\n");
int ret = IMP_System_Bind(&osd_grp1, &enc_grp1);
if (ret < 0)
printf("Bind OSD Group1 and Encoder Group1 failed\n");
Применить - это типичное приложение Bind : двухканальный код.
Примечания:
- Рекомендуется, чтобы все операции связи сделаны при инициализации системы.
Функции
int IMP_System_Init (void )
Начало системы IMP.
Начало системы int IMP_System_Exit (void). _
После вызова этой функции все память и handles IMP будут выпущены, а аппаратное устройство будет закрыто.
После вызова этой функции все память и int64_t IMP_System_GetTimeStamp (void) _ будут выпущены, а аппаратное устройство будет закрыто. (
Получите поле синхронизации системы IMP в микросекундах.
Возврат: время в микроцентах.
Получите поле синхронизации системы int IMP_System_RebaseTimeStamp (bases int64_t) в микросекундах. _ Возврат: время в микроцентах. (
Определите систему Timestamp IMP в микросекунтах.
Возврат: 0, если успешно.
Определите систему Timestamp uint32_t IMP_System_ReadReg32 (uint32_t u32Addr) в микросекунтах. _ Возврат: 0, если успешно. _
Прочтите значение 32-битного регистра.
void IMP_System_WriteReg32 (uint32 T Regaddr, значение uint32 t)
Напишите значение в 32-разрядном регистре.
Примечание. Внимательно вызывайте этот API и проверьте значение реестра, иначе это может вызвать системные ошибки.
int IMP Система GetVersion (IMPVersion * pstVersion)
Получите систему системы IMP.
const char * IMP Система GetCPUInfo (void)
Получите информацию о модели процессора.
Примечание. Возвращаемое значение представляет собой строку модели ЦП, например, для T10 существует “T10”и “T10-Lite”.
int IMP Система (
Связь между исходной ячейкой и местом назначения.
Примечание 1. В соответствии с концепциями «Устройство», «Группа» и «Выход» каждое устройство может иметь несколько групп, и каждая группа может иметь несколько выходов, группа используется как интерфейс ввода устройства, а выход используется как интерфейс продукта устройства. Следовательно, ссылка фактически соединяет определенный выход устройства вывода с определенной Группой устройства ввода.
Примечание 2: После успешной ссылки данные, сгенерированные srcCell ( Eligo ) , будут автоматически переданы в группу адресатов ( ).
int IMP Система (
Разгруппируйте источники и места назначения.
int IMP Система (
Извлекает информацию из исходной ячейки, относящуюся к месту назначения.