引言 随着数字信号处理器 DPS 芯片集成度,运算(2)
2013-06-25 01:21
导读:要是实现对SAA7113H 和SAA7121H 的控制,就要先对其进行配置。 对 SAA7113H 进行配置: SA7113H_ConfParams sa7113hPAL[28] = {{0x01,0x08},{0x02,0xC3},{0x03,0x33},{0x04,0x00},{0x05,0
要是实现对SAA7113H 和SAA7121H 的控制,就要先对其进行配置。
对 SAA7113H 进行配置:
SA7113H_ConfParams sa7113hPAL[28] = {{0x01,0x08},{0x02,0xC3},{0x03,0x33},{0x04,0x00},{0x05,0x00},{0x06,0xE9},{0x07,0x0D},{0x08,0x00},{0x09,0x01},{0x0A,0x80},{0x0B,0x47},{0x0C,0x40},{0x0D,0x00},{0x0E,0x01},{0x0F,0x24},{0x10,0x08},{0x11,0x0C},{0x12,0x7E},{0x13,0x02},{0x15,0x17},{0x16,0x35},{0x17,0x02},{0x40,0x02},{0x58,0x00},{0x59,0x54},{0x5A,0x07},{0x5B,0x80},{0x5E,0x00}
};对SAA7121H 进行配置:
SA7121H_ConfParams sa7121hPAL[45] = {{0x26,0x00},{0x27,0x00},{0x28,0x21},{0x29,0x1d},{0x3A,0x13},{0x5A,0x0c},{0x5B,0x21},{0x5c,0xAF},{0x5d,0x23},{0x5e,0x35},{0x5f,0x35},{0x60,0x00},{0x61,0x06},{0x62,0x2F},{0x63,0xcb},{0x64,0x8a},{0x65,0x09},{0x66,0x2a},{0x67,0x55},{0x68,0x56},{0x69,0x67},{0x6a,0x58},{0x6b,0x20},{0x6c,0x05},{0x6d,0x20},{0x6e,0xA0},{0x6f,0x14},{0x70,0x80},{0x71,0xe8},{0x72,0x10},{0x73,0x42},{0x74,0x03},{0x75,0x03},{0x76,0x05},{0x77,0x16},{0x78,0x04},{0x79,0x16},{0x7a,0x18},{0x7b,0x38},{0x7c,0x40},{0x7d,0x00},{0x7e,0x00},{0x7F,0x00}
};
2.2 多路视频采集的驱动程序设计
本驱动程序是基于 DDK 驱动模型设计的,通过 DSP/BIOS 配置工具在DSP/BIOS 应用程序中注册并使用一个微型驱动,配置应用程序使用该微型驱动。创建一个新的设备对象后,对其属性主要设置设备号、设备参数指针、设备实例的驱动函数表以及该驱动函数表的类型。
FVID 模型是建立在GIO 模型之上的,并对GIO 模型进行了改进。典型的有FVID_create()、FVID_control()、FVID_alloc()、FVID_exchange()、FVID_free()函数。FVID 函数会在设备表中查找已注册的微型驱动,并调用微型驱动函数完成对外部设备的操作。然后创建FVID 采集、显示通道,配置 SAA7121, SAA7113,分配相应的缓冲区,对得到的视频帧进行处理等操作。
本设计是对两路视频信号同时采集,通过三个任务来完成:两个视频采集任务任务、一个视频输出任务。任务间是通过SCOM 模块进行通信的,SCOM 模块管理SCOM 队列对象。
本文来自中国科教评价网 每一个SCOM 队列内部使用一个队列对象(QUE)和一个旗语对象(SEM)。在SCOM 队列的结构在SCOM 模块中是私有的。应用程序不应该涉及到SCOM 队列的对象。
视频采集任务的程序:
void tskVideoCaptureVp1(){FVID_Frame *capFrameBuf;SCOM_Handle fromInput1toDIS,fromDIStoInput1;fromInput1toDIS = SCOM_open("IN1TODIS"); /*打开SCOM 模块*/fromDIStoInput1 = SCOM_open("DISTOIN1");FVID_alloc(capChan, &capFrameBuf); /*申请一个空间*/while(1){SCOM_putMsg(fromInput1toDIS, (FVID_Frame *)capFrameBuf);//向队列中写消息SCOM_getMsg(fromDIStoInput1, SYS_FOREVER); //重队列中读消息FVID_exchange(capChan, &capFrameBuf);}
}
这是其中的一路视频采集程序,通过同样的方法可以写出第二路的采集程序。视频输出的任务中完成了两路视频的输出,主要在循环中完成,程序如下:
while(1){capFrameBuf=(FVID_Frame*)SCOM_getMsg(fromInput1toDIS,SYS_FOREVER);for(i = 0; i < numLines; i ++){DAT_copy(capFrameBuf->frame.iFrm.y1 + i * capLinePitch,disFrameBuf->frame.iFrm.y1 + i * disLinePitch, numPixels);}
capFrameBuf = (FVID_Frame *)SCOM_getMsg(fromInput1btoDIS, SYS_FOREVER);for(i = 0; i < numLines; i ++){DAT_copy(capFrameBuf->frame.iFrm.y1 + i * capLinePitch,disFrameBuf->frame.iFrm.y1 + i * disLinePitch+352, numPixels);}