IPNC RDK Link

2014年10月29日 由 Creater 留言 »
  • 每个link都有自己独立的任务/线程用于完成视频采集或播放等处理;
  • 每个link都可以处理来自多个通道的视频帧数据,每个通道的视频宽高和数据格式都可以不同;
  • A8作为HOST可以用来连接多个link形成数据流的链并对其进行控制;
  • 数据链被建立并启动时,数据链中的每个link将和它的下游link进行帧数据的交互;
  • links之间的帧数据交互可以在多个核心之间进行,并且并不需要A8 HOST的干涉,从而降低A8的开销;
  • 在数据链运行过程中用户可以发送控制信令给任意link来动态设置相关的link参数;

link接口可以分成以下几类:

     
  • link API——被用户调用来配置和控制link的接口;
  •   

  • Inter link API——被其他links调用来交换帧数据的接口;
  •  

  •  link output queue——被其他links通过Inter Link API接口实用的帧buffer队列;

link间的消息传递:
  

每个Link通过一个32位的该LinkId来识别,ID高4位标识了这个Link是在哪个核上运行,低24位标识了该Link的名称.

  

每个Link API都需要这个LinkID参数来发送消息,当用户发送消息到一个Link时,根据这ID函数内部判断这个消息是发给本地的Link还是远端核心的 Link;如果是本地的直接调用BIOS/LINUX API函数,否则就通过Syslink模块的MessageQ发送这个消息到指定的核心,让对端的核心调用对应的函数处理。

link API
  

下面来看看link API的部分接口及相关功能:

System_linkCreate Creates a link ——allocates driver, codec, memory resources.
System_linkGetInfo Get information about a link like number of channels, properties of each channel. MUST be called after System_linkCreate() for a link
System_linkStart Start the link ——starts the driver or codec
System_linkControl Send a link specific control command with optional arguments
System_linkStop Stop the link —— stops the driver or codec
System_linkDelete Deletes a link —— free’s driver, codec, memory resources

Inter link API
  

下面的介绍了在link内部实现的交换帧数据的API,对于用户来说,这部分API是不需要关心的:

System_GetLinkInfoCb Function to return information about a link like number of channels, properties of each channel
System_LinkGetOutputFramesCb unction to return captured or generated or output frames to the caller (another link)
System_LinkPutEmptyFramesCb Function to release consumed frames back to the original link for reuse
System_LinkGetOutputBitBufsCb Function to return generated or output bitstream frame to the caller (another link) –Valid only for Encode Link
System_LinkPutEmptyBitBufsCb Function to release consumed bitstream frames back to the original link for reuse –Valid only for Encode Link

  

在每个link中必须实现一些函数并在初始化时注册这些函数指针给link管理的核心模块,用于帧数据的获取、释放、dump相关状态等。

  

对于任一个link想从它的上游link获取帧数据都需要调用link管理核心函数System_getLinksFullFrames(),该函数内部会发送消息到对应的上游link,触发该link向管理模块注册的回调函数System_LinkGetOutputFramesCb()将帧数据传递给该link;

  

同样的,在当一个link想释放处理完毕的帧buffer给上游link时需要调用link管理核心函数 System_putLinksEmptyFrames(),该函数内部会发送消息到对应的上游link,触发它注册的回调函数 System_LinkPutEmptyFramesCb()将帧buffer回收,用于后续的数据处理;

广告位

发表评论

你必须 登陆 方可发表评论.