标题: 帮忙看看问题
zonewone
新生入学
Rank: 1
注册用户



UID 77819
精华 0
积分 2(积分有什么用?)
帖子 7
阅读权限 10
注册 2004-3-23
来自 湖北
状态 离线
发表于 2008-4-25 15:44  资料  个人空间  主页 短消息  加为好友 

Linux爱好者的盛会
帮忙看看问题

我写的一个设想头采集数据经过网络收发的程序。
,^Z+ce1\        B@!hf{P
{Tk)ci%yHj(B%`/* main 函数  */www.linuxeden.com6W;K-Y+A W9J*n,E
#include <stdio.h>
wJ'a8v0q        ]www.linuxeden.com#include <stdlib.h>tNBK(JE
#include <errno.h>,?7B:K;r'yd
#include <string.h>Linux伊甸园论坛 o#x7P B8l
#include <sys/types.h>
&DMeA        NLinux伊甸园论坛#include <netinet/in.h>Linux伊甸园论坛w
OH!zv

#include <sys/socket.h>Linux伊甸园论坛~VDJ'|-R!I
#include <sys/wait.h>,^3_mY)H
#include <unistd.h>APU
e        \o        @`

#include <arpa/inet.h>Lt0^'\+N&ci*^'ff$jd
#include <sys/time.h>\Ea"\&vsw
#include <sys/types.h>0h"hy\.PkpUM
NIp


oB        ?6~r(p
-n.@Mn`+PO9T#include "video.h"mr:my        P0K%U
#include "main.h"
0Q'H8\x;w:^*LN/[#include "getpic.h"
_M/w;L/GY6Im@www.linuxeden.com,ztk8Y&F!p
#define MAXBUF (1024*20)
T eo+NG,JULinux伊甸园论坛
2KI$Sy
d\/E Gd;x
int main(int argc, char **argv)

Y/{3@n h6t7l/i
{ TOO!{7DX*~2is{
        int sockfd, new_fd;
9^)iav0pVm        socklen_t len;Qf N3cM*N
        struct sockaddr_in my_addr, their_addr;

n`/l"K+n \c
        \*S+L-J g3]cl
        unsigned int myport, lisnum;2q'njS.{6K(q
       
3F,Cg-n"@:Nz        FILE *fp;  /* target file */
|#SS`;`WJ
w2G
        char* filename = "grab.jpeg";        Linux伊甸园论坛O
_$wV,I!D9s0G        L


X$PyC _'?        char *buf = NULL;
P|$n;|-g1Wq iz        i0?.DLinux伊甸园论坛        int file_size = 0;
{8n5]HVZ4oZ
WE
www.linuxeden.com+n6i7`%q;]
        fd_set rfds;
2q]W
P/C
       
zDk
I1qLinux伊甸园论坛
        struct timeval tv;#a`&L7J[D
        int retval, maxfd = -1;:\%j0W8e1^O o1X
z

t+adf
jcMu

        if (argv[1])Linux伊甸园论坛QPr:_8^$i6@O
                myport = atoi(argv[1]);Linux伊甸园论坛X/H8[{8QYU(@P
        elsex['[-m}7Y6q
                myport = SERVER_PORT;
CM.m!\~       
\+y(Nt'n"F%y        if (argv[2])']2udu8W^u3Fn"T
                lisnum = atoi(argv[2]);
k.|-f_5s#H3j        else&v],?o
a.EK#b0U

                lisnum = LENGTH_OF_LISTEN_QUEUE;Linux伊甸园论坛[-B:S
h
]
`SM

        if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1)njW/`iq
        {
p9yA)T-|&~-A9H+Fwww.linuxeden.com                perror("socket");AO$]^(W|*cxvJ
                exit(1);5QDn}Ck^E
        }Linux伊甸园论坛;v1g]F4]
        bzero(&my_addr, sizeof(my_addr));
Fp*{PmVIN        my_addr.sin_family = PF_INET;1n
iP9Q L!u

        my_addr.sin_port = htons(myport);
f.F)gQ8vV*G+U        (i&\2v8r5n"B:e
        if (argv[3])www.linuxeden.comA]!aX+yiQlD5V
                my_addr.sin_addr.s_addr = inet_addr(argv[3]);
V9rW5H@kwww.linuxeden.com        else
;s1U)E"]?Lji                my_addr.sin_addr.s_addr = INADDR_ANY;%X8B9P][ha
;F"t;O{5gX*x
        if (bind(sockfd, (struct sockaddr *) &my_addr, \PB"R'Yy7h
                sizeof(struct sockaddr)) == -1)
x1Y A4U)q/Y        {        9L$n&f ?y;df
                perror("bind");LV`        C!T
                exit(1);
c[&y&~
q5V4\
        }www.linuxeden.com]k!?7p@0k2[
        if (listen(sockfd, lisnum) == -1)

eu[
P9E-JE T0nj:qY%I
        {Linux伊甸园论坛5IX$LIP@k J&w/?
                perror("listen");b'}o0Rg4m7V$H
                exit(1);7_*i-^.K4n
        }
`+?%m3Xw{f&N
:m.]j:L:ckLinux伊甸园论坛
a5j [}+i:v8Q
uph.Ho&}www.linuxeden.com        while (1))gj7[ vo6N
        {
!b"q4@ @4b%ba4[m                printf("\n--Wating for connecte!--颅\n");*B wR"_ Z'J
                len = sizeof(struct sockaddr);www.linuxeden.com@5j6Lc3m:Kw ^2p
                if ((new_fd = accept(sockfd, \+k6~xS!@y S
                        (struct sockaddr *)&their_addr, &len)) == -1)
Ol.}N#Ujd;bNCs                {
%_4j\1d#`5] P                        perror("accept");
:HjM0^@D6|                        exit(errno);V5[qK5q.T2s
                }else{
5V&w
U|ZU}!\xT
                        printf("server: got connection from %s, \
9}W0Z~e/b[                        port %d, socket %d\n",\
fvdU]                        inet_ntoa(their_addr.sin_addr),\
i+M"J2qNv)^6tldwww.linuxeden.com                        ntohs(their_addr.sin_port), new_fd);www.linuxeden.com;k$aiBk otj5S
                }Linux伊甸园论坛hk+OGp.Z0S*E
                while(1))n|q9TT-B\z
                {www.linuxeden.comM){V-CT Y

(q"zVI)Ao                get_pic(); //问题就出在这里
|8e4Z
o-Uuwww.linuxeden.com
8Mz&O9e-y#]%y)Ti^
                if ((fp = fopen(filename, "r+b")) == NULL)2BBF0q/ZI z"s-g0k
                {
5n
vj        AvQY,R
                        perror("open");
pu{*phs-h/U
D/G
wwww.linuxeden.com
                        exit(1);www.linuxeden.comm-O9f%K(FC3^d
                }5F)XU!c+vz_
P|

                fseek(fp, 0, SEEK_END);B O| @_d(Kq|o
                file_size = ftell(fp);www.linuxeden.com)Fz(E(sj5Z]v2g
                buf = (char*)malloc((int)(file_size+2));www.linuxeden.com5EE3pq&Rqq2E r
                memset(buf, 0, file_size+2);Linux伊甸园论坛1cC,sgv5Z
                fseek(fp, -(file_size), SEEK_END);L1K$|!ID!]
                fread(buf, file_size, 1, fp);Sv:Mi+[&V.w"V        X
                len = send(new_fd, buf, \
7mE(G&G9Bb(g)GkY@V4{c                        file_size, 0);
(|z1D+gK`|q's                if (len > 0)Fw O
W;SQ

                {
P\%LO%C)P'Zl/`

                        printf("Sending %s, length %d\n", buf, len);Linux伊甸园论坛(l        KzY        i2w$mIax
                }else{
p
E^B`JC`p
                        printf("%s,%s'\n", buf, \Linux伊甸园论坛+C$i'U U[P(x
                        errno, strerror(errno));
:{:ij)S$l        l                        break;
n)?l(h&X%z                }
P.oGe$E;X8HHwww.linuxeden.com               
&Z#L | OpqDN                fclose(fp);
%WWm(kqBwww.linuxeden.com                }
F
BPy'm0mG[www.linuxeden.com
       h5b[w9C
                close(new_fd);8|~'H(Rgu
        }H,zB/K9y9H+q
g2Z

        hj:uW
va1]

        close(sockfd);
        b6W.{+A`C        Linux伊甸园论坛L,xk)YF2T)X%G
        return 0;Linux伊甸园论坛4MlT*OZ"~
}
Q/RE&TW"v){
@7|$\\ gy-@qwww.linuxeden.com
l5L9f!Y}        v/*getpic*/
;g4k1ir
l1D[:\$}D1l~Linux伊甸园论坛
int get_pic(void)www.linuxeden.comx"i~f Hm
{`1zK]Q V        gNe
        v4l_device *vd;Linux伊甸园论坛4j]J:M(MFy `
        char *image_ptr;5c0TV2Y4H!E-K
//        printf("open v4l\n");7{:cH9MQ$s\
       
A(Q_z1p+o        v4l_open(vd);
hMD9R)e2l!ma        v4l_mmap(vd);[R u.Yz
z!D:g

//        img = (char *)v4l_open(vd);
%c~Sy/}\TLinux伊甸园论坛        image_ptr = (char *)v4l_get_data(vd);Hd6\~'A
        rgb_to_jpeg(JPEG_NAME, (unsigned char *)image_ptr, 20, 0); iO9GJ vt
tH

        www.linuxeden.com9RS6U6VU(W7P0M!{
        v4l_ummap(vd);*vZ:Q],p
        v4l_close(vd);l&T!nzm{h$|
        return 0;Linux伊甸园论坛:oLmK_ xS!p-~

.ah)Q%JsL;y}^!d}(u"F0eo:AN.Z

n"e(hh]LWK,w如果按照上面那种方式就是对的。
Gb?3o I0Y2y!\F但是如果写成下面这样的:用gdb调试发现在v4l_open()这个函数这里提示:段错误。为什么呢?
7Q8m'[ H.sLinux伊甸园论坛

?T8|(h%Q(awww.linuxeden.com
int main(int argc, char **argv)f
f,[,KWsH3`.UI `'F

{
9i}!i%cML        int sockfd, new_fd;#z'|?!^Eo
[        \8N`l

        socklen_t len;Linux伊甸园论坛_~)i8M:sf,D3r
        struct sockaddr_in my_addr, their_addr;M] i7Dlz)Y~
        /H3['gQ|2Alx        Y'F
        unsigned int myport, lisnum;Linux伊甸园论坛r,[C"|.h)R#yb I
w

       
V9F$H-\_,T L5Sm        FILE *fp;  /* target file */
6V3C\+y^6R7z        char* filename = "grab.jpeg";        ^p*[        }6z$r&F!d3x
X'c$N {y"@)x-Q4o
        char *buf = NULL;
,L%Do0`
i0^
        int file_size = 0;www.linuxeden.com2o6}v:AU[7Y
www.linuxeden.com7H/a*{z\5P
        fd_set rfds;1Y#IM'` F$_v w:}
       

q_df
q-^:l|www.linuxeden.com
        struct timeval tv;*VXSlO{
        int retval, maxfd = -1;%v3\I4D9n d
        if (argv[1])
U[M(wtX8E+y                myport = atoi(argv[1]);
0_d~@G4k,@ f![)G        else
0oBL*OJB"|Linux伊甸园论坛                myport = SERVER_PORT;A}6DKx y
M HP)CG

       
@(Vox.B#W@www.linuxeden.com        if (argv[2])
0nIvz;HGPGLinux伊甸园论坛                lisnum = atoi(argv[2]);Linux伊甸园论坛
A;qOX
cia

        else
ac
VRvh+A]        pO
                lisnum = LENGTH_OF_LISTEN_QUEUE;
Q0`        j!r#TB*DN        if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1)

Jl/\/JNf0f7o
        {www.linuxeden.com d]8w        J+Q-A
                perror("socket");

@cKI9Vg&F        Y/d7`6e
                exit(1);
6B!F(~ E*?-{P8CZZ        }
0]u~*wpM"p]qwww.linuxeden.com        bzero(&my_addr, sizeof(my_addr));u BD/nLbnr
        my_addr.sin_family = PF_INET;4F;k(FzD,\
        my_addr.sin_port = htons(myport);\Yt R1|
       
        w(fE,W\        if (argv[3])~%t,sS5D O&wN
Y

                my_addr.sin_addr.s_addr = inet_addr(argv[3]);Linux伊甸园论坛 OFg+p:DeF
        else
\!Um4x4X
Mwww.linuxeden.com
                my_addr.sin_addr.s_addr = INADDR_ANY;
0[~;CWmmN!L(U'eLinux伊甸园论坛        if (bind(sockfd, (struct sockaddr *) &my_addr, \
v.U'bh:?_] r                sizeof(struct sockaddr)) == -1)sF v3l
t0O+Wl

        {       
\3oQ6sRq
B8rdwww.linuxeden.com
                perror("bind");www.linuxeden.comrF
c
b
]%|

                exit(1);
xM2~.D8n9v        M        }
6El] cs D
Y8J`ULinux伊甸园论坛
        if (listen(sockfd, lisnum) == -1)z~Hv-aR
        {!z2|"{A+{MH
                perror("listen");
}(r{.\?BALinux伊甸园论坛                exit(1);q}        w0Csy
        }
K/c-Gr1uxALSH4jwww.linuxeden.com_V%lC0q1Tp
@ yp+N

        v4l_open(vd);   //4\        c%r.K Oqr

6Z0Z/f?*u        while (1))@.M%I{\aB
        {Linux伊甸园论坛:IZ*Q@WO
                printf("\n--Wating for connecte!--颅\n");6Ou l Yc]        N
                len = sizeof(struct sockaddr);;II\s ~5v#C1p:Rt
                if ((new_fd = accept(sockfd, \
lv6B+|2D&o8}9@-{                        (struct sockaddr *)&their_addr, &len)) == -1)
?v5m-m5]/v6AU                {
5Y7[8ED9bwww.linuxeden.com                        perror("accept");
\U:RSyjh^www.linuxeden.com                        exit(errno);?(e(S7~
Q0hk:]7e

                }else{
p,]9wm w*t*o                        printf("server: got connection from %s, \www.linuxeden.com\R]sys
                        port %d, socket %d\n",\-gGZ/Aw*H$X:J
                        inet_ntoa(their_addr.sin_addr),\
%t-~J4jgPn1G                        ntohs(their_addr.sin_port), new_fd); }@#~.U_[
                } q(BJ`p^H4g!? x:S
                while(1)
3XR ? Y        BXwww.linuxeden.com                {
~uo]$}#s        v4l_mmap(vd);  //  不同之处Linux伊甸园论坛u.yx$Y1Y Vs3B
        image_ptr = (char *)v4l_get_data(vd);  //修改        hJ7CVr/F
        rgb_to_jpeg(JPEG_NAME, (unsigned char *)image_ptr, 20, 0); //修改
(a.\3vc i,[7R
"ps0s:T+j\%y                if ((fp = fopen(filename, "r+b")) == NULL)
8mZ-[@o @?*c                {
1pS9|6u@D
Zwww.linuxeden.com
                        perror("open");
E%g1vvU        eU                        exit(1);
-c ]/x+l:~4l
q*bpo+Xwwww.linuxeden.com
                }
U}/~CSz$K4^xLinux伊甸园论坛                fseek(fp, 0, SEEK_END);|#S        Gr;[}
|

                file_size = ftell(fp);D7m;m|9Nt0?y
                buf = (char*)malloc((int)(file_size+2));Linux伊甸园论坛.rDH%m{nS        o2\
                memset(buf, 0, file_size+2);
].C9N$R5]0Y+eqxLinux伊甸园论坛                fseek(fp, -(file_size), SEEK_END);
(a
X
om;N W3TA
                fread(buf, file_size, 1, fp);
E a6?@6j{5hk                len = send(new_fd, buf, \
'?/W5o/EW8WLinux伊甸园论坛                        file_size, 0);
3Po!_#R ??TLinux伊甸园论坛                if (len > 0)OUm,Knqv;{&~q
                {Linux伊甸园论坛)q
QC/k1T        Cz'b

                        printf("Sending %s, length %d\n", buf, len);"D s/e\*?$?o4}"T
                }else{

}\5b2w@s'd*q.|r
                        printf("%s,%s'\n", buf, \
7oK ^k;B6hwww.linuxeden.com                        errno, strerror(errno));W(nz]1b6Le
                        break;/N)F/Pd,p"yn!L`:VO
                }
pi,Z!?L
D
                www.linuxeden.com#hwv%`A'm Y
                fclose(fp);
        Dy eF#{+@%c8q{P3|        v4l_ummap(vd); //修改
t5FJ1Fc4`www.linuxeden.com                }RGl+J.Z5t
       Linux伊甸园论坛!Q6Jy)A]u
                close(new_fd);
a \2|Vy4\
1QY$~
y T1u6_ |H

Tq^Kx,{8YOa,iLinux伊甸园论坛        }
8eZ(?Yz
J        EK+`www.linuxeden.com
                v4l_close(vd); //修改
wV0LI1[        close(sockfd);(TY[%rs
a4V AP

       
H;G`)EXX        return 0;7|
iSz$?q

}
}E7L
fC0r(K(P:hwww.linuxeden.com

'^.U|Zu*s        Q?/*v4l的几个函数的定义在此*/+e:L;K'q^2N8G;s
7PC;l _r
char *v4l_get_address(v4l_device *vd)8gN\*`
s:gH$D |

{
x-D(y9aZ^        return (vd->map + vd->mbuf.offsets[vd->frame_current]);Linux伊甸园论坛#|t1{baN!i
}8Q ed5V0t;}

)E:m`+] uTint v4l_open(v4l_device *vd)
2YkrGmB{y$GA+w3K)?!tlW
//open device
o        n7s7sEk0~`,]        if ((vd->fd = open(VD_NAME, O_RDWR)) < 0)
        n+b~6\
zT
@5dE;[
        {Qx"_^?6@
                perror("v4l_open");
7f        J-U8K4W                return ERR_VIDEO_OPEN;
kL!Rbs+vFU
y
        } t;Z8}-__1th

Ac2Z7Q0d!C(I1g(J

//get capabilityJ\,l3bEc`
        if (ioctl(vd->fd, VIDIOCGCAP, &(vd->capability)) == -1)
nv8qv,C7q        {
1}(F y_        {!|
A
                perror("v4l open : VIDOCGCAP");
BJ?]3s7Cwww.linuxeden.com//                return ERR_VIDEO_GCAP;!S8dThA
w]:p2hn

        }
/@@6l
{jX!K;qq
        if ((vd->capability.type & VID_TYPE_CAPTURE) == 0)t-K9\Y1@ R0mb
        {C+w({I        `g*nj
                perror("v4l open :VID_TYPE_CAPTURE");
%Wiuu'n)`$`}//                return ERR_VID_TYPE_CAP;
3v%S@N3~:`.yLinux伊甸园论坛        }
&h{1u,Ph(M)M:i       
r"E:N@E~!}-x&n xpBLinux伊甸园论坛        printf("capability.name: %s\n", vd->capability.name);
y5|0ThIB        printf("Type:%d\n", vd->capability.type);
3y:B4z;uF1n:c(_ o5jLinux伊甸园论坛i2?oF6r(D
        if(debug){;S6e_.C3P%E
        printf("Maxwidth:%d, Maxheight:%d\n",  \gZ
|
G"y
gE

                vd->capability.maxwidth, vd->capability.maxheight);Linux伊甸园论坛5YSK
w.jv6T!Wd&sN

        printf("Minwidth:%d, Minheight:%d\n", \D1z0}5[{rTF?
                vd->capability.minwidth, vd->capability.minheight);}
?0Z5f^]Y(_
'q|%EnV e0Y*M K"V
3L!}7PR*T3}#f"O//get pictureTs+K
`3bV

        if (ioctl(vd->fd, VIDIOCGPICT, &(vd->picture)) < 0)
Cy'X)w3`I        {
J6vapK&A+SLinux伊甸园论坛                perror("v4l get picture: VIDIOCGPICT");Linux伊甸园论坛`)l#j
C6kH

                return ERR_VIDEO_GPIC;www.linuxeden.com2c
G'e*v(R}

        }
|
t*m1hH.U
        if(debug)
u{,HK        iX
A S
        { J {2V _ V%t-|'QA
                printf("picture.palette : %d ", vd->picture.palette);
P4i5K*mU+v/aLinux伊甸园论坛                printf("picture.depth: %d\n", vd->picture.depth);Linux伊甸园论坛9UF~R2O)w
        }
2zSk!BO8t9F&F-{
S
S7nD

//set picture
7Mkv&H+~&Z#I+W2{Linux伊甸园论坛        vd->picture.depth = DEFULT_DEPTH;
$Y9O'?F1m]        vd->picture.palette = DEFULT_PAL;
e9ivW7o P~l        if (ioctl(vd->fd, VIDIOCSPICT, &(vd->picture)) < 0)
C#R.xo:Fe        {

O0_B&T3sLinux伊甸园论坛
                perror("v4l set picture: VIDIOCSPICT");
M-}9Ef1K'PnQY//                return ERR_VIDEO_SPIC;www.linuxeden.comM        CS        ^Tb:L6V9}
        }5[P/v9~*A0S)Z}
        if (ioctl(vd->fd, VIDIOCGPICT, &(vd->picture)) < 0)
h
Og        Cwb[y
        {'Q"L V|~UpE
                perror("v4l get picture: VIDIOCGPICT");
&CF(nnev.Ef                return ERR_VIDEO_GPIC;
(Mk k/L"Y Uo        }
-isL Q?'UC%J        if(debug){
(t`a/O3Y^        printf("picture.palette : %d ", vd->picture.palette);
g(xf`Y"j*~8kIwww.linuxeden.com        printf("picture.depth: %d\n", vd->picture.depth);}
$m%w Y7e|/g        dM
9QR'c4BE1C1aqoj
g{;U*T6Is(e(M!a PS;a?8E~
//get channels
tLx}@
H t
        int m = 0;

d9CB.YAd3u
        for(m = 0; m < vd->capability.channels; m++)
Lq6K}N9N.EPC]www.linuxeden.com        {www.linuxeden.com[9URQux3u]b!i
                vd->channel[m].channel = m;w |
}TjEv"?


%O
p3phk/@U/SF
                if(ioctl(vd->fd, VIDIOCGCHAN, \m$h+@$W#]R'uG
                        &(vd->channel[m])) < 0)
        zN&H%]|yG                {
        ?M#ntKZS9h                        perror("v4l get channels: VIDIOCGCHAN");
o o1rdJ(k?                        return ERR_VIDEO_GCHAN; S&G#U3\_ m
O _/h2w

                }
G#b m(?:y                vd->channel[m].norm = VIDEO_MODE_NTSC;9J LLJO!]7c
                E-cU
bSE
nt`z8E

                if(ioctl(vd->fd, VIDIOCSCHAN, &(vd->channel[m])) < 0)
N)if}`0yyb

                {]/\1UQ|7`sW
                        perror("vel get channels: VIDIOCSCHAN");
8b8c5t"L S                        return ERR_VIDEO_SCHAN;
D$L%B8Yc(ywww.linuxeden.com                }
v1I8r8C{B"P8L k|%`                        Av:a}p
        })T{cJ;^
        if(debug)
7K5Ma0D&{Linux伊甸园论坛                printf("Channels:%d, ", vd->capability.channels+1);1IaT.n"Rp
Linux伊甸园论坛
Q%CjSU(}JP


;ZB4D'D0ZmLinux伊甸园论坛//mmap_initLinux伊甸园论坛MHxM
zR7_.`A

        vd->mmap.width = IMGWIDTH;Ba$fn_B        T*Du
        vd->mmap.height = IMGHEIGHT;
SU(xzS"b f
|R;@'ELinux伊甸园论坛
        vd->mmap.format = vd->picture.palette;
/rq`/V&z4@K        vd->frame_current = 0;4I9w xP(m%YC-OA
        vd->frame_using[0] = vd->frame_using[1] = 0;Linux伊甸园论坛n\j#|.XrT;x

a'_ V
pAH
Z
//get buffer
F-I%i'r.nU.rrwww.linuxeden.com        if(ioctl(vd->fd, VIDIOCGFBUF, &(vd->buffer)) < 0)www.linuxeden.comG"Zp6O6`FtQK`
        {*_ g"[0m        Cd1T
                perror("v4l get mbuf: VIDIOCGFBUF");"sSsB?H
                return ERR_GET_BUF;,nSK/y~,^A
        }
3] Qr?*G//        printf("buffer.height: %d ", vd->buffer.height);
d @
C2le({!nLwww.linuxeden.com
//        printf("buffer.width: %d\n", vd->buffer.width);H2o:{V!A%Jpo
Linux伊甸园论坛9We(XA7nJ
yL        Z'_

        return 0;www.linuxeden.comwm'L5?
L6p\)_S2v

}d$`(O1sR$m?P.Wr kJ
www.linuxeden.comJr%e}
{N7A

int v4l_mmap(v4l_device *vd)#iTN
k:fC5~

{
UH)Z3T!j K5EC:v G${sHQ
///mmap_init

Pj:krT
n%L~5d
        if (ioctl(vd->fd, VIDIOCGMBUF, &(vd->mbuf)) < 0)\9{K7_SV
O

        {"m;t[n5@|}6Z0t!|N
_

                perror("v4l get mbuf: VIDIOCGMBUF");
:n!m-y4X)@!}2a,[N X*H"P
nLinux伊甸园论坛
                return ERR_GET_BUF;
H*r.Fdv y hv        }-K1G0?
^Y[

        if(debug)www.linuxeden.com(B~\J7z&S*Qa
                    printf(" Pic Size:%d\n", vd->mbuf.size);
zN&@ ^y1T3_QO-v W       
x"vX        ZVC1C oLinux伊甸园论坛        if ((vd->map = (char*)mmap(0, vd->mbuf.size, \
6f x5R+Y~m3}gGwww.linuxeden.com                PROT_READ|PROT_WRITE, MAP_SHARED, vd->fd, 0)) < 0)
Dd hh+m1kw.C
]e5W
        {W(]4f&J[
s,d

                perror("v4l mmap : map");
.P,XbH ?2zLinux伊甸园论坛                return ERR_MAP_SHARED;www.linuxeden.com
z(T%{
}1r4\

        }
"x,F0@+e0a3d9q       
:[$?!Xu\P        i;RFwww.linuxeden.com        return 0;
z3o8s8|mKJ}XG}www.linuxeden.comxA!C;Ke
`


E0R O q+Ch6VfI(f+mint v4l_get_data(v4l_device *vd)
5_l5K
EG.^5E
{.NcHw]+^i
        char *img_tmp;4SqG:qMy1g9D
F{

N
Ew(Ewi~

//grab frameLinux伊甸园论坛7[2M|sh?.u7O
        struct timeval tpstart,tpend;
3eM;zjF2W(B        float timeuse;Linux伊甸园论坛ME@q`El
        gettimeofday(&tpstart,NULL);p%BC6Z'R
_/@/M%t


YzN0I8Fz@Aw        vd->mmap.frame = 0; www.linuxeden.com5|1rB*U7MfK
        if (ioctl(vd->fd, VIDIOCMCAPTURE, &(vd->mmap)) == -1 )
4eHI1e5T.KwfLinux伊甸园论坛        {
2MZ
SL
Ug Uwww.linuxeden.com
       
r:vEE8]"{/_                perror("v4l grab start : VIDIOCMCAPTURE");
.p)aF)|RTi
V
                return ERR_MCAPT;www.linuxeden.comXmDe-OS~t1j
        }
wf6m$~'t        vd->frame_using[0] = 1, vd->frame_current = 0;
]JEnU,x
?r
Y6N
XY9Jwww.linuxeden.com
g5y'H_+AP.S9J
        gettimeofday(&tpend,NULL);www.linuxeden.com/Du-b9z-@\O
[vA)h

        timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec) + \
,Qr [2y1l;uwww.linuxeden.com                tpend.tv_usec-tpstart.tv_usec;Linux伊甸园论坛D-k N
f^%O5q(W

        timeuse/=1000000;|O|}'j.vQ
        if(debug)
Q{Qm|Linux伊甸园论坛                printf("timeuse: %f\n", timeuse);
QS/K)lV*~
y{N

k6yQ"v
^xwww.linuxeden.com
//grab syncZY$qY%M
        gettimeofday(&tpstart,NULL);,t%x,o _g9?u
        if (ioctl(vd->fd, VIDIOCSYNC, &(vd->frame_current)) < 0)
`#M5V:iy        {
l]:`JLM%[                perror("v4l suyc: VIDIOCSYNC");(igG5e
a)hm_

                return ERR_SYNC;
m#r0yr$xz2d~ q}!`uwww.linuxeden.com        }
7oZyg1Z
]Linux伊甸园论坛
        vd->frame_using[vd->frame_current] = 0;
1xX(sY5PLinux伊甸园论坛5k#Xi;AdEy`$y+Ev


RrR[2Z%_Linux伊甸园论坛
//
Ef7G'U5z+@@Linux伊甸园论坛        gettimeofday(&tpend,NULL);
@d'vUx        timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec) + \
6rcj.M]t ['MLinux伊甸园论坛                tpend.tv_usec-tpstart.tv_usec;/c[$^#K1c0h
~#jE

        timeuse/=1000000;/fT;KAP+I` ~(T
        if(debug)
n9MP8v y5mJ4P9^ai                printf("timeuse: %f\n", timeuse);
2b(zk\(N"gc#`}Linux伊甸园论坛        if(debug) DB%B"mZ
                printf("offsets :%d \n", \]'Si1x~3fUk
                        vd->mbuf.offsets[vd->frame_current]);dt+c7H]_.mhs Z
T;A        L~n]

yJ:?2]
c wh
// return 1
4?"EP&\"B;U*uwww.linuxeden.com        img_tmp = vd->map + vd->mbuf.offsets[vd->frame_current];
7oI;?sEo$~        return (int)img_tmp;
sk|1B'`9rq7E:ivt6gU*@?B|3d
}www.linuxeden.com(gIX|oI1{R
y
CY)ZM5L|

int v4l_ummap(v4l_device *vd)
`!h6m0}6e`        ~{(z7?%NE3uP \
        munmap(vd->map, vd->mbuf.size);
L5W]"?&Kwww.linuxeden.com        return 0;
nX;Onc*|N7v2O;s^www.linuxeden.com}www.linuxeden.comox k9sitn/nT
www.linuxeden.com{6h
VE7J

int v4l_close(v4l_device *vd)%D^+z.nA3h&P
{
Ti4Es4l7M(}www.linuxeden.com        close(vd->fd);
B%L\aaK,~PV r
Y
        return 0;
4^.[R2[(jM}"`EBFxh rN.YM
+O Id(uQS|$vY
void rgb_to_jpeg (char *filename, unsigned char *img, int quality, int gray);
        |H"q"`0K:v Ey I
w%~|JwF-HCwww.linuxeden.com
B-sU'WITG&_#fLinux伊甸园论坛帮忙看看为什么呢.Q-j#L FA3K {Q

"XcT7P4z
bwww.linuxeden.com
[ 本帖最后由 zonewone 于 2008-4-25 15:46 编辑 ]





树树
顶部
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 25(积分有什么用?)
帖子 5578
阅读权限 100
注册 2002-7-19
状态 离线
发表于 2008-4-26 20:27  资料  个人空间  短消息  加为好友 
vd声明在哪里,楼主告诉我先?不会又说是贴错了吧 S+Uo@E1^j
wP

\0iOK(m-xf4F
最近怎么帖子帖出来的代码这么怪的。。。。。。





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
zonewone
新生入学
Rank: 1
注册用户



UID 77819
精华 0
积分 2(积分有什么用?)
帖子 7
阅读权限 10
注册 2004-3-23
来自 湖北
状态 离线
发表于 2008-4-28 13:41  资料  个人空间  主页 短消息  加为好友 
vd声明在哪里,楼主告诉我先?不会又说是贴错了吧 www.linuxeden.com-C D n
gT[4Ks"e}

www.linuxeden.comS*]w-X,rDOC"l
最近怎么帖子帖出来的代码这么怪的。。。。。。
Y"u%b$ot!p*?Uk{"RU'z(iRF`2c
vd 的声明在main.h里面
d _2s-d9^
A9Fa8[Linux伊甸园论坛

.yGTn*ro'@v4l_device vd;
N%ny6j6FT.}1r7@#[如果是声明的问题,前面那种方式能正确执行么?





树树
顶部
不容错过的IBM 集群技术资源汇总
 



当前时区 GMT+8, 现在时间是 2008-5-12 10:10

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.183312 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP