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

Linux - 学习一下V4L2基础编程

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 13:50 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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