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

Linux - 学习一下V4L2基础编程

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
1. 定义8 i+ Y7 V$ \" C  M& c
: P6 I8 }6 J' ^( N. x
V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。4 G- U7 w3 D3 g2 x0 L) L1 F! K( E

. U) U& P4 L  T, Q" r5 _2. 工作流程:+ m" J# |6 v2 M  p$ _

. z# v3 p, u. V3 O; R9 e打开设备-> 检查和设置设备属性-> 设置帧格式-> 设置一种输入输出方法(缓冲 区管理)-> 循环获取数据-> 关闭设备。
, o; n1 X; p4 A) Y/ Z4 X) `+ N  S, [
3. 设备的打开和关闭:& B# G$ M( u* P1 y
+ V/ ~- e: m; [7 G( G8 |
#include <fcntl.h>
: v, R5 k4 ~3 M5 q4 h  f3 X5 r/ ~  L
int open(const char *device_name, int flags);6 J# c8 I( t- H, d, Q% D# `& g! Q

% \, i" Z( B  @' [/ A; K- y% c#include <unistd.h>6 S! m  Z2 }6 h  H3 y: O
: ^9 V( E1 v7 G" _2 K$ f$ Q
int clo se(int fd);
" d( x9 r/ \2 _/ g( y  u( D
例:4 T! p- w2 v5 u* f0 x
$ T$ O; n& d# S, m
int fd=open(“/dev/video0”,O_RDWR); // 打开设备
" N" B4 w- }. j4 T) |7 l: A. a  X) O" `) m7 n. m3 S+ u  [) W
close(fd); // 关闭设备
9 [) @2 K2 ^4 m2 I- i: |: d

& F+ t5 x, b1 ^# t注意:V4L2 的相关定义包含在头文件<linux/videodev2.h> 中.
/ y# [; X$ u" q- k4 O% \9 E& u& ]7 }( u6 j( q" U; Q5 Z% y! J& z
4. 查询设备属性: VIDIOC_QUERYCAP. b' f- Y2 q$ V% l: `( G8 o5 g: j5 ]

: k+ B2 Q" D" J! |; W# s* p3 ^. L相关函数:
4 B5 w+ _3 H9 \4 b
3 e1 k1 S/ F( _int ioctl(int fd, int request, struct v4l2_capability *argp);
. Z: r% Q# a: V* m5 T+ [# u+ v

7 {* V" o" |5 w' @相关结构体:. m2 Z# G" v& g. a( `

! P5 y/ n1 P5 x( L# Ystruct v4l2_capability  {( [7 y8 s8 B$ |
7 y7 @: O2 c7 C; y: A4 v
{
8 h+ `5 a, f9 `: C' \, D3 k) z3 o9 ^$ R( c! C7 B2 S3 ?0 a
u8 driver[16]; // 驱动名字5 m5 ]; C# ?# R+ p, q& O
1 d6 z" K9 Y; ]9 J
u8 card[32]; // 设备名字5 w% @, M" L/ i: R* y2 ~
( S7 ~, q0 \# C* \
u8 bus_info[32]; // 设备在系统中的位置
& {* @2 c9 c1 |5 S1 k
+ m# k$ I+ W; \7 D6 q. \u32 version; // 驱动版本号
! U/ u- G3 x/ _) m
' ^, p/ N+ b/ e, `, pu32 capabilities; // 设备支持的操作
: n2 J  f1 o% h* \+ [# B& u$ d, g/ Y4 K* v5 q5 C
u32 reserved[4]; // 保留字段4 r. C- d2 e) {* f6 y% {; z/ T

( h, m* B* K: `* E+ ^( t5 K};
( \( |) K1 [$ N$ [" K! z
& w5 A% P# H' ], W, {. K, ]) R  J/ R* l% F( E5 x
capabilities 常用值:3 u% i7 @2 p1 V6 b

2 e& z0 C  H# G, \V4L2_CAP_VIDEO_CAPTURE // 是否支持图像获取
+ Z, `1 L$ Z2 k( F: r" p' E
' q2 Y, E9 K: X5 N例:显示设备信息$ v1 R5 M% y# e) ]: d; N

5 j- E. T5 a$ B2 H7 P$ Ostruct v4l2_capability cap;* ^5 {. S/ A- o; Q3 R
6 S' I, A7 y8 a3 W: K, z% ]
ioctl(fd,VIDIOC_QUERYCAP,&cap);
$ {9 l; q9 [2 y; j3 x4 P7 a& E
% c% {% z0 d2 Hprintf(“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);

3 a. I7 o: E. K9 ^1 \; `- b5 `8 i6 h( m: n5 E: ^3 p6 }  E
5. 设置视频的制式和帧格式) E' Y8 z+ h  L+ y6 q

. G/ A* {% @. ~* K& o% M5 F2 g制式包括PAL,NTSC,帧的格式个包括宽度和高度等。3 x- P  W0 z; {$ d  m6 }8 s

9 Q; b. P7 K& s相关函数:7 `! W9 K& L6 W& h, U
游客,如果您要查看本帖隐藏内容请回复

9 Q1 [8 d2 e, h& j" \3 X2 V8 Y6 R& |& I6 p9 e
! D) R; `; }5 J) A  x. c

9 {/ E% U2 y: \4 S
8 T2 P& ]6 X3 Y. t5 B
( V2 m! ~/ ^% a6 x" o" a! [
8 `* m7 o3 x; E+ L6 t

% c$ `0 x$ d& Y7 [! Z0 ]* v5 v: l7 v/ m; @/ x

" Z+ n0 I0 P* H2 S2 k

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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