|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1. 定义
v' j5 I, d5 f. C
5 b& J8 Y2 g, jV4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。2 L) ?/ z* T5 j) w
. p- d4 T1 \" C5 X/ j. _" h9 `; ?
2. 工作流程:
# u, M; c K* S
3 u2 r1 I7 A2 K1 z9 [* L7 w打开设备-> 检查和设置设备属性-> 设置帧格式-> 设置一种输入输出方法(缓冲 区管理)-> 循环获取数据-> 关闭设备。3 l/ o+ e( P1 v z6 j: }1 m
" [' }1 g: i+ j. L
3. 设备的打开和关闭:
; |0 E, B- ~1 N. L. f; v
8 h" p7 t* F5 N/ o#include <fcntl.h>3 ^* u7 [4 `( l1 B; H
5 V C: d# L- Rint open(const char *device_name, int flags);
: v+ f4 u; p! b% p3 r+ U8 C2 p
: N* n+ J$ X9 @1 A5 t2 L* l1 D6 T#include <unistd.h>
8 g5 q7 H/ [& r5 m4 ]
1 w+ }* ~! ? ]& x! Y% Dint clo se(int fd);* H D& K8 G( f
例:
' h8 |6 u! u; j- {2 u/ `- U5 c h$ }2 x8 V7 w8 y% O
int fd=open(“/dev/video0”,O_RDWR); // 打开设备' ?& f0 O( D' e
" B8 U4 h, p. B/ M7 D1 g3 P
close(fd); // 关闭设备' U" Z( n$ b7 K& N; _% F" S
2 s/ f( _/ U7 \" w) ^+ n% u3 G注意:V4L2 的相关定义包含在头文件<linux/videodev2.h> 中.+ @3 O2 Z5 @% Q$ A
6 Q3 L! L O" k" _4. 查询设备属性: VIDIOC_QUERYCAP2 Z! h" r' h8 p0 D3 t6 e7 u
' m* K/ S& `9 Z3 M相关函数:; I" h4 m: t9 ~ z f' Q% F6 B
! V$ L; Y) @1 F; E$ Mint ioctl(int fd, int request, struct v4l2_capability *argp);2 l' s: C/ `4 H
# _# x- y$ T' t# |
相关结构体:) g! B. O; i8 w' s6 y H& S$ g6 p
/ T0 w+ w* @) L* P0 n
struct v4l2_capability& s9 h$ d: B# \7 h5 V
' [7 L+ ~4 ]; v0 ^9 F2 ?8 b{# P9 L6 S6 s5 f$ w( F$ i- e* x
4 B+ `6 d* _' \( I* E7 g8 |
u8 driver[16]; // 驱动名字1 k* `3 Z) w/ v
! \: I i( n: Bu8 card[32]; // 设备名字+ r& U2 j9 h3 |* W2 N/ u* E1 g
8 v, |' a0 A2 Q! u
u8 bus_info[32]; // 设备在系统中的位置! Z/ C) w. H' H$ ?
8 H# X- I2 V) m
u32 version; // 驱动版本号
2 m5 w$ @3 I1 p, Q: M7 R( |" P% u' S6 {1 T2 J
u32 capabilities; // 设备支持的操作
6 P; {9 ]' i; `- ^- C# p" F* J' l# {- O
u32 reserved[4]; // 保留字段
8 d0 f; `# _, r X7 n2 L: b U$ X! |3 l2 ~" ~( [4 a
};+ _# O& l& n! V* p4 f8 D/ @# Q$ E
- A# i( o* A# H1 J/ u
2 U3 j( {8 w( t6 p; S" M: Vcapabilities 常用值:' d) d: y" o9 G: q; C# y H7 }
; J" \1 }- o1 ?# z5 ^( W# oV4L2_CAP_VIDEO_CAPTURE // 是否支持图像获取6 _6 k9 B- G2 `& L& W
+ y. D+ c7 w$ X0 |6 @* h8 d例:显示设备信息
+ G" L; e# `( F
& N* A8 Z7 D/ L& i) P, ?struct v4l2_capability cap;3 J! M4 R/ u' k( G6 h
% Z2 X8 v0 B, k& kioctl(fd,VIDIOC_QUERYCAP,&cap);
0 ^2 A& B$ v8 F2 e, Q! A. n, w, x- n0 [
printf(“Driver Name:%s\nCard Name:%s\nBus info:%s\nDriver Version:%u.%u.%u\n”,cap.driver,cap.card,cap.bus_info,(cap.version>>16)&0XFF, (cap.version>>8)&0XFF,cap.version&0XFF); d5 l& [! s3 \3 d* F2 l$ c
/ |0 h2 V% g7 V/ |5. 设置视频的制式和帧格式
6 u+ e k! s; R. c& u% g
) O0 t) ^# o v制式包括PAL,NTSC,帧的格式个包括宽度和高度等。9 P j6 A4 }# x- w2 m: F
$ d5 t3 ]2 }; Q' s l) U( q
相关函数:, ?; P. D( L6 b+ R$ \/ `- Y, ? t
4 _$ U2 p, j+ g V1 B
# g- v3 }1 k% E& s8 |
: m, u) C0 w0 R/ ?5 j; r9 q( W
$ L. O9 k, A: I: R, C) @* f) y @" M; `
4 U- y( v# ~' @( i5 x6 g
9 E* W8 u/ y+ b. E. @* ?% q% R; S* a4 g
" p' @6 }7 c( |* h5 d- v& z* l
% F! A$ T ~1 \2 M# h# i
|
|