|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1. 定义
& {* ~$ r' @" b; ]' ^0 A) ^6 ?! w4 \( P" C# ?1 I/ R. s+ q
V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。
" t8 \" z4 h* Q& q' V' z' P S
, e8 z/ ]% Z1 H% C- p2. 工作流程:
( _- R/ ?0 l. Z. y8 N, ~. l* B Y3 \8 e$ Y" [; U8 m) w
打开设备-> 检查和设置设备属性-> 设置帧格式-> 设置一种输入输出方法(缓冲 区管理)-> 循环获取数据-> 关闭设备。4 }0 L/ g w t' h; b
( \, V) w' u D* R9 C/ g. J3 \5 \3. 设备的打开和关闭:
9 z( x/ J( x/ ]
& N% F: O' C b- ]5 t#include <fcntl.h>
: b7 I, E: M1 a# O n$ |. o+ P/ n6 ~7 ?6 S2 i( h
int open(const char *device_name, int flags);
5 v7 V/ T+ U. f7 C7 g
2 r5 P' E; Z3 a1 V6 ?' L#include <unistd.h>
1 S; d9 k: v* }* y% Q
9 k- h0 {9 T9 O2 \& h5 |int clo se(int fd);
; j' j& u5 j9 |9 J$ z例:
. m6 o; g5 _! x
3 S; x! e0 u: D: W+ x) aint fd=open(“/dev/video0”,O_RDWR); // 打开设备5 F. g, Q. t$ B$ q
: C( o4 H% B) ^( h" y" S
close(fd); // 关闭设备* T3 ^$ n. V+ f% m8 ^ Z# j
, T& }5 J7 {& z, x
注意:V4L2 的相关定义包含在头文件<linux/videodev2.h> 中.3 z, [: m! i- Z% w' C X) T: W
3 b3 N3 q0 F: p S/ y7 U5 [, d4. 查询设备属性: VIDIOC_QUERYCAP
# G3 e+ S ]! a1 u3 U4 I0 W& m4 r; V
相关函数:; [. X# g3 y/ J& z% @9 ]
; d/ |8 `) c' o g# T) q! N
int ioctl(int fd, int request, struct v4l2_capability *argp);& P9 M g: ]2 K" w) k" ~
$ w4 i' I. @& d5 Z+ v
相关结构体:
8 k, u8 B; ~7 x+ @' h7 I& `/ {4 d& F+ x2 z. x
struct v4l2_capability
7 p8 U" R% L a1 ~; [$ X0 W# Y2 B. w
{* y- P$ g: G A& z
, \4 P+ y& l9 A6 @* u; m* ku8 driver[16]; // 驱动名字0 D$ I' g! Q% T4 }
) @) x0 N1 `1 h# c7 uu8 card[32]; // 设备名字! v M5 H; @* L$ \6 g0 m! n
8 F" Q/ W7 i( E$ C& f% u) d+ gu8 bus_info[32]; // 设备在系统中的位置( n8 x* n/ v% A8 z& B2 G+ s
/ ?! i% K- ~% V1 i9 ]u32 version; // 驱动版本号
+ \6 j7 h8 q& U4 V4 C1 R/ n5 T3 X
C n7 [6 l% L0 [- N9 E) \u32 capabilities; // 设备支持的操作
. [; y& C5 ]. A% e) @, X# @& r1 Z0 a4 d C8 U- u/ f& ^& z$ C1 j8 Q
u32 reserved[4]; // 保留字段. e+ A! N2 ~7 s& \, o1 \" ~# Q
! [* n: r' @9 P" F( ^5 {" z0 ?: P Y};
9 g+ R! J8 t# p& x3 \4 j# t$ q7 b- S5 U5 I, c% V3 T" H/ p
5 J: H2 i# Q1 ?4 I3 s, W5 V# M/ ?% a, Pcapabilities 常用值:( h5 D8 R1 o2 ?1 M8 D
/ k8 U, c; _& W5 Z
V4L2_CAP_VIDEO_CAPTURE // 是否支持图像获取
6 W" v7 ~2 h7 w" R8 L/ r" v
7 v7 R5 B* }* P' W6 P例:显示设备信息+ z6 o) V" n7 G+ ]* K3 [- T
% {/ b1 Z& n9 Fstruct v4l2_capability cap;
' ^* v1 C0 Y4 j4 V# J+ ^' o
0 k Q$ M: d( _. k) ]# c; K& Mioctl(fd,VIDIOC_QUERYCAP,&cap);
2 f' g0 W6 S" f8 j% z3 Z0 C, X4 \4 n7 Q
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);. @: x+ A) q+ @- X1 y7 N5 d
! m5 p. F! b) H. Q$ ~" ]5. 设置视频的制式和帧格式
. K9 Z3 A; {" {% {. q, K* M- x2 ? w& v. n% P
制式包括PAL,NTSC,帧的格式个包括宽度和高度等。
+ r4 T6 j r6 ?# U$ B
, j: ?! s9 u* o0 A相关函数:
7 Z& C: U/ m8 |& `4 ~ E# }* [
0 p8 Q( S+ t- c$ O, w, Y
* |( o- q$ U+ C& V! N1 s3 O/ W* T! o
. E; h! t- y; N7 \) f/ l9 L1 y
( W$ Y( e- k+ J6 k9 G
& l# ]) E' y: ~- p
6 v' c2 q) g- H! O# ^, Z! z* x
6 H; U6 L6 L. k) C9 t7 |7 R. L" t
: c* |- ~& c! a u! E; H
& Y) [, @: Q! g$ e |
|