当前位置: 首页 > news >正文

长沙竞价网站建设报价威海网站开发制作

长沙竞价网站建设报价,威海网站开发制作,宿迁房产网商铺,用织梦做网站有后台吗1. 工作原理 1.1 Process link OSD link是所谓的process link。即#xff0c;该link没有output queue#xff0c;而是直接在input queue的buffer上做操作。其数据流向如下图 1. prev link将frame buffer送给process的input queue 2. process link在input queue中取出buffer该link没有output queue而是直接在input queue的buffer上做操作。其数据流向如下图 1. prev link将frame buffer送给process的input queue 2. process link在input queue中取出buffer对buffer的数据进行操作 3. process link将该buffer归还给prev link的empty queue 4. prev link检测到该buffer是从一个process link还回来的于是又将其发送到next link去。 1.2 OSD简述 OSD Link功能运行在C67 DSP核上一般工作在Capture Link之后用来在采集到的视频帧上叠加一个图片(LOGO或是标题等)。待叠加的图片pic存放在共享内存SR0中RGB或者YUV点阵格式。当一帧数据frame从capture link送到OSD linkDSP首先启动EDMA将pic和frame的一部分从共享内存和DDR中搬移到内部L2中去。然后DSP根据预先设置的alpha参数对pic和frame相应位置的每一点做alpha blend。计算好的结果被EDMA搬回输入的frame buffer中去覆盖原有的数据。由于OSD link属于Process link该frame buffer会被送到下一个link中去从而完成OSD效果。     2. 工作流程 1. DSP的main程序创建system_main线程system_main中调用AlgLink_init。 2. 进入AlgLink_init创建两个AlgLink的实例。对于每一个实例调用System_registerLink和创建task。 System_registerLink主要是为了注册下面几个回调函数         linkObj.linkGetFullFrames    NULL;         linkObj.linkPutEmptyFrames   NULL;         linkObj.linkGetFullBitBufs   AlgLink_getFullBufs;         linkObj.linkPutEmptyBitBufs  AlgLink_putEmptyBufs;             linkObj.getLinkInfo          AlgLink_getInfo; 其中linkGetFullBitBufs是为了给next link从本link的output queue获取bitstream buffer而linkPutEmptyBitBufs则给next link将用完的buffer归还给本link。 由于OSD本身没有output queue所以这两个函数实际是给共用Alglink的SCD算法使用的。 3. 创建AlgLink_tskMain线程。 4. 进入AlgLink_tskMain当收到一条create消息时进入下列处理否则直接丢掉该消息返回。 5. 进入AlgLink_algCreate内部实际是调用AlgLink_OsdalgCreate。 6. 进入AlgLink_OsdalgCreate。该函数主要做了两方面的事一是根据传入的create arg设置OSD的运行context其实就是拷贝到本地的一些变量中保存啦。二是调用SWOSD_open。 7. SWOSD_open主要为了注册两个数据结构SWOSD_TI_IALG和SWOSD_TI_IRES。这两个是TI XDAIS标准规定的算法标准接口。前一个主要关注算法的memory需求和分配后一个关注算法对DMA资源的需求。我们下面分开来说。 l SWOSD_TI_IALG #define IALGFXNS  \     SWOSD_TI_IALG,  /* module ID */                         \     NULL,            /* activate */                          \     SWOSD_TI_alloc,  /* alloc */                             \     NULL,            /* control (NULL  no control ops) */  \     NULL,            /* deactivate */                        \     SWOSD_TI_free,   /* free */                              \     SWOSD_TI_initObj,/* init */                              \     NULL,            /* moved */                             \     SWOSD_TI_numAlloc            /* numAlloc (NULL  IALG_MAXMEMRECS) */        这几个函数都是为了让Application来分配算法所需要的memory资源。Application首先调用SWOSD_TI_numAlloc,得到需要的IALG_MemRec个数。每一个memRec代表一个内存块的需求包括分配区域内存块大小对齐等属性。然后Application根据该个数分配相应个数的IALG_MemRec大小的buffer将该buffer当做参数调用SWOSD_TI_alloc。算法的SWOSD_TI_alloc函数负责填写各个IALG_MemRec结构的大小内存区域对齐等属性除了base address。Application然后根据填好的各IALG_MemRec从相应的内存区分配memory并将分配好的memory buffer地址填入base address字段。最后将整个IALG_MemRec数组传入SWOSD_TI_initObj。算法用Application分配好的memory来完成自己的初始化。 实际上TI为了简化操作实现了一套framework来完成这些。在SWOSD_OPEN中我们可以看到通过调用DSKT2_createAlg函数将SWOSD_TI_IALG这一套函数指针传入即可完成上面的交互过程。    对于OSD ALG来说其需要的内存区有两个(memTab[2])。memTab[0]用来存放OSD_obj的内容也就是运行的一些context。memTab[1]用来进行一行的blend运算。假设一行宽度为N个pixel每个pixel需要Mbytes则需要的内存大小为N*M*[1(blend输入1)1blend输入2 1( output buffer) 1 (alpha matrix)]*2(ping pong buffer) 其中blend输入1和2分别对应video buffer和osd picture的一行。Alpha matrix暂时并未实现其目的本来是为了可以对每一个像素点指定一个alpha值。这两个内存区都是从DSP的L2里分配。   l SWOSD_TI_IRES 该结构与SWOSD_TI_IALG类似只不过其分配的是DMA资源。这里不再详细描述。注意framework也封装了一个类似的RMAN_assignResources来完成交互过程。 OSD alg总共需要5个EDMA通道 #define SWOSD_DMA_CH_IN_A  0x0  #define SWOSD_DMA_CH_IN_B  0x1 #define SWOSD_DMA_CH_ALP   0x2   //传送alpha matrix暂无试用 #define SWOSD_DMA_CH_OUT  0x3 #define SWOSD_DMA_CH_AUX  0x4   //用来在alpha值为0x80时用来完成单纯的覆盖而不是blend。暂无使用。   8. SWOSD_open执行完AlgLink_algCreate执行完即可进入消息处理循环。与OSD功能相关的是两个消息: ALG_LINK_OSD_CMD_SET_CHANNEL_WIN_PRM和SYSTEM_CMD_NEW_DATA。 9. 一般来说create后应该先收到ALG_LINK_OSD_CMD_SET_CHANNEL_WIN_PRM消息来设置每一通道的OSD属性。存放OSD图片的SR0 buffer地址也是在这时传入。在demo程序中这一动作是在Vcap_setDynamicParamChn中完成。 10. 当收到SYSTEM_CMD_NEW_DATA时进入AlgLink_algProcessData。该函数首先调用System_getLinksFullFrames从prev link中取得frame buffers。然后调用AlgLink_OsdalgProcessFrame处理每一个frame buffer最后调用System_putLinksEmptyFrames将处理完的frame buffer返还前一个link。 11. AlgLink_OsdalgProcessFrame调用SWOSD_blendWindow分别对Y plane(亮度)和C planeUV通道进行处理。 12. SWOSD_blendWindow首先调用RMAN_activateAllResources在OSD算法中这实际是一个空操作。然后调用SWOSD_TI_algRun核心算法。 13. SWOSD_TI_algRun使用了3个EDMA通道记为SWOSD_DMA_CH_IN_ASWOSD_DMA_CH_IN_BSWOSD_DMA_CH_OUT。SWOSD_DMA_CH_IN_A负责将OSD图像中的一行从SR0搬移到L2的ping-pong buffer中SWOSD_DMA_CH_IN_B负责将video frame中的一行从frame buffer中搬移到L2的ping-pong buffer而SWOSD_DMA_CH_OUT负责将blend后的数据从L2 ping pongbuffer中搬移到video frame中。 其流程如下 等待SWOSD_DMA_CH_IN_A和SWOSD_DMA_CH_IN_B 对ping buffer的搬移完成 SWOSD_DMA_CH_IN_A和SWOSD_DMA_CH_IN_B启动pong buffer的搬移。 DSP计算alpha blend的值写入L2的out pong buffer。 等待SWOSD_DMA_CH_OUT ping buffer搬移完成 启动SWOSD_DMA_CH_OUT pong buffer的搬移   其中ping pong buffer的切换由EDMA参数自动变换运行过程中无需再手动切换ping pong buffer地址。
http://www.huolong8.cn/news/318202/

