|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1. 定义
; e2 T2 t' t4 _# ]2 R$ v% c; H# J+ c# C h
V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。" c6 O7 ^: x6 I9 T$ R8 }
" {- X& Y' p6 l* u" d1 }) W
2. 工作流程:/ a5 J* G( f3 m( ~
: \5 x5 V. z' D打开设备-> 检查和设置设备属性-> 设置帧格式-> 设置一种输入输出方法(缓冲 区管理)-> 循环获取数据-> 关闭设备。+ ?' N9 L) j Z$ z" L% v
) V3 \- `9 E3 o/ _0 z8 S% ]% \3. 设备的打开和关闭:( V! f& J% L8 O+ m5 I( Z
/ d7 g( \. y& j4 N M7 F( S; V
#include <fcntl.h>
1 M% E3 X6 {$ Z8 x
# a- w% f* _8 p4 n7 xint open(const char *device_name, int flags);
2 ~, Z% u8 {" z9 i& d' h* h& U
1 m. j) C/ Y1 y& h8 X8 a#include <unistd.h>9 ~$ H2 B) q r' ?# v
. Q, s6 p1 u' f4 J6 k3 nint clo se(int fd);! A) f6 k3 B0 o$ {2 ^, k
例:" L. u* F. f8 z5 }8 h. o' Z7 K
6 h. M8 f$ g; \2 g+ dint fd=open(“/dev/video0”,O_RDWR); // 打开设备. M2 p4 M4 d* \4 i; d7 j
' |3 L S1 r6 H$ k: R
close(fd); // 关闭设备
0 b. W# r/ a# _4 k# u" N6 s% s. g- f% A
注意:V4L2 的相关定义包含在头文件<linux/videodev2.h> 中.: }# k. _) T8 ^0 V; F! h8 L7 }
! u! u6 {; p; R6 Q4. 查询设备属性: VIDIOC_QUERYCAP
) Y* g$ N; u) ]( D2 X2 Y& ^; _% n3 A( k J
相关函数:
$ p4 |! A1 p `
" Y7 }- ^' m" Xint ioctl(int fd, int request, struct v4l2_capability *argp);
3 M6 w- _2 G0 m( B
, E0 \; n- N4 t, w/ H: ~3 b相关结构体:* ?6 ?; J5 j6 `; j# K
7 F. h# u" n+ A* v; K: [struct v4l2_capability
, t! k7 v3 j) r q% n3 i7 x9 W
0 K' i' }6 M5 p8 n; ?{
$ _* N4 C2 S/ T7 g6 h- q5 S9 R' ^6 j% M- ^' h/ j* Q$ Y3 [' m2 N3 d
u8 driver[16]; // 驱动名字
( u6 h' l! N7 _/ Q. m& s8 ^; N. C% m
u8 card[32]; // 设备名字
0 t0 Z- F. \3 ]; P7 E1 D d
: A0 X" C: F& w0 p, C" Ku8 bus_info[32]; // 设备在系统中的位置
; M6 F) E. M' q n0 s8 v4 t
- [4 D3 `+ l+ B6 F, w9 @u32 version; // 驱动版本号9 k. ?( i% O1 J* c! C" g0 @1 |* C
* N2 z) s' B5 U5 l' P$ T. j7 W2 h2 ^; Bu32 capabilities; // 设备支持的操作
7 ]3 ?8 K* n3 w5 }
3 T2 |( G* p2 ?u32 reserved[4]; // 保留字段5 a: \' o8 [ V3 Y3 `" }4 q
& `! H2 k& v: a0 r1 m
};, T O% q- X5 T
7 ?2 ^' R$ x) d7 i3 \9 h
f8 ^0 S5 U7 Y; ~/ z! J
capabilities 常用值:
7 _2 {& t |5 c; {$ O0 j. {5 ]% j8 o" V
V4L2_CAP_VIDEO_CAPTURE // 是否支持图像获取
- u ` o5 X. U1 E0 ~4 l" P4 z
' P9 C$ z! F1 z8 a# x, u7 W例:显示设备信息: Z7 M- s- h) V2 h4 h$ }2 ]0 i
; _, D! ~3 o: u! ^, `0 B
struct v4l2_capability cap;
9 {* m1 E) G( B" X( N9 Y5 s) E6 U2 O D- h7 P
ioctl(fd,VIDIOC_QUERYCAP,&cap);
6 N1 r7 q3 Y% X/ x* n2 f& W/ n6 r
& ?; y' z( i% }% m& Gprintf(“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);
# e2 _# h5 F* r7 N- V- b1 ?, D h0 q% G( y
5. 设置视频的制式和帧格式
, Y- Z& C4 u! ^ y' Q* g. i, w" M6 G% x1 f
制式包括PAL,NTSC,帧的格式个包括宽度和高度等。
9 o/ |' k4 g) a8 j4 t2 h/ V( `
相关函数:
1 K5 {: o) m( C! F: u" P; @& Y f" x' j, y4 b0 ?+ @& r* X& p
& }: u1 x) | A' }. |6 m
( j" X, J$ f7 K. j9 m; e8 ? J
7 m1 l7 c+ s: L8 {
( H5 {$ x1 v# K8 i9 Z8 i# d" A0 {$ ^- Y/ a- s2 C( O/ I+ S
1 B7 O* I0 m7 M% Y1 b) ^
/ Q) }. P" b+ u" y. i
& O) q3 S! S& t+ L$ h, p' F/ P A3 b \7 N. N' J0 y
|
|