DM816x算法详解--之OSD
来源:互联网 发布:手机淘宝怎么改评价啊 编辑:程序博客网 时间:2024/04/28 08:06
简介:
本文介绍DM8168 DVRRDK中传入DSP内部的视频格式以及大概的处理流程。
背景:
可能有很多人为了加快研发的速度、降低难度,选择在DVRRDk已有的OSD内添加自己的DSP算法。今天我打算将自己的算法加入进去,发现不管是隔行采集的视频和逐行采集的视频都是可以支持的。那么内部怎么实现的呢?
详述:
DVR_RDK_McFW_Link_API_Training.pdf中写道:
可见算法支持隔行(Interlaced)或逐行(progressive)的扫描格式,支持YUV420、YUV422的数据输入格式。
其实在算法的内部输入的需要叠加的窗口数据graphicsWindowPrm与视频数据videoWindowPrm的格式是要保持一致的,当然需要叠加的窗口数据由于在ARM端读入,数据格式可以任意,但是需要保证进入OSD DSP算法的格式遵循上述要求。
1.OSD ALG的算法调用顺序:
AlgLink_tskMain
switch (cmd)
case SYSTEM_CMD_NEW_DATA:
接收到新数据,开始执行
AlgLink_algProcessData,然后执行顺序大致如下:
2.OSD中数据的准备处理
采用隔行模式时
FVID2_Frame结构中有fid变量标记是奇偶帧,fid=0,1;
通过fid来识别奇偶帧,从而选择性的处奇偶行
if(isInterlaced) { /* OSD plane is always progressive Input can be interlaced in this case we need to skip alternate lines in OSD plane and feed for blending */ if(pFrame->fid==1) fid = 1; /* this will half the processing height */ divY = 2; }
然后获取视频数据:
/* YUV422i or YUV420SP - Y-plane processing */ pSwOsdObj->videoWindowAddr = pFrame->addr[0][0];
设置windowsprm的起始地址,这里进行奇偶的选择:
pSwOsdObj->graphicsWindowAddr = pChObj->osdWinObj[winId].addr[0][0] + fid*pSwOsdObj->graphicsWindowPrm.lineOffset*scaleX;
可见上式中如果fid=1,则从第二行开始叠加。
SWOSD_blendWindow(pSwOsdObj);
如果是420sp,因为其UV分量在pFrame->addr[0][1]中,需要另行叠加
/* YUV420SP - C -plane processing */ if(pSwOsdObj->graphicsWindowPrm.format == SWOSD_FORMAT_YUV420sp) { pSwOsdObj->videoWindowAddr = pFrame->addr[0][1];
详细代码见mcfw/src_bios6/links_c6xdsp/AlgLink/Swosd/osdLink_alg.c
共享知识,共同进步,促进发展。
转载请注明;guo8113
http://blog.csdn.net/guo8113/article/details/27093973
- DM816x算法详解--之OSD
- DM816x算法详解--之OSD
- OSD&FileStore之CompatSet
- OSD
- OSD
- OSD
- DM8168 DVRRDK DSP算法开发(OSD)
- SDL Render 之OSD RTF 和TTF
- DM816x RDK MultiCh_Demo MultiCh_createVcapVdis
- DM816x RDK MultiCh_Demo MultiCh_createVcapVdis
- DM816x RDK MultiCh_Demo MultiCh_createVcapVdis
- 算法详解之MD5...
- Ceph排错之osd之间心跳检测没有回应
- Ceph-智能分布CRUSH之Object与PG与OSD
- Ceph-智能分布CRUSH之Object与PG与OSD
- MPlayer移植到TI DM816X
- hdu3068之manacher算法+详解
- hdu3068之manacher算法+详解
- return 0 与exit(0)
- 数据库服务器参数优化mycnf,16G内存8核CPU,
- 使用线程互斥量,实现进程的PV操作
- OC基础教程——笔记
- FMS (端口问题)如何穿透防火墙
- DM816x算法详解--之OSD
- 如何用linux终端发送邮件
- jQuery中this与$(this)的区别
- lua闭包,ios block,C++lambda函数
- 在两个ENGINE为InnoDB的table执行增加外键的语句时出错
- 2440MMU_Init.c 简要分析
- YumRepo Error: All mirror URLs are not using ftp, http[s] or file. Eg. </HTML>/
- 利用Qemu搭建内核调试环境
- 一个使用pl/sql遇到的问题