找回密码
 注册
关于网站域名变更的通知
查看: 433|回复: 2
打印 上一主题 下一主题

Linux - 学习一下V4L2基础编程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-10-9 11:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
1. 定义* l4 Q+ a5 a/ t  b

4 s; ?( t# }+ L$ P: EV4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。
3 i9 Z4 f4 ]& S
' Z& D( C8 V3 [$ k2. 工作流程:
+ P+ H* p  {; Q* X; Y  O
6 H" n4 ?6 b$ {& d打开设备-> 检查和设置设备属性-> 设置帧格式-> 设置一种输入输出方法(缓冲 区管理)-> 循环获取数据-> 关闭设备。
& s" T+ U( m  G0 ^# |& x* z, ~& a3 F2 T; F- }% ]
3. 设备的打开和关闭:
" J- G9 D3 L2 l
0 w7 q3 J. U' \& r& ?#include <fcntl.h>
$ W+ C4 x8 J3 @+ y- V( w) l! v7 y. d. V( `( P) Z2 H
int open(const char *device_name, int flags);
; q* ]- Q. `4 l2 E  j* r
: _3 l9 j4 o) `2 L#include <unistd.h>
6 M+ b% l6 M+ v" B( C6 _& W
( @4 I% W; @, w# n. o5 p1 nint clo se(int fd);
5 A3 m- S( \& y0 w' m
例:
8 K# ]% ~% v( }6 W  V' a& M7 _0 M" f9 M; V
int fd=open(“/dev/video0”,O_RDWR); // 打开设备/ V3 R. D! a4 c+ M0 Z

# l) B. f! ]! |' _; @close(fd); // 关闭设备
% e3 f& z7 o) G. h' m
) q- p7 R$ n, g5 g+ I
注意:V4L2 的相关定义包含在头文件<linux/videodev2.h> 中.# M4 ^) u9 A) B; S: y
2 h9 Z( s1 a" D) F" k
4. 查询设备属性: VIDIOC_QUERYCAP
8 Q4 t! _) o9 o; S3 e$ R

- j0 ^$ N, X7 l8 J' R/ b相关函数:+ w# t, z0 u, ^: z* ^- [
% a8 l* r, W8 i! D! z1 S0 c/ w
int ioctl(int fd, int request, struct v4l2_capability *argp);
: v. g6 u4 a. M* V4 p& h
* c# t  F. L+ S9 D5 l7 u/ w( C4 R
相关结构体:
5 ^1 s$ W8 _' n! }
3 s2 y/ T6 Y8 |; v( kstruct v4l2_capability
) x& ?8 s1 v) [% L
9 s. p2 G8 d* x5 m! R; X{  b* y: v. }0 {  P* j

8 d3 X5 V- t* L3 E; v1 uu8 driver[16]; // 驱动名字
4 w9 B# P, O/ X/ U
2 I# s4 p% y9 N$ I* ?% D# M3 pu8 card[32]; // 设备名字
: u& S8 `' ]$ f/ p# h$ B5 b& v/ S7 L3 C6 k- ]+ z: \% T- _( @& N: e, G
u8 bus_info[32]; // 设备在系统中的位置2 j/ _: ?8 z3 T: n+ W0 ~* s4 ~2 ]
3 D: V: m% h$ y: t3 @) O
u32 version; // 驱动版本号
/ t# [$ a0 X3 j& `) ]; v1 E7 W; Z
  h( n4 H8 I( m% `! iu32 capabilities; // 设备支持的操作
1 Z: O; B- R. ?$ E8 Y" F( @2 O) |
u32 reserved[4]; // 保留字段8 O: b, q1 T& ]

/ n, v% D( L* U; Z. Z: X3 Z, r};6 Q6 M& E1 E% Q( [" o+ L8 w7 t

: u1 o- F5 [1 Z; K4 b+ V) q2 G2 O4 W8 D: `5 g
capabilities 常用值:
$ X. `" m7 p0 J% d  h6 `
9 M2 M# F6 Y; y$ p) Q3 vV4L2_CAP_VIDEO_CAPTURE // 是否支持图像获取
# g# P- X+ g( f/ I
( g3 I2 l) c/ W5 v  Y3 M例:显示设备信息
% W* y, @3 h' x5 \0 Y: m+ I: a  ]4 b: Q2 h/ ^! {" B
struct v4l2_capability cap;$ D: u  t0 E+ x1 @6 l) f- Q

  g/ n2 V% ?$ b4 Q+ {0 ]$ Vioctl(fd,VIDIOC_QUERYCAP,&cap);# N3 Y! ?8 I$ H/ N/ o
! f* n/ E% X* K' X- _
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);
) v/ ?. t  m5 X/ n- G

" Q7 n6 t% m# _0 O5. 设置视频的制式和帧格式  m+ a7 w7 E0 [! R
7 x# L; @/ J; K/ ^
制式包括PAL,NTSC,帧的格式个包括宽度和高度等。' Z0 K1 p/ q# r$ D. n
) P$ ]! S# s! E, |& _3 v9 ]
相关函数:
( L( O' }1 Q9 E/ s
游客,如果您要查看本帖隐藏内容请回复
' C2 C) W8 `' K' j/ J" t) b& j

. _$ a0 f" ~( J' H0 ]# Q/ }* f8 B

) \7 a" v& X" x( N7 D( M
7 \/ y8 l# ?+ M  k, Z3 k& w8 G

3 d6 t5 z$ ?* J
+ J* z8 F8 }6 w: m& H. j* t' y

8 p  y; K% N: I% [/ u) x  @" u) G+ }8 _) L

! C; A7 e* ^' m! S

该用户从未签到

2#
发表于 2019-10-9 18:51 | 只看该作者
谢谢楼主分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 17:33 , Processed in 0.187500 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表