相关文章:

  • 做网站首页图片素材网站建设文字内容
  • 介绍自己做的网站邢台123式的网站怎么做
  • 对网站建设有什么样好的建设意见企业建设官方网站的目的
  • 淘客cms建站系统动漫在线制作网站
  • 非寻服饰网站建设规划书免费空间清理软件
  • 网站建设流程教程中国大数据平台官网
  • seo网站关键词优化1营销型网站建设
  • 如何在建设部网站补录项目青岛做个网站多少钱
  • 合肥论坛网站建设就有公司域名怎么建设网站
  • 公司网站怎么注销重庆长寿网站设计公司哪家专业
  • 网站开发使用的工具类网站建设頰算
  • 一个人可以完成网站建设吗广州安全教育平台视频
  • 自己的电脑做网站云存储商城网站用html做
  • 网站如何认证宿迁司法拍卖房产网
  • 上海行业门户网站建设工具宝塔搭建本地网站
  • 镇江网站关键字优化郑州全平台广告推广
  • 门户网站开发框架如何制作微信网页
  • 网站中竖导航栏怎么做微博图片怎么做外链到网站
  • ppt做的好的有哪些网站有哪些wordpress 文章分页插件
  • 免费注册个人网站企业解决方案
  • 如何建一个个人网站如何做网络投票网站
  • 网站规划与建设重点内容网站首页用什么字体好
  • 个人怎么做一个网站mip wordpress
  • 建站平台 阿里巴巴如何选择合肥网络公司
  • 网站建设地址 北京全球设计师
  • 网站建设写什么经营范围公司企业邮箱有哪些
  • 哪家做网站公司最好三合一 网站 前端
  • 哪里培训做网站建设网站套餐
  • 厦门php商城网站建设国内网站建设哪家好
  • 杭州房产网站建设注册网站时跳过验证码