Camera 驱动和编程

Camera 驱动和编程
Camera 驱动和编程

Camera 驱动和编程

了解了framebuffer,摄像头便只是fb的数据来源而已。

先了解些相关的概念:

V4L2(video 4 linux 2)

可以支持多种设备,它可以有以下几种接口:

1.视频采集接口(video capture interface):这种应用的设备可以是高频头或者摄像头. V4L2的最初设计就是应用于这种功能的.

2. 视频输出接口(video output interface):可以驱动计算机的外围视频图像设备--像可以输出电视信号格式的设备.

3. 直接传输视频接口(video overlay interface):它的主要工作是把从视频采集设备采集过来的信号直接输出到输出设备之上,而不用经过系统的CPU.

4. 视频间隔消隐信号接口(VBI interface):它可以使应用可以访问传输消隐期的视频信号.

5. 收音机接口(radio interface):可用来处理从AM或FM高频头设备接收来的音频流.

Video4linux下视频编程的流程:

(1)打开视频设备:

(2)读取设备信息

(3)更改设备当前设置(没必要的话可以不做)

(4)进行视频采集,两种方法:

a.内存映射

b.直接从设备读取

(5)对采集的视频进行处理

(6)关闭视频设备。

/* 这样的流程地球人都晓得*/

关键步骤介绍:

(1)打开视频:

Open(”/dev/video0”,vdàfd);

关闭视频设备用close(”/dev/video0”,vdàfd);

(2)读video_capability中信息

ioctl(vd->fd, VIDIOCGCAP, &(vd->capability))

成功后可读取vd->capability各分量eg.

(3)读video_picture中信息

ioctl(vd->fd, VIDIOCGPICT, &(vd->picture));(4)改变video_picture中分量的值(可以不做的)先为分量赋新值,再调用VIDIOCSPICT

Eg.

vd->picture.colour = 65535;

if(ioctl(vd->fd, VIDIOCSPICT, &(vd->picture)) < 0) {

perror("VIDIOCSPICT");

return -1;

}

(5)初始化channel (可以不做的)

必须先做得到vd->capability中的信息

for (i = 0; i < vd->capability.channels; i++)

vd->channel[i].channel = i;

if (ioctl(vd->fd, VIDIOCGCHAN, &(vd->channel[i])) < 0)

{

perror("v4l_get_channel:");

return -1;

}

}

/* 通过ioctl,将struct v4l_struct作为参数的设备操作而已,那么重点将是整个结构体:s truct v4l_struct*/

typedef struct v4l_struct

{

int fd;

struct video_capability capability;

struct video_channel channel[4];

struct video_picture picture;

struct video_window window;

struct video_capture capture;

struct video_buffer buffer;

struct video_mmap mmap;

struct video_mbuf mbuf;

unsigned char *map;

int frame;

int framestat[2];

}vd;

/* 那么,对该结构体的了解便成了关键*/

Video4linux支持的数据结构及其用途

(1)video_capability包含设备的基本信息(设备名称、支持的最大最小分辨率、信号源信息等),包含的分量:

name[32] //设备名称

maxwidth ,

maxheight,

minwidth,

minheight

Channels //信号源个数

type //是否能capture,彩色还是黑白,是否能裁剪等等。值如VID_TYPE_CAPTURE等(2)video_picture设备采集的图象的各种属性

brightness 0~65535

hue

colour

contrast

whiteness

depth // 24

palette // VIDEO_PALETTE_RGB24

(3)video_channel关于各个信号源的属性

Channel //信号源的编号

name

tuners

Type // VIDEO_TYPE_TV | IDEO_TYPE_CAMERA

Norm制式

(4)video_window //包含关于capture area的信息

x x windows 中的坐标.

y x windows 中的坐标.

width The width of the image capture.

height The height of the image capture.

chromakey A host order RGB32 value for the chroma key. flags Additional capture flags.

clips A list of clipping rectangles. (Set only)

clipcount The number of clipping rectangles. (Set only)(5)video_mbuf //利用mmap进行映射的帧的信息

size //每帧大小

Frames //最多支持的帧数

Offsets //每帧相对基址的偏移

(6)video_buffer 最底层对buffer的描述

void *baseBase // physical address of the buffer

int height // Height of the frame buffer

int width // Width of the frame buffer

int depth // Depth of the frame buffer

int bytesperline // Number of bytes of memory between the start of two adjacent li nes

实际显示的部分一般比它描述的部分小

(7)video_mmap//用于mmap

背景:

阅读新闻

Camera 驱动和编程

[日期:2012-12-31] 来源:Linux社区作者:iibull [字体:大中小]

重点:

用mmap(内存映射)方式截取视频

mmap( )系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。

两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A 可以即时看到进程B对共享内存中数据的更新,反之亦然

采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝

(1)设置picture的属性

(2)初始化video_mbuf,以得到所映射的buffer的信息

ioctl(vd->fd, VIDIOCGMBUF, &(vd->mbuf))

(3)可以修改video_mmap和帧状态的当前设置

Eg. vd->mmap.format = VIDEO_PALETTE_RGB24

vd->framestat[0] = vd->framestat[1] = 0; vd->frame = 0;

(4)将mmap与video_mbuf绑定

void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset )

len // 映射到调用进程地址空间的字节数,它从被映射文件开头offset个字节开始算起

Prot // 指定共享内存的访问权限PROT_READ(可读), PROT_WRITE (可写), PROT_EXEC (可执行)flags // MAP_SHARED MAP_PRIVATE中必选一个// MAP_ FIXED不推荐使用addr //共内存享的起始地址,一般设0,表示由系统分配

Mmap( ) // 返回值是系统实际分配的起始地址

if((vd->map = (unsigned char*)mmap(0, vd->mbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED,

vd->fd, 0)) < 0)

{

perror("v4l_mmap mmap:");

return -1;

}

(5)Mmap方式下真正做视频截取的VIDIOCMCAPTURE

ioctl(vd->fd, VIDIOCMCAPTURE, &(vd->mmap)) ;

若调用成功,开始一帧的截取,是非阻塞的,

是否截取完毕留给VIDIOCSYNC来判断

(6)调用VIDIOCSYNC等待一帧截取结束

if(ioctl(vd->fd, VIDIOCSYNC, &frame) < 0)

{

perror("v4l_sync:VIDIOCSYNC");

return -1;

}

若成功,表明一帧截取已完成。可以开始做下一次VIDIOCMCAPTURE

frame是当前截取的帧的序号。

****关于双缓冲:

video_mbuf mbuf.frames = 2; //一帧被处理时可以采集另一帧

int frame; //当前采集的是哪一帧

int framestat[2]; //帧的状态没开始采集| 等待采集结束

帧的地址由 vd->map+ vd->mbuf.offsets[vd->frame]得到

采集工作结束后调用munmap取消绑定

munmap(vd->map, vd->mbuf.size)

/* 关于直接读取的方式,太落伍,不再赘述*/

背景:

阅读新闻

Camera 驱动和编程

[日期:2012-12-31] 来源:Linux社区作者:iibull [字体:大中小] 我们要区分video为顺序式和交错式:

顺序式video顺序的传输video image所有的行,

交错式video则把一个video划分成两个fields,分别保存video image的奇数行和偶数行,被称作奇数field 和偶数field.

阴极射线电视机需要交替的显示行来组成一个完整的帧,交替的时延需要我们交替的传输奇数field和偶数field.

这个奇怪的技术的引用是因为:在刷新率接近电影时,图片会消退的过快。使用field可以避免使用double buffer以及额外的带宽需求。

首先要明确camera并不是在同一时间曝光一帧,camera通过许多fields来传输这些帧的,这些field是在

不同瞬间拍照。屏幕上的一个对象因此会在两个field之间产生动画效果。这种情况下需要识别哪一帧更老一点,也称作“瞬间序”

当驱动通过fields 提供或者接收images,应用层应该知道如何通过这些fields组合成帧,通过划分为top bottom field, “空间序”:

top field的第一行是帧的第一行,

bottom field的第一行是帧的第二行。

/* 问题:多个fields和一个完整的帧的关系*/

然而因为field是一个跟着一个拍的,争论帧是由top还是bottom开始的是没意义的,任何两个相邻的top bottom field, 或者bottom top field都可以组成一个有效的帧。

