请注意:此页面已自动翻译。如果可以,您应该使用以下其中一种语言阅读它:

编程指南 IMP

APIS的文档可以在这里看到:

IMP ( Ingenic Media Platform ) (见 imp_system.h )

基本概念

T20 / T21程序基于以下概念: 1.设备 ( = Device )
该设备完成功能。示例: * Framesource :完成视频剪辑的输出。
* Encoder :完成视频代码或图像代码功能。
2.组 ( = Group ) )本组是最小的数据输入单元。设备可以具有多个组,并且每个组只能接收一个数据输入通道。该组可以有几个结果。
该组也是特定 “功能 “的容器。有关更多详细信息,请参阅“通道”部分中的说明。

  1. Eligo ( = Output )
    输出是每组最小的数据输出单元。
    信道通常与单个功能单元相关。
    例如:
    • 对于Codel,通道完成 H264 或代码功能 JPEG

    • 对于 IVS,通道完成特定算法的功能,并且在创建通道期间指定了特定算法典型参数

    • 对于 OSD,存在类似于 _Channel_的区域,区域是可以是顶部 (图像 )盖子 (遮挡 )等的特定的超细化区域。

    • 对于 FrameSource,频道产生原始图像,并且通道 FrameSource 实际上是一个组

    作为功能单元的信道通常保留在 FrameSource )接收数据之外的 (组中。

    各种设备组可以记录的通道数也不同。

模块链接 ( Bind )

通过 Bind_链接两组后,来自源组的数据将自动发送到目标。
因为组是最小的数据输入单元和输出是最小的数据输出单元,所述 _deviceID
groupIDoutputID srcCellIMP_System_Bind (IMPCell * srcCell, IMPCell * dstCell) 的两个参数是有效的。

虽然 dstCell 仅对 deviceIDgroupID_有效,但是 _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");

结果:

示例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)_ _,硬件单元将关闭。 (

获取microSeconds中 IMP 系统的定时字段。
返回:微量的时间。

获取microSeconds中_int IMP_System_RebaseTimeStamp (bases int64_t)_系统的定时字段。 _返回:微量的时间。 (

以微秒为单位定义时间戳 IMP 系统。
返回:如果成功,则为0。

以微秒为单位定义时间戳_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)

获取有关CPU型号的信息。
注意:返回值是一串CPU模型,例如,对于T10,存在 “T10”和 “T10-Lite”。

int IMP 系统 (

源单元格和目标之间的链接。

注1:根据设备,组和输出的概念,每个设备可以有多个组,每个组可以有多个输出,组用作设备输入接口,输出用作设备产品接口。因此,链接实际上将输出设备的特定输出连接到输入设备的特定组。

注2:成功链接后,由 srcCell ( eligo ) 生成的数据将自动传送到目标 ( 组 )。

int IMP 系统 (

取消分组源和目标。

int IMP 系统 (

从源单元中检索与目标相关的信息。