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

Linux - 学习一下V4L2基础编程

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 20:56 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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