与直觉相反top field不一定是older field, older filed是否包含top 或者bottom lines是由video标准决定的. 因此要区分瞬间序和空间序。下面的图会给出清晰的解释。

所有的video capture和out devices必须汇报当前的field顺序。一些驱动可能允许选择不同的序,end 应用可以在调用VIDIOC_S_FMT前初始化struct v4l2_pix_format的field成员。否则可以使用

V4L2_FIELD_ANY

下面列出了可能的field类型

V4L2_FIELD_ANY 0Application 可以请求使用这个参数,如果

V4L2_FIELD_NONE, V4L2_FIELD_TOP,

V4L2_FIELD_BOTTOM V4L2_FIELD_INTERLACE 中任何一个格式都支持.驱动选择使用哪一个格式依赖于硬件能力,以及请求的image尺寸,驱动选择一个然后返回这个格式。struct_buffer的field成员不可以为

V4L2_FIELD_ANY.

V4L2_FIELD_NONE 1Images是顺序式格式,驱动可以指定这种order,当驱动无法区分V4L2_FIELD_TOP和V4L2_FIELD_BOTTOM

V4L2_FIELD_TOP 2

Images仅仅包含top field

V4L2_FIELD_BOTTOM 3Images仅仅包含bottom field. 应用可能希望防止设备捕获interlaced的图片,因为这种图片会在运动物体周围产生毛状特效

V4L2_FIELD_INTERLACED 4Images包含top和bottom field, 隔行交替,fields的瞬间序依赖于当前video的标准。M/NTSC首先传输bottom field, 其他的则先传输top field

V4L2_FIELD_SEQ_TB 5Images包含top和bottom field, top field的行首先存放在memory中,然后紧跟着bottom field的行。Fields 一直以瞬间序存储,较老的放在内存前面。Images的尺寸和帧相关,而不是field

V4L2_FIELD_SEQ_BT 6Images包含top和bottom field, bottom field的行首先存放在memory中,然后紧跟着top field的行。Fields 一直以瞬间序存储,较老的放在内存前面。Images的尺寸和帧相关,而不是field

V4L2_FIELD_ALTERATE 7一个帧的两个field分别放在不同的buffer, 按照瞬间序,也就是说老的一个是第一个。driver或者应用指明field

的奇偶性(奇偶性:当前的field是top 还是bottom field). 任何两个连续的field构成一个frame,是否两个field是连续的,不需要drop掉他们,可以通过v4l2_buffer中的sequence 成员判定。Images的尺寸和frame而不是fields相关

V4L2_FIELD_INTERLACED_TB 8Images 包含top和bottom field, 每行交替,top field 在前面。top field首先传送

V4L2_FIELD_INTERLACED_BT 9Images 包含top和bottom field, 每行交替,bottom field在前面。bottom field首先传送

Field Order, Top Field First Transmitted

Field Order, Bottom Field First Transmitted

背景:

阅读新闻

Camera 驱动和编程

[日期:2012-12-31] 来源:Linux社区作者:iibull [字体:大中小] /*一点小小的补充,两篇文章足以掌握摄像头的编程方法*/

Video4Linux(简V4L)是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供一系列接口函数,这些视频设备包括现今市场上流行的TV卡、视频捕捉卡和USB摄像头等。对于USB口摄像头,其驱动程序中需要提供基本的I/O操作接口函数open、read、write、close的实现。

对中断的处理实现,内存映射功能以及对I/O通道的控制接口函数ioct1的实现等,并把它们定义在struct file_operations中。这样当应用程序对设备文件进行诸如open、close、read、write等系统调用操作时,Linux内核将通过file_operations结构访问驱动程序提供的函数。例如,当应用程序对设备文件执行读操作时,内核将调用file_operations结构中的read函数。

在系统平台上对USB口数码摄像头驱动,首先把USB控制器驱动模块静态编译进内核,使平台中支持USB 接口,再在需要使用摄像头采集时,使用insmod动态加载其驱动模块,这样摄像头就可正常工作了,接着进行了下一步对视频流的采集编程。

程序中定义的数据结构

struct video_capability grab_cap;

struct video_picture grab_pic;

struct video_mmap grab_buf;

struct video_mbuf grab_vm;

这些数据结构都是由Video4Linux支持的,它们的用途如下:

*video_capability包含摄像头的基本信息,例如设备名称、支持的最大最小分辨率、信号源信息等,分别对应着结构体中成员变量name [32]、maxwidth、maxheight、minwidth、minheight、channels(信号源个数)、type等;

*video_picture包含设备采集图像的各种属性,如brightness(亮度)、hue(色调)、contrast(对比度)、whiteness(色度)、depth(深度)等;

*video_mmap用于内存映射;

*video_mbuf利用mmap进行映射的帧信息,实际上是输入到摄像头存储器缓冲中的帧信息,包括size (帧的大小)、frames(最多支持的帧数)、offsets(每帧相对基址的偏移)。

程序中用到的主要系统调用函数有:

open("/dev/voideo0",int flags)、

close(fd)、

mmap(void *start,size_t length,int prot,int flags,int fd,off_t offset)、

munmap(void *start,size_tlength)、

ioctl(int fd,int cmd,…)。

前面提到Linux系统中把设备看成设备文件,在用户空间可以通过标准的I/O系统调用函数操作设备文件,从而达到与设备通信交互的目的。当然,在设备驱动中要提供对这些函数的相应支持。

这里说明一下ioctl(int fd,int cmd,…)函数,它在用户程序中用来控制I/O通道,其中,fd代表设备文件描述符,cmd代表用户程序对设备的控制命令,省略号一般是一个表示类型长度的参数,也可没有。

***采集程序实现过程***

首先打开视频设备,摄像头在系统中对应的设备文件为/dev/video0,采用系统调用函数

grab_fd=open("/dev/video0", O_RDWR),grab_fd是设备打开后返回的文件描述符(打开错误返回-1),以后的系统调用函数就可使用它来对设备文件进行操作了。

接着,利用 ioctl(grab_fd,VIDIOCGCAP,&grab_cap)函数读取struct video_capability中有关摄像头的信息。该函数成功返回后,这些信息从内核空间拷贝到用户程序空间grab_cap各成员分量中,使用printf 函数就可得到各成员分量信息,例如printf("maxheight=%d",grab_fd.maxheight)获得最大垂直分辨率的

大小。

用ioctl(grab_fd,VIDIOCGPICT,&grab_pic) 函数读取摄像头缓冲中video_picture信息。在用户空间程序中可以改变这些信息,具体方法为先给分量赋新值,再调用VIDIOCSPICT ioctl函数,例如:grab_pic.depth=3;

if(ioctl(grab_fd, VIDIOCSPICT, &grab_pic)<0)

{

perror("VIDIOCSP[1]ICT");

return -1;

};

完成以上初始化设备工作后,就可以对视频图像截取了,有两种方法:

一种是read()直接读取; // 通过内核缓冲区来读取数据

另外一种mmap()内存映射。

/* mmap()通过把设备文件映射到内存中,绕过了内核缓冲区,最快的磁盘访问往往还是慢于最慢的内存访问,所以mmap()方式加速了I/O访问。

另外,mmap()系统调用使得进程之间通过映射同一文件实现共享内存,各进程可以像访问普通内存一样对文件进行访问,访问时只需要使用指针而不用调用文件操作函数。因为mmap()的以上优点,所以在程序实现中采用了内存映射方式,即mmap()方式。*/

利用mmap()方式视频裁取具体进行操作如下。

①先使用ioctl(grab_fd, VIDIOCGMBUF, &grab_vm) 函数获得摄像头存储缓冲区的帧信息,

之后修改video_mmap中的设置,例如重新设置图像帧的垂直及水平分辨率、彩色显示格式。可利用如下语句

grab_buf.height=240;

grab_buf.width=320;

grab_buf.format=VIDEO_PALETTE_RGB24;

②接着把摄像头对应的设备文件映射到内存区,具体使用

grab_data=(unsigned char*)mmap(0, grab_vm.size, PROT_READ|PROT_WRITE,

MAP_SHARED, grad_fd, 0)

这样设备文件的内容就映射到内存区,该映射内容区可读可写并且不同进程间可共享。该函数成功时返回映像内存区的指针,挫败时返回值为-1。

背景:

阅读新闻

Camera 驱动和编程

