|
|
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 |
|