int dst_y; //输出的目标图像高度
int dst_fmt; //输出的目标图像数据格式
int pre_x; //预览通道(P端口模式)输出的图像宽
int pre_y; //预览通道(P端口模式)输出的图像高
int pre_fmt; //使用通道(P端口模式)时设为1
__u16 bypass; //为1时表示不启用按比例的图像放大/缩小
__u16 ycbcr; //输入图像的YcbCr顺序
struct s3c2440_camif *dev; //设备的系统信息
};
上述这些配置信息最终是与一系列的寄存器相关联的。这个结构为读/写寄存器提供了一个清晰的、集中的存储缓冲。
打开、关闭和控制摄像机的接口函数。这3个接口函数是按V4L规范编写的,其原型如下:
① 打开摄像机接口函数:
static int v4l_cam_open(struct video_device *v,int mode);
② 控制摄像机接口函数:
static int v4l_cam_ioctl(struct video_device *v,unsigned int cmd,void *arg);
③ 关闭摄像机接口函数:
static void v4l_cam_close(struct video_device *v);
中断处理接口函数。该中断处理函数在使用C端口模式完成1帧图像采集后被调用。函数原型定义如下:
static void s3c2440_camif_isr_c(int irq,void *dev_id,struct pt_regs *regs);
读取图像数据的实现函数。该函数通过dev→rdy的值判断1帧图像有无采集转换结束。如果该值置1,则表示采样结束,这时就可以从图像数据的缓冲中拷贝数据到用户的存储空间;如果为0,则函数进入阻塞或返回EAGAIN标志。顺便提一下,dev→rdy的值是在中断处理函数中设置的。(实现代码略—— 编者注)
1.3 图像数据的压缩
S3C2440的CAMIF接口处理得到的1帧图像数据比较大,还要经过进一步的压缩才能适合进行网络数据传输。S3C2440处理器内部没有提供硬件的图像压缩编码器,但因为它的主频较高,可以使用软件来进行图像压缩。考虑到CPU的处理能力和对单帧采样图像的清晰度有较高的要求,采用基于离散余弦变换算法(DCT)的JPEG/MJPEG方式对图像数据进行压缩编码。