[日期:2012-12-31] 来源:Linux社区作者:iibull [字体:大中小] 下面对单帧采集和连续帧采集进行说明:

*单帧采集

在上面获取的摄像头存储缓冲区帧信息中,最多可支持的帧数(frames的值)一般为两帧。对于单帧采集只需设置grab_buf.frame=0,即采集其中的第一帧,使用ioctl(grab_fd,VIDIOCMCAPTURE,&grab_buf) 函数,若调用成功,则激活设备真正开始一帧图像的截取,是非阻塞的。

接着使用ioctl(grab_fd,VIDIOCSYNC,&frame) 函数判断该帧图像是否截取完毕,成功返回表示截取完毕,之后就可把图像数据保存成文件的形式。

ioctl (grab_fd, VIDIOCMCAPTURE, &grab_buf)

ioctl (grab_fd, VIDIOCSYNC, &frame)

*连续帧采集

在单帧的基础上,利用grab_fd.frames值确定采集完毕摄像头帧缓冲区帧数据进行循环的次数。

在循环语句中,也是使用VIDIOCMCCAPTURE ioct1和VIDIOCSYNC ioctl函数完成每帧截取,但要给采集到的每帧图像赋地址,利用语句buf=grab_data+grab_vm.offsets[frame],然后保存文件的形式。

若要继续采集可再加一个外循环,在外循环语句只要给原来的内循环再赋frame=0即可。

------------------------------------------------------------------------------------------------------------------------------------

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define CLEAR(x) memset (&(x), 0, sizeof (x))

struct buffer {

void * start;

size_t length;

};

static char * dev_name = "/dev/video0";

static int fd = -1;

struct buffer * buffers = NULL;

FILE *file_fd;

static unsigned long file_length;

static unsigned char *file_name;

int main (int argc,char ** argv)

{

struct v4l2_capability cap;

struct v4l2_format fmt;

file_fd = fopen("test.jpg", "w");

fd = open (dev_name, O_RDWR /* required */ | O_NONBLOCK, 0); ioctl (fd, VIDIOC_QUERYCAP, &cap);

CLEAR (fmt);

fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

fmt.fmt.pix.width = 640;

fmt.fmt.pix.height = 480;

fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;

fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;

ioctl (fd, VIDIOC_S_FMT, &fmt);

file_length = fmt.fmt.pix.bytesperline * fmt.fmt.pix.height; buffers = calloc (1, sizeof (*buffers));

buffers[0].length = file_length;

buffers[0].start = malloc (file_length);

for (;;)

{

fd_set fds;

struct timeval tv;

int r;

FD_ZERO (&fds);

FD_SET (fd, &fds);

/* Timeout. */

https://www.360docs.net/doc/fc3922052.html,_sec = 3;

https://www.360docs.net/doc/fc3922052.html,_usec = 0;

r = select (fd + 1, &fds, NULL, NULL, &tv);

if (-1 == r) {

if (EINTR == errno)

continue;

printf ("select");

}

if (0 == r) {

fprintf (stderr, "select timeout\n");

exit (EXIT_FAILURE);

}

if (read (fd, buffers[0].start, buffers[0].length))

break;

}

fwrite(buffers[0].start, buffers[0].length, 1, file_fd);

free (buffers[0].start);

close (fd);

fclose (file_fd);

exit (EXIT_SUCCESS);

return 0;

}

linux 下视频设备设置的几个参数v4l video4linux v4l2 ioctl

用一系列的ioctl发命令控制设备。v4l支持的ioctl命令大概有二十几个,为了尽快的编出一个

简单的图象捕捉程序,让我们先来看看几个主要的命令:

1. ioctl(fd,VIDIOCGCAP,&cap);

该命令主要是为了获取电视卡的功能信息。例如电视卡的名称,类型,channel等。参数cap是一个结构,当ioctl命令返回时,结构的各成员就被赋值了,结构体的定义为:

struct video_capability

{

char name[32];

int type;

int channels; /* Num channels */

int audios; /* Num audio devices */

int maxwidth; /* Supported width */

int maxheight; /* And height */

int minwidth; /* Supported width */

int minheight; /* And height */

};

channel 指的是有几个信号输入源,例如television,composite,s-video等。

2.ioctl(fd,VIDIOCGCHAN,&vc)

3.ioctl(fd,VIDIOCSCHAN.&vc)

这两个命令用来取得和设置电视卡的channel信息,例如使用那个输入源,制式等。vc 是一个video_channel结构,其定义为:

struct video_capability

{

char name[32];

int type;

int channels; /* Num channels */

int audios; /* Num audio devices */

int maxwidth; /* Supported width */

int maxheight; /* And height */

int minwidth; /* Supported width */

int minheight; /* And height */

};

struct video_channel

{

int channel;

char name[32];

int tuners; //number of tuners for this input

__u32 flags;

__u16 type;

__u16 norm;

};

成员channel代表输入源,通常,

0: television 1:composite1 2:s-video

name 表示该输入源的名称。

norm 表示制式,通常,

0:pal 1:ntsc 2:secam 3:auto

4. ioctl(fd,VIDIOCGMBUF,*mbuf)

获得电视卡缓存的信息,参数mbuf是video_mbuf结构。其定义如下:

struct video_mbuf

{

int size; /* Total memory to map */

int frames; /* Frames */

int offsets[VIDEO_MAX_FRAME];

};

size是缓存的大小,frames表明该电视卡的缓存可以容纳的帧数,数组offsets则表明

对应一帧的起始位置,0帧对应offsets[0],1帧对应offsets[1]....

执行完该命令后,就可以用mmap函数将缓存映射到内存中了。大致用法可以参考以下的代

struct video_mbuf mbuf;

unsigned char *buf1,*buf2;

if(ioctl(fd,VIDIOCGMBUF,&mbuf)<0)

{

perror("VIDIOCGMBUF");

return -1;

}

printf("the frame number is %d/n",mbuf.frames);

buf1 = (unsigned char*)mmap(0,mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,fd.0);

buf1 = buf1 + mbuf.offset[0];

buf2 = buf1 + mbuf.offset[1];//当然,如果mbuf.frames=1,就不需要下面的了。

......

5. ioctl(fd.VIDIOCMCAPTURE,&mm)

启动硬件去捕捉图象,mm 是video_mmap 结构,设置捕捉图象需要设置的信息。结构体

如下定义:

struct video_mmap

{

unsigned int frame; /* Frame (0 - n) for double buffer */

int height,width;

unsigned int format; /* should be VIDEO_PALETTE_* */

};

frame :设置当前是第几帧

height,width:设置图象的高和宽。

format :颜色模式

要注意的是,该命令是非阻塞的,也就是说,它仅仅设置了硬件,而不负责是否捕捉到图象。

要确定是否捕捉到图象,要用到下一个命令。

6. ioctl(fd,VIDIOCSYNC,&frame)

等待捕捉到这一帧图象。frame 是要等待的图象,它的值应和上一个命令中设置的frame相对应。好了,说了这么多,读者大概也对视频捕捉有了一个了解,是不是想亲自动手试一下,那就让我们开始实际程序的编写吧。

下面我们会编一个程序,将捕捉到的图象存为jpeg文件。为此,还要向大家介绍一个函数,int write_jpeg(char *filename,unsigned char *buf, int quality,int width, int height, int gray) {

struct jpeg_compress_struct cinfo;

struct jpeg_error_mgr jerr;

FILE *fp;

int i;

unsigned char *line;

int line_length;

if (NULL == (fp = fopen(filename,"w")))

{

fprintf(stderr,"grab: can't open %s: %s/n",filename,strerror (errno));

return -1;

}

cinfo.err = jpeg_std_error(&jerr);

jpeg_create_compress(&cinfo);

jpeg_stdio_dest(&cinfo, fp);

cinfo.image_width = width;

cinfo.image_height = height;

cinfo.input_components = gray ? 1: 3;

cinfo.in_color_space = gray ? JCS_GRAYSCALE: JCS_RGB;

jpeg_set_defaults(&cinfo);

jpeg_set_quality(&cinfo, quality, TRUE);

jpeg_start_compress(&cinfo, TRUE);

line_length = gray ? width : width * 3;

for (i = 0, line = buf; i < height; i++, line += line_length)

jpeg_write_scanlines(&cinfo, &line, 1);

jpeg_finish_compress(&(cinfo));

jpeg_destroy_compress(&(cinfo));

fclose(fp);

return 0;

}

