- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
摄像头驱动程序设计
SNONIX 120摄像头驱动程序设计;主要内容:;USB摄像头驱动;摄像头驱动的特殊性;V4L2简介;v4l2视频处理的步骤:;urb结构体简介;urb的生命周期(一);urb的生命周期(二);驱动原理图:;static void sn9c120_urb_complete(struct urb *urb) //ok
{
struct sn9c120_device* cam = urb-context;
struct sn9c120_frame_t** f;
size_t imagesize, soflen;
u8 i;
int err = 0;
if (urb-status == -ENOENT)
return;
; f = cam-frame_current;
if (cam-stream == STREAM_INTERRUPT) {
cam-stream = STREAM_OFF;
if ((*f))
(*f)-state = F_QUEUED;
cam-sof.bytesread = 0;
printk( Stream interrupted by application\n);
wake_up(cam-wait_stream);
}
if (cam-state DEV_DISCONNECTED)
return;
if (cam-state DEV_MISCONFIGURED) {
wake_up_interruptible(cam-wait_frame);
return;
}
if (cam-stream == STREAM_OFF || list_empty(cam-inqueue))
goto resubmit_urb;
; if (!(*f))
(*f) = list_entry(cam-inqueue.next, struct sn9c120_frame_t,
frame);
imagesize = (cam-sensor.pix_format.width *
cam-sensor.pix_format.height *
cam-sensor.pix_format.priv) / 8;
if (cam-sensor.pix_format.pixelformat == V4L2_PIX_FMT_JPEG)
imagesize += 589; /* length of jpeg header */
soflen = sn9c120_sof_length(cam);
for (i = 0; i urb-number_of_packets; i++) {
unsigned int img, len, status;
void *pos, *sof, *eof;
len = urb-iso_frame_desc[i].actual_length;
status = urb-iso_frame_desc[i].status;
pos = urb-iso_frame_desc[i].offset + urb-transfer_buffer;
if (status) {
printk( Error in isochronous frame\n);
(*f)-state = F_ERROR;
cam-sof.bytesread = 0;
continue;
};redo:
sof = sn9c120_find_sof_header(cam, pos, len);
if (likely(!sof)) {
eof = sn9c120_find_eof_header(cam, pos, len);
if ((*f)-state == F_GRABBING) {
end_of_frame:
img = len;
if (eof)
img = (eof pos) ? eof - pos - 1 : 0;
if ((*f)-buf.bytesused + img imagesize) {
u32 b;
b = (*f)-buf.bytesused + img -
imagesize;
img = imagesize - (*f)-buf.bytesused;
printk(Expected EOF not found: video
frame cut\
文档评论(0)