这个函数很通用,它的作用是把buf中的数据压缩成jpeg格式。

/* 下面是一个完整的程序test.c

* gcc test.c -o test -ljpeg

*/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define WIDTH 320

#define HEIGHT 240

#define V4L_DEVICE "/dev/video0"

main()

{

unsigned char* buf;

int i,j;

int fd;

int re;

struct video_capability vcap;

struct video_channel vc;

struct video_mbuf mbuf;

struct video_mmap mm;

fd = open(V4L_DEVICE, O_RDWR);

if(fd<=0)

{

perror("open");

exit(1);

}

if(ioctl(fd, VIDIOCGCAP, &vcap)<0)

{

perror("VIDIOCGCAP");

exit(1);

}

fprintf(stderr,"Video Capture Device Name : %s/n",https://www.360docs.net/doc/fc3922052.html,);

摄像头驱动vidpid大全

最常见的摄像头硬件ID:VID_0AC8&PID_0302 VID_0AC8是中芯微的代码, 常见方案如下: USB\VID_0AC8&PID_303B 301PLH方案/301plh.htm USB\VID_0AC8&PID_301B 301B方案/301B.htm USB\VID_0AC8&PID_305B 305B方案/305B.htm USB\VID_0AC8&PID_307B ZS211方案/ZS211.htm USB\VID_0ac8&PID_0321 VC0321 /VC0321.htm USB\VID_0ac8&PID_0323 VC0323 /VC0323.htm USB\VID_0ac8&PID_0323 ZC0323P /ZC0323P.htm USB\VID_0ac8&PID_0328 /ZC0326.htm USB\VID_0ac8&PID_0326 ZC0326 /ZC0326.htm 中星微无驱方案摄像头1 /VM332.htm 支持下列硬件ID: USB\VID_0ac8&PID_3313 USB\VID_0ac8&PID_0331 USB\VID_0ac8&PID_331B USB\VID_0ac8&PID_0332 USB\VID_0ac8&PID_332D USB\VID_0ac8&PID_3330 USB\VID_0ac8&PID_3332 USB\VID_0ac8&PID_3333 USB\VID_0ac8&PID_3340 USB\VID_0ac8&PID_3342 USB\VID_0ac8&PID_3343 USB\VID_0ac8&PID_0336 USB\VID_0ac8&PID_336D

蓝牙4.0的驱动安装和产品使用说明

4.0蓝牙的驱动安装和产品使用说明 您好!欢迎您使用本产品!让我们一起尽情享受蓝牙的无线快乐吧! 首先让我们先大概了解一下本产品的特色: 1.CSR V4.0蓝牙适配器采用了CSR(Cambridge Silicon Radio)公司的最新的8510芯片。 2.支持Bluetooth High Speed v 3.0与low energy v 4.0,并 完全向下兼容v1.1/v1.2/v2.0/v2.1的蓝牙设备; 3.CSR蓝牙 4.0芯片通过被称为Wideband Speech的技术进 行音频编码解码,并进一步消除背景噪声和干扰,使无线音频的传输质量大幅提升,A2DP蓝牙立体声音频传输的音效极佳,可以媲美有线音频传输的音质; 4.蓝牙4.0技术拥有极低的运行和待机功耗,同时拥有跨厂商互 操作性,3毫秒低延迟,AES-128加密,无线覆盖范围增强; 5.是蓝牙3.0的升级增强版本,与3.0版本相比最大的不同就是低 功耗。

一:驱动部分 本产品是支持免驱,即插即用的。免驱的蓝牙适配器:意思并不是指不要驱动,而是微软公司自己在操作系统里集成了蓝牙驱动,当蓝牙适配器插上电脑后系统会自动安装微软的蓝牙驱动。但是经我们测试,目前微软自己的蓝牙驱动仅仅能支持蓝牙键鼠协议,部分手机的蓝牙文件传输和蓝牙串口等,并不能支持蓝牙音频功能。如果仅仅用免驱的适配器来连接蓝牙键盘或者鼠标,的确可以不用再额外安装驱动,直接插上去就可以连接、使用,但是如果需要与蓝牙耳机连接或者想体验更多的蓝牙应用,那么必须安装我们光盘内的驱动。 本驱动是简体中文版本 Windows XP_32位/Windows vista_32位/Windows7_32位/Windows8_32位操作系统,请打开“千月_32位”文件夹,双击setup 文件,即可开始千月蓝牙软件与驱动程序的安装。 Windows XP_64位/Windows vista_64位/Windows7_64位/Windows8_64位操作系统,请打开“千月_64位”文件夹,双击setup 文件,即可开始千月蓝牙软件与驱动程序的安装。 经测试,本驱动使用简单,性能稳定,为不影响您的正常使用,请安装完成后设置为不要再在线升级,具体操作请参考下图:

camera驱动和编程

Camera 驱动和编程 了解了framebuffer,摄像头便只是fb的数据来源而已。先了解些相关的概念:V4L2(video 4 linux 2) 可以支持多种设备,它可以有以下几种接口: 1. 视频采集接口(video capture interface):这种应用的设备可以是高频头或 者摄像头.V4L2的最初设计就是应用于这种功能的. 2. 视频输出接口(video output interface):可以驱动计算机的外围视频图像设备--像可以输出电视信号格式的设备. 3. 直接传输视频接口(video overlay interface):它的主要工作是把从视频采集设备采集过来的信号直接输出到输出设 备之上,而不用经过系统的CPU. 4. 视频间隔消隐信号接口(VBI interface):它可以使应用可以访问传输消隐期的视频信号. 5. 收音机接口(radio interface):可用来处理从AM或FM高频头设备接收来的音频流. Video4linux下视频编程的流程:(1)打开视频设备:(2)读取设备信息(3)更改设备当前设置(没必要的话可以不做)(4)进行视频采集,两种方法: a.内存映射 b.直接从设备读取(5)对采集的视频进行处理(6)关闭视频设备。/* 这样的流程地球人都晓得*/ 关键步骤介绍:(1)打开视频:Open(”/dev/video0”,vdàfd);关闭视频设备用close(”/dev/video0”,vdàfd);(2)读

video_capability中信息ioctl(vd->fd, VIDIOCGCAP, &(vd->capability))成功后可读取 vd->capability各分量eg.(3)读video_picture中信息ioctl(vd->fd, VIDIOCGPICT, &(vd->picture));(4)改变video_picture中分量的值(可以不做的)先为分量赋新值,再调用VIDIOCSPICTEg.vd->picture.colour = 65535;if(ioctl(vd->fd, VIDIOCSPICT, &(vd->picture)) < 0){perror("VIDIOCSPICT");return -1;}(5)初始化channel (可以不做的)必须先做得到vd->capability中的信息for (i = 0; i < vd->capability.channels; i++){ vd->channel[i].channel = i; if (ioctl(vd->fd, VIDIOCGCHAN, &(vd->channel[i])) < 0) { perror("v4l_get_channel:"); return -1; }} /* 通过ioctl,将struct v4l_struct作为参数的设备操作而已,那么重点将是整个结构体:struct v4l_struct*/ typedef struct v4l_struct{ int fd; struct video_capability capability; struct video_channel channel[4]; struct video_picture picture; struct video_window window; struct video_capture capture; struct video_buffer buffer; struct video_mmap mmap; struct

未能成功安装设备驱动程序 MTP USB设备安装失败的解决办法

MTP USB设备安装失败未能成功安装设备驱动程序 终极解决方法 环境介绍:电脑系统win7(32位)已安装摩托罗拉手机驱动版本(其他版本应该也行,不行的话去摩托罗拉官网下载最新驱动) 手机型号:摩托罗拉defy mb525(系统) 备注:其他电脑操作系统和不同型号手机可参考此方法,找到相应设置项即可。 问题简介: 1.当我们把手机连接至电脑,把模式调制成“摩托罗拉手机门户”时,出现下列情况 2.过一会之后便会弹出提示说:未能成功安装设备驱动程序

3.单击查看详情便弹出窗口如下图所示: 4.此时桌面右下角图标出现黄色三角号,如图所示: 5.于是我们就开始不淡定了,怎么看怎么别扭、抓狂、按耐不住。下面介绍问题解决方案 解决方法: 1.我的电脑——右键单击——管理——设别管理器,之后会看到如图所示:在便携设备下有黄色三角号提示,即是我们纠结的MTP USB设备安装不成功的展示。

2.对手机进行设置(这是关键步骤),(备注:以MIUI手机操作系统为例,其他手机操作系统需将USB绑定服务开启即可)。选择设置——系统——共享手机网络——USB绑定,将该选项设置为“开”,这是你会发现如图所示变化,在设备管理器面板中没有了便携设备选项及黄色三角号提醒,如图所示:(但桌面右下角的黄色三角警示还在)

3.在完成以上步骤后,用手机打开WIFI并登录无线WLAN,手机打开网页检验连接是否正常,若正常则如下图所示,黄色三角号警示消失,问题解决;若以上步骤没有解决问题,请先连接WIFI并登录WLAN之后,再按步骤操作。 4.完成以上步骤并解决问题后,选择电脑桌面网络——右键单击——属性,如下图所示:此时不仅手机能上网,而且电脑也能正常连接网络,正常上网。(我的体验是连接数据不稳定,时不时的要手机重新登陆WIFI,才有数据传输,可能是高校WLAN的问题,在家网速快的可以尝试一下) 5.通过这个问题的解决,我才知道原来MTP USB设备安装失败,未能成功安装设备驱 动程序的原因是我们手机里面没有启用该设备服务。今天才知道MTP USB设备是与手 机里的共享手机网络中“USB绑定”服务相关联的,是电脑用来使用手机WIFI网络连 接进行上网的工具。

摄像头 驱动安装不了 解决方法

摄像头驱动安装不了解决方法.txt世上最珍贵的不是永远得不到或已经得到的,而是你已经得到并且随时都有可能失去的东西!爱情是灯,友情是影子。灯灭时,你会发现周围都是影子。朋友,是在最后可以给你力量的人。一、驱动不容易安装的原因 1、目前市面上流行的中星微摄像头驱动版本很多,许多用户在安装卸载驱动过程中残留有垃圾文件在系统注册表里面,造成后面的驱动更新过程中安装困难; 2、目前市面上存在着一种克隆操作系统,里面集成了中星微旧版并同过了WHQL的驱动,当用户安装新买的摄像头或更新最新驱动后,摄像头无法正常工作; 方法一、自动卸载方法 步骤一、点击开始菜单中对应驱动的Uninstall卸载,(有可能Uninstall的功能已经破坏,那么可以通过安装新驱动进行反安装,系统会首先将旧驱动卸载掉,同样也可以达到目的。)步骤二、在新的驱动安装前选择附件中以下相对应的可执行文件: FOR_XP_ME_98.EXE 用于Windows XP/ME/98 FOR_Win2K.EXE 用于Windows 2000 (注意:该工具要求系统的默认路径是C盘才有效,在Windows ME/98操作系统下如出现错误对话框,表示系统已经干净了,该工具不会对已经安装的驱动产生危害) 步骤三、安装新的驱动 方法二、手动卸载方法 步骤一、在我的电脑-工具-文件夹选项-查看中将隐藏文件和文件夹选择为“选择所有文件和文件夹 然后到C:\Windows\inf文件夹中将所有的OEM文件(如oem0.inf,oem0.pnf;oem1.inf,oem1.pnf…)剪切并转移到另外的目录中保存或者手动删除掉该摄像头对应的oem文件 步骤二、完成上面的步骤后,插入USB摄像头,这时电脑会发现新硬件并弹出安装驱动的信息,选择取消,然后用鼠标右键点击我的电脑,选择属性,在弹出系统属性界面中,进入系统属性-硬件-设备管理器将带有感叹号的PC CAMERA按鼠标右键卸载; 步骤三、拔除摄像头,开始安装新的驱动。 针对以上第二种现象 步骤一、克隆操作系统是将摄像头驱动默认存放在C:\Windows\Driver\Camera\301P文件夹下面,当你点击新的摄像头驱动光盘安装时,系统不会提示已经存在有摄像头驱动并把此驱动卸载,请把这个文件夹找到并删除掉; 步骤二、先安装新的摄像头驱动,再插上摄像头装载硬件,安装完成后重新启动电脑后可以正常使用; 步骤三、不需重复以上两个步骤,直接点击新的光盘安装最新的驱动,插上摄像头后系统检测到新硬件,并自动完成硬件驱动装载; 步骤四、进入到设备管理器中,,可以看到图像处理设备已经成功安装,但当你打开“AMCAP”预览图像时会出现无法预览、白屏、黑屏现象; 步骤五、把鼠标右键放在图像处理设备的“Vimicro USB PC Camera(ZC0301PL)”更新驱动程序,出现对话框后选择“从列表或指定为位置安装 步骤六选择下一步后选择“不要搜索”,进入“从软盘安装”界面。 步骤七:点击浏览,将路径指向驱动光盘目录或最新驱动目录下面的“usbvm31b.inf” 步骤八:一直点击“下一步”完成驱动安装;

摄像头工作原理(驱动详细)

■Dolumr CCS £f f I Analog Processirg //薄i 10oit A2C RESET I MCLK SDA SSL 敷醐ft% YLV RGB拍隹 PCLK VSYhC HSYNC 一、摄像头工作原理 上一篇我们讲了摄像头模组的组成,工作原理,作为一种了解。下面我们析摄像头从寄存器 角度是怎么工作的。如何阅读摄像头规格书(针对驱动调节时用到关键参数,以GT2005为例)。 规格书,也就是一个器件所有的说明,精确到器件每一个细节,软件关心的寄存器、硬件关心的电气特性、封装等等。单单驱动方面,我们只看对我们有用的方面就可以了,没必要全部看完。主要这些资料全都是鸟语,全部看完一方面时间上会用的比较多,找到关键的地方 就行了。 1、camera的总体示意图如下:控制部分为摄像头上电、I2C控制接口,数据输出为摄像头 拍摄的图传到主控芯片,所有要有data、行场同步和时钟信号。GT2005/GT2015是CMOS 接口的图像传感器芯片,可以感知外部的视觉信号并将其转换为数字信号并输出。 我们需要通过MCLK给摄像头提供时钟,RESET是复位线,PWDN在摄像头工作时应 该始终为低。PCLK是像素时钟(这个应该是等同于CSI中的普通差分时钟通道),HREF是行参考信号,VSYNC是场同步信号。一旦给摄像头提供了时钟,并且复位摄像头,摄像头就开始工作了,通过HREF, VSYNC和PCLK同步传输数字图像信号。数据是通过D0~D7 这八根数据线并行送出的。 Pixel Array 161SH x 1215V ilGOOH x 1200V} Timing11 Contra A7-r B 3 C Gamma EJcp enhancs Configuration Registers 1 mage Signal Procking fntH 叩就<i「C& - noise

扫描仪驱动安装步骤

扫描仪驱动安装步骤 一、安装 注意:安装扫描仪驱动前,请不要启动扫描仪。 1、打开光盘,双击“电子档案扫描必备软件”->“扫描仪软 件”->“扫描仪驱动” 2、双击“setup.exe”图标,点击“下一步” 3、点击“下一步” 4、点击“下一步” 5、点击“是” 6、选择要安装的目录,建议不与操作系统安装在同一磁盘 里,点击“下一步” 7、点击“下一步” 8、点击“下一步” 9、点击“下一步” 10、点击“完成” 二、更新 1、打开光盘,双击“电子档案扫描必备软件”->“扫描仪软 件”->“扫描仪补丁”->“ScannPatch” 2、双击“FhkSp”图标,显示“安装成功”,点击“确定”。 三、安装扫描仪设置软件 1、打开光盘,双击“电子档案扫描必备软件”->“扫描仪软 件”->“ScandAll”,双击“ScandAllPRO”的图标

2、去掉“安装Scan to Microsoft SharePoint。”前面的选项 “√”,点击“ok” 3、点击“下一步” 4、选择“我接受许可证协议中的条款”,点击“下一步” 5、点击“下一步” 6、选择要安装的目录,建议不与操作系统安装在同一磁盘 里,点击“下一步” 7、点击“下一步” 8、点击“下一步” 9、点击“完成” 四、配置扫描仪 1、打开扫描仪开关,启动扫描仪 2、双击桌面快捷方式图标,打开扫描仪配置软件 3、点击菜单栏中的“扫描”->“选择扫描仪” 4、如下图所示,选择扫描仪fi-6130,点击选择 5、点击菜单栏中的“扫描”->“设置” 6、进入设置界面,在“图像模式”下拉选项中,选择“灰度” 7、点击下面的“选项”按钮 8、在“旋转”选项卡中,“自动检测尺寸和偏斜”选项中,选 择“自动页面尺寸检测”。 9、在“工作/缓存”选项卡中,“预先抓纸”选项中,选择“重 叠检测(超声波)”。

操作系统安装未知设备驱动的安装方法

未知设备驱动的安装方法 (内容收集整理自网络,特此) 设备管理器中却还是有不明装置,请问要如何找到这个装置的驱动程序? 1、在设备管理器对此不明装置点鼠标右键>内容(Properties) 2、点选详细数据(Details) >硬件标识符(Hardware Ids)

3、可以看到值(Value)出现一串夹杂英文、数字的值,代表的意思如以下表格 DEV=Device装置 4、利用VEN/DEV or VID/PID后面的数值,至以下网页查询相关信息 PCI Express装置:https://www.360docs.net/doc/fc3922052.html,/ ,进入网页后可看到输入VEN/DEV的字段(该网站已经无效,请访问:http://pci-ids.ucw.cz/read/PC/) USB装置:https://www.360docs.net/doc/fc3922052.html,/usb.ids ,进入网页后,可看到文本文件,可使用使用Ctrl+F查询VID,再比对PID即可

5、以步骤3的图片(PCI Express装置)为例: l 得到的值为PCI\VEN_8086&DEV_0102&SUBSYS_844D1043&REV_09,此为PCI Express 装置,所以我们进入https://www.360docs.net/doc/fc3922052.html,/ l 在Vendor Search输入8086得到以下结果 l 点选0x8086 Intel Corporation会展开此vendor所有的Device l 此时按Ctrl+F查询DEV:0102,就可以找到此装置为Intel HD Graphics 2000,再去下载相关驱动程序来安装就可以了 6、再以步骤3的图片(USB装置)为例: l 得到的值为USB\Vid_0b05&Pid_1731&Rev_0001,此为USB装置,所以我们进入https://www.360docs.net/doc/fc3922052.html,/usb.ids l 按Ctrl+F查询VID:0b05,可得此装置为ASUSTek的装置

PCCamera驱动安装指南

PC Camera驱动安装指南 版本: 0.0.2 SW-xx-xx-xxxx 2006-05-27 https://www.360docs.net/doc/fc3922052.html,

修订历史

重要声明 版权声明 版权所有 ? 2005, 展讯通信有限公司,保留所有权利。 商标声明 展讯通信有限公司和展讯通信有限公司的产品是展讯通信有限公司专有。在提及其他公司及其产品时将使用各自公司所拥有的商标,这种使用的目的仅限于引用。 不作保证声明 展讯通信有限公司不对此文档中的任何内容作任何明示或暗示的陈述或保证,而且不对特定目的的适销性及适用性或者任何间接、特殊或连带的损失承担任何责任。 保密声明 本文档(包括任何附件)包含的信息是保密信息。接收人了解其获得的本文档是保密的,除用于规定的目的外不得用于任何目的,也不得将本文档泄露给任何第三方。

目录 1简介 (5) 1.1目的 (5) 1.2范围 (5) 1.3组成 (5) 1.4说明 (5) 2安装指南 (6) 2.1windows@ 2000平台安装指南 (6) 2.2windows@ xp及windows@2003平台安装指南 (8) 3注意事项及提示 (13)

1 简介 1.1 目的 此文档介绍了PC Camera驱动在Windows@ 2000系列平台、windows@ XP系列平台和windows@server 2003上的安装方法。 1.2 范围 此文档针对的范围是所有需要使用PCCamera的用户。 1.3 组成 PC Camera驱动由以下几个文件组成,分别是 SciCamD.inf、SciCamD.cat、SciCamD.sys、 SciCamDec.sys、usbcamex.sys和本安装指南。 1.4 说明 PC Camera当前驱动只支持Windows@ 2000系列平台、windows@ XP系列平台和windows@server 2003,不支持其他平台。

寻找摄像头驱动的方法,告别万能驱动

寻找摄像头驱动的方法,告别万能驱动 QQ 2009-02-12 21:46 阅读709 评论0 字号:大中小 寻找摄像头驱动的方法,告别万能驱动 摄像头用久了或重新安装系统后,遇到光盘驱动不知道放哪里了,可以通过硬件ID来精确找到所需要的驱动或寻求帮助。具体办法如下: 方法是:右键我的电脑--管理--设备管理器--找到摄像头的有问号的设备--双击--找到详细信 息--里面有个硬件ID。 类似于USB\VID_07E4&ID_9473这样的东西,VID就是芯片厂商代码,PID就能确定摄 像头芯片方案,然后就可以对照下载驱动了。 什么是硬件ID呢? 硬件ID是电脑所有硬件的一个编号,所有设备都有如下编号:VEN_1106&DEV_3038,VE N代表硬件厂商,DEV代表产品编号。USB设备会有如下编号:VID_045E&ID_0039, 道理跟上面的是一样的。所有的测试软件都有可能会出错,只有硬件ID是最可靠的,各位只要确认下INF文件包含需要的硬件ID,就保证是可以用的。 如何获得硬件ID? 最简单的方法是直接在设备管理器中查看。右键“我的电脑” --- 管理(第四个就是管理)--- 找到里面的“设备管理器” --- 无论什么设备双击打开,选择“详细信息” --- 就可以看到“P CI\VEN_1106&DEV_3059&SUBSYS_82121565&REV_60\3&13C0B0C5&0&8D”这样的一串字符,里面的VEN_1106&DEV_3059就是关键的硬件ID,点击字符按键盘“CTRL+C”就可以 复制出来了,贴到论坛就可以了。 当然你也可以用EVEREST生成硬件报告,里面也可以找到硬件ID。 我们打开驱动的INF文件,就可以找到里面的“VEN_10EC&DEV_8180”对应设备管理器的硬 件ID即可判断驱动是否正确。 以最常见的摄像头为例,由于摄像头厂家众多,驱动非常混乱,各个网站也出现所谓的万能,这个世界有万能的东西吗?让我们相信硬件ID吧,集中市面的硬件ID,因为摄像头的芯片厂家就那么几家,这样就可以让大家可以很方便找到自己所有需要的驱动。 查看摄像头硬件ID的方法 右键点击“我的电脑”-“管理”-“设备管理器”-“图像处理设备”选择任意一个摄像头设备双击, 在“详细信息”一栏即可看到下面这个信息: 2_30_d992b48b7f8 e721.gif(18.44 KB)

软件、驱动安装方法.

2.1 Quartus II 软件的安装 TD-EDA 实验系统使用Quartus II 集成开发环境Quartus II 4.2 版本,为了使Quartus II 软件 的性能达到最佳,建议计算机的最低配置如下: (1) 奔腾II 400MHz、512MB 以上系统内存; (2) 大于1G 的安装Quartus II 软件所需的最小硬盘空间; (3) Microsoft Windows NT4.0(Service Pack 4 以上)、Windows2000 或Windows XP 操作系统。 注意:Quartus II 软件不支持Windows98 操作系统。 (4) 用于ByteBlaster II 或ByteBlaster MV 下载电缆的并行口(LPT 口); (5) Microsoft IE5.0 以上浏览器; (6) TCP/IP 网络协议; (7) 网卡一块。 注意:Quartus II 软件必须在安装有网卡的PC 上使用。 用户在确保计算机满足上述配置后就可以安装Quartus II 软件,下面简单介绍Quartus II 4.2 版软件的安装过程: 1. 将Quartus II 设计软件的光盘放入计算机的光驱,从资源管理器进入光盘驱动器,双击Quartus II 目录下的install.exe 文件,出现如图2-1-1 所示的Quartus II 安装界面。 图2-1-1 Quartus II 安装界面 2. 点击”Install Quartus II and Related Software”按钮进入如图2-1-2 所示的安装Quartus II 软

MTK平台camera(摄像头)调试教程

MTK 平台 CAMERA 驱动浅析 Camera Driver analysis in the platform of MTK Document Number: Preliminary (Released) Information Revision:0.1 Release Date: Ghong Confidential Revision 0.1-Feb.14 2012- 1 - ?2012 Ghong inc.

Revision History Revision Date (dd/mm/yyyy)Author Comments 0.114/02/2012Guoqing Zhang Draft Version Ghong Confidential Revision 0.1-Feb.14 2012- 2 - ?2012 Ghong inc.

Contents 一、.- 二、.- 三、.- 四、.- 五、.- 、.-、.-、.-、.- 六、.- 七、.- 、.-、.-、.-、.-、.-、.- 八、.- ).-).-).- 九、.- 十、.- Ghong Confidential Revision 0.1-Feb.14 2012- 3 - ?2012 Ghong inc.

一、手机Camera的物理结构: FPC: Flexible Printed Circuit 可挠性印刷电路板 Sensor:图象传感器 IR:红外滤波片 Holder:基座 Lens:镜头 二、Camera的成像原理: 景物通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为模 拟的电信号,经过 A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过 IO 接口传输到 CPU 中处理,通过 LCD 就可以看到图像了。 Ghong Confidential Revision 0.1-Feb.14 2012- 4 -

androidcamera摄像头驱动

android camera(一):camera模组CMM介绍 关键词:android camera CMM 模组 camera参数 平台信息: 核:linux 系统:android 平台:S5PV310(samsung exynos 4210) 下载:常用摄像头规格书(个别有android驱动程序) :bf3703 30W、gc0308 30W、ov7670、gt2005 200W、gt2015 200W、NT99250 200W、s5k5ba 200W、s5k4ba 新项目开案,代码他们还没给得到,三星那边办事流程就是多,烦人(嘿嘿只是说说,流程从另一方面说明了人家标准化的程度高)。看看代码,把前一段时间工作的容整理下,发出来。一方面有相同问题的“同学”可以看下,说不定问题就解决了;再一方面自己工作方面记录吧,整个流程整理出来,加深自己的印象,技术还得提高呀。这样利人利己的事多做点好……“为人民服务!”(我不是**党,只是技术P民) 这篇比较基础,做为科普知识看一下。 android camera(一):camera模组CMM介绍 android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF) android camera(三):camera V4L2 FIMC android camera(四):camera 驱动 GT2005 一、摄像头模组(CCM)介绍: 1、camera特写 摄像头模组,全称CameraCompact Module,以下简写为CCM,是影像捕捉至关重要的电子器件。先来特写,各种样子的都有,不过我前一段时间调试那个有点丑。

摄像头常见故障排除

检测不到摄像头 现象:我的PC机不能检测USB PC-Camera。 方法:检查操作系统、BIOS、USB接口和安装错误 步骤:如果你安装的是Windows 95,它不支持USB接口。您必须更新到Windows 98,Win 98支持USB接口。检查BIOS Setup,使USB装置有效。 若上述方法无效,尝试连接USB摄像头到第二个USB接口。 你可能安装了错误的驱动程序或选择了错误的设备,可以按照以下步骤查看系统设备并再次安装正确的驱动程序: 在控制面板(Control Panel)双击“系统”(System)图标。从系统属性(System Properties)对话窗中选择“设备管理器”(Device Manager)标签。双击“其它设备”(Other devices)查看内容。选择“未知设备”(Unknown Device)并单击“删除”(Remove)按钮,单击“更新”(Refresh),系统就会找到一个新设备,按照安装步骤安装摄像头驱动程序。 说明:这是比较复杂的问题,需要进行多方面的尝试。请多些耐心,并排除摄像头自身的故障。 颜色偏差 现象:新安装了摄像头,结果发现显示图像的质量不尽人意:颜色很怪,有种不伦不类的感觉。是偏色?还是什么颜色不正确?说不好。 方法:调整视频捕捉程序中与颜色相关的设置;更改PCI/VGA Palette Snoop设置;采用V8摄像机替代摄像头。 步骤:请参照您的摄像头使用的具体软件来调整视频捕捉程序中与颜色相关的设置。 开机时按Del键进入BIOS Setup,用光标键选择“BIOS Features Setup”、“PCI/VGA Palette Snoop”,缺省时为“Disabled”。PgUp键选择“Enabled”。按Esc键退出,按F10键、按“Y”保存并退出Setup。 V8摄像机的连接方法略。 说明:与PCI/VGA Palette Snoop相关的故障是一个常见故障。视频捕捉卡等颜色混乱也可以通过这个设置解决。 视频预显图像颜色不正 现象:我新买的摄像头的视频预显图像颜色不太正常,像使用多年的显示器一样,颜色开始异常,过一段时间才能好。 方法:摄像头自动调整。 步骤:请等待20~30秒,让Auto White(自动调白)来平衡或纠正。 说明:对于普通的摄像机,需要人工调白,我在拍摄《电脑之夜》时已经深有体会。每次拍摄之前,我都要先举着白纸,等待摄像机调白。

驱动程序详解及安装方法

驱动程序详解及安装方法 想要熟知驱动安装方法首先要了解电脑硬件大概信息,了解了硬件信息安装就比较简单了,下面笔者为大家详解,首先我们了解驱动为何物。 一、什么是驱动程序 根据百度百科:驱动程序,英文名为Device Driver,全称为设备驱动程序,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。因此,驱动程序被誉为硬件的灵魂、硬件的主宰、和硬件和系统之间的桥梁等。 刚安装好的系统操作系统,很可能驱动程序安装得不完整。硬件越新,这种可能性越大。菜菜熊之前看到的图标很大且颜色难看就是没有安装好驱动的原因。 二、驱动程序的作用 随着电子技术的飞速发展,电脑硬件的性能越来越强大。驱动程序是直接工作在各种硬件设备上的软件,其驱动这个名称也十分形象的指明了它的功能。正是通过驱动程序,各种硬件设备才能正常运行,达到既定的工作效果。

硬件如果缺少了驱动程序的驱动,那么本来性能非常强大的硬件就无法根据软件发出的指令进行工作,硬件就是空有一身本领都无从发挥,毫无用武之地。这时候,电脑就正如古人所说的万事俱备,只欠东风,这东风的角色就落在了驱动程序身上。如此看来,驱动程序在电脑使用上还真起着举足轻重的作用。 从理论上讲,所有的硬件设备都需要安装相应的驱动程序才能正常工作。但像CPU、内存、主板、软驱、键盘、显示器等设备却并不需要安装驱动程序也可以正常工作,而显卡、声卡、网卡等却一定要安装驱动程序,否则便无法正常工作。这是为什么呢? 这主要是由于这些硬件对于一台个人电脑来说是必需的,所以早期的设计人员将这些硬件列为BIOS能直接支持的硬件。换句话说,上述硬件安装后就可以被BIOS和操作系统直接支持,不再需要安装驱动程序。从这个角度来说,BIOS也是一种驱动程序。但是对于其他的硬件,例如:网卡,声卡,显卡等等却必须要安装驱动程序,不然这些硬件就无法正常工作。 三、驱动程序的界定 驱动程序可以界定为官方正式版、微软WHQL认证版、第三方驱动、发烧友修改版、Beta测试版。初学者尽量安装官方正式版,当然如果你脱离了菜鸟就可以尝试下各种版本的驱动。 动手安装驱动程序之前,必须先搞清楚,哪些硬件是需要安装驱动程序的,哪些是不需要的。根据前面的介绍,CPU、内存、软驱、键盘、显示器等一般都

摄像头工作原理(驱动详细)

一、摄像头工作原理 上一篇我们讲了摄像头模组的组成,工作原理,作为一种了解。下面我们析摄像头从寄存器 角度是怎么工作的。如何阅读摄像头规格书(针对驱动调节时用到关键参数,以GT2005为例)。 规格书,也就是一个器件所有的说明,精确到器件每一个细节,软件关心的寄存器、硬件关 心的电气特性、封装等等。单单驱动方面,我们只看对我们有用的方面就可以了,没必要全部看完。主要这些资料全都是鸟语,全部看完一方面时间上会用的比较多,找到关键的地方 就行了。 1、camera的总体示意图如下:控制部分为摄像头上电、I2C控制接口,数据输出为摄像头 拍摄的图传到主控芯片,所有要有data、行场同步和时钟信号。GT2005/GT2015是CMOS 接口的图像传感器芯片,可以感知外部的视觉信号并将其转换为数字信号并输出。 我们需要通过MCLK给摄像头提供时钟,RESET是复位线,PWDN在摄像头工作时应该始终为低。PCLK是像素时钟(这个应该是等同于CSI中的普通差分时钟通道),HREF是行参考信号,VSYNC是场同步信号。一旦给摄像头提供了时钟,并且复位摄像头,摄像头 就开始工作了,通过HREF,VSYNC和PCLK同步传输数字图像信号。数据是通过D0~D7这八根数据线并行送出的。

(1)、Pixel Array GT2005阵列大小为1268 列、1248 行,有效像素为1616 列, 1216 行。也就是说摄像头为1600X1200的时候,像素点要多于这个,去除边缘一部分,保证图像质量吧。 (2)、I2C这个不用说了,摄像头寄存器初始化的数据都从这里传输的,所有的I2C器件都一样的工作,来张图吧,后面做详细分析; 下面这一部分在调试驱动的过程中比较重要了: (3)、MCLK 电子元件工作都得要个时钟吧,摄像头要工作,这个就是我们所要的时钟,在主控制芯片提供,这个时钟一定要有,要不然摄像头不会工作的。 (4)、上下电时序,这个要接规格书上来,注意PWDN、RESETB这两个脚,不同的摄像 头不太一样,这个图是上电时序,上电时参考一下,知道在那里看就行;

驱动安装说明

驱动安装说明 以win10安装驱动为例,win7、win8安装步骤相同。 第一步:通过附赠的USB数据线使开发板与电脑连接上,数据线务必直接接到电脑自带USB接口上,请勿接在集线器上。 第二步:开发板通过数据线连接至电脑后打开《WIN7_8_10共用驱动》文件夹,鼠标光标指向“CH341SerSetup_5Lg.exe”驱动程序,单击鼠标右键,在弹出菜单中选择“以管理员身份运行” ,下一步 ,继续点下一步

,等待安装完成后点“完成”按键 第二步:查下系统为开发板分配的端口号。 鼠标光标指向“此电脑”或“我的电脑”单击右键,在弹出的菜单中 单击“管理” ,随后弹出的界面中单击“设备管理器”,展开“端口”(此刻开发板必须保持与电脑连接上),如下图:

在正确安装完成驱动后,此时便可在端口列表中查看到系统为开发板分配的端口号。如下图“USB-SERIAL CH340(COM3)”就是系统分配的端口号,在烧写程序的时候需要选择。注意:本次演示中系统分配的端口号为“USB-SERIAL CH340(COM3)”,端口序号是系统随机分配的,用户在安装时可能分配的端口号有所不同,如分配为“USB-SERIAL CH340(COM5)”等,这都属于正常现在,在以后烧录程序中选择对应的端口号即可。 XP系统驱动安装方法: 打开《XP驱动》文件夹,直接双击运行“CH341SER V3.3.EXE”驱动程序,在软件界面中点击“安装”等待安装完成即可。如果安装失败,可以使用win10系统安装步骤去安装。 如果在安装过程中遇到无法解决的异常,您可以联系淘宝旺旺上在线客服为您处理,工作时间周一至周六上午9点整~下午6点整。

驱动程序安装方法

驱动程序安装方法 初识电脑的人,可能为安装驱动程序而头疼。因为对驱动程序了解得不多就会在安装过程中走不少弯路,下面就给大家介绍一下安装驱动程序的两种常用方法和一些实用技巧。 一、安装即插即用设备的驱动程序 安装前的准备工作很重要,一般我们拿到要安装的新硬件时,首先要查看外包装盒,了解产品的型号、盒内部件及产品对系统的最低要求等信息。紧接着就要打开包装盒,取出硬件产品、说明书和驱动盘(光盘或软盘),认真阅读说明书或驱动盘上的ReadMe 文件,一般说明书上写有安装方法和步骤,以及安装注意事项。除了阅读说明书外,还应记得硬件产品上印刷的各种信息以及板卡产品使用的主要芯片的型号。这些信息就是确定产品型号及厂家的重要依据,只有知道这些,才能在网上查找最新的驱动程序。最后按照说明书上介绍的方法来安装硬件。通常安装内置板卡、内置驱动器,使用串口或PS /2接口的设备都应关机断电后再操作,而安装USB设备、笔记本电脑的PC卡时可以带电热插拔。当然,如果是Win2000系统则均可热插拔。完成前面的准备工作之后,就可以启动Windows 来安装驱动程序了。通常情况下,Windows 能够自动检测到PCI 卡、AGP卡、ISA卡、USB设备以及多数打印机和扫描仪等外设,并提示用户插入安装盘。以YAMAHA724声卡为例,其在Win98下安装驱动程序的详细步骤如下。 1.Win98在启动过程中会自动检测即插即用设备,一旦发现了新设备,并且在INF目录下有该设备的.inf 文件,系统将自动安装驱动程序;如果这是一个新设备,INF目录下没有相应的.inf 文件,那么系统就会启动硬件向导。我们单击“下一步”让安装向导自动搜索设备驱动程序,然后再单击“下一步”。 2.在图3中只选中“指定位置”,插入驱动光盘,并单击“浏览”,根据说明书的介绍,选择简体中文版驱动程序所在的目录“E:\Lx_so u n d /Yamaha /Win9X”,点“确定”后单击“下一步”。需要注意的是:Win95的安装向导没有自动搜索功能,我们必须选择“从磁盘安装”,并指定驱动程序所在的位置。驱动程序所在的目录通常是驱动盘上的“Win95”、“Win9X”或“Windows98”目录。 3.硬件安装向导会在指定目录下查找与设备相符的.inf 文件,此例中,硬件向导将在指定目录下找到并向作户报告发现YAMAHA724声卡驱动程序,继续按“下一步”。 4.硬件安装向导显示Windows 准备安装的驱动程序的信息,单击“下一步”后,硬件向导便会根据.inf 文件的内容把指定的文件拷贝到相应的目录下,并在注册表中写入相应的信息,安装成功后显示出对话框。 5.对多数设备而言,到这里驱动程序就算安装完毕了。但如果你安装的是声卡那就还未结束,因为刚才的步骤只能装完声卡的主体部分。单击“完成”后,Windows 又会报告发现了两个新硬件,分别是声卡的DOS 仿真部件和声卡上的游戏控制端口。由于此时SBPCI9X.inf 文件已经被拷到“Windows /INF /Other”子目录下,所以Windows 能够自动安装好这两种设备的驱动程序。 6.驱动程序安装完毕后,我们需要检查设备能否正常工作。检查前还要进行额外的设置,例如使用网卡之前必须先安装和设置网络协议,用调制解调器上网之前要先“新建连接”等。此例中,在“控制面板”里打开“系统”→“设备管理器”→“声音、视频和游戏控制器”,可以看见下面多了三个设备,只要设备的小图标上没有黄色惊叹号,就表示驱动程序运行正常。 二、安装非即插即用设备的驱动程序

MTK_camera驱动流程总结_pei

Camera驱动流程总结 范军君 junjun.fan@https://www.360docs.net/doc/fc3922052.html,

目录 1,Camera架构及流程简析2,初始化过程camera id检测3,Camera上电流程 4,Camera打开流程

Camera架构及流程简析 MTK平台camera架构: Kernel部分主要有两块:一块是image sensor驱动,负责具体型号的sensor的id检测,上电,以及在preview,capture,初始化,3A等等功能设定时的寄存器配置。另一块是isp driver,通过DMA将sensor数据流上传。 本篇主要介绍image sensor驱动的流程。 HAL层这边主要分3块,一块是imageio,主要是数据buffer上传的pipe。一块是drv,包含imgsensor和isp的hal层控制。最后是feature io,包含各种3A等性能配置。 本篇对HAL涉入不深,只在分析开机过程的id检测时会分析hal层的控制,属于第二块。

流程简析: 主要发生在两个时间点:开机过程中camera的动作以及打开应用时camera的动作。 开机时,camera完成了sensor框架的初始化,id检测,以及上下电操作。 打开应用时,camera会有上电,完成寄存器的初始配置,向上层传送基本参数及配置信息,以及preview和capture模式循环。

初始化过程camera id检测 代码分析: =>alps/mediatek/custom/common/kernel/imgsensor/kd_sensorlist.c module_init说明这段code在kernel初始化,也就是手机开机时运行。 在模块初始化函数中,注册一个i2c device,同时注册了一个platform driver

相关文档
最新文档