转自:http://www.cnblogs.com/emouse/archive/2013/03/05/2944522.html

V4L2摸索了两天还是一头雾水,今天调试一个程序发现两个头文件:

#include "libv4l2.h"
#include "libv4lconvert.h"

没有找到,网上搜索了下,发现这是在一个库libv4l中集成的,这个库用于编写v4l2
camera应用程序,里面除有常用的v4l2 ioctl调用的封装API外,还有yuv到rgb转换、rgb到yuv转换和jpeg
decoder 等API,更多的信息也没有细致的去看。

下载地址:http://people.atrpms.net/~hdegoede/

这个目录下有很多个版本,目前最新版本为0.6.2 我下载了libv4l-0.6.1.tar.gz ,安装也很简单:

tar zxvf libv4l-0.6.1.tar.gz
make install PREFIX=/usr/local

下面是解压后的说明文档,有兴趣的可以看看他的用途,更多的用法后面用到的时候再琢磨着使用吧。


Introduction
------------

libv4l is a collection of libraries which adds a thin abstraction layer on

top of video4linux2 devices. The purpose of this (thin) layer is to make it

easy for application writers to support a wide variety of devices without

having to write seperate code for different devices in the same class.

All libv4l components are licensed under the GNU Lesser General Public

License version 2 or (at your option) any later version.

libv4l consists of 3 different libraries:

libv4lconvert

-------------

libv4lconvert started as a library to convert from any (known) pixelformat to

V4l2_PIX_FMT_BGR24, RGB24, YUV420 or YVU420.

The list of know source formats is large and continually growing, so instead

of keeping an (almost always outdated) list here in the README, I refer you

to the source, see the list of defines at the top of

libv4lconvert/libv4lconvert.c for the full list.

For more details on the v4lconvert_ functions see libv4lconvert.h.

Later on libv4lconvert was expanded to also be able to do various video

processing functions to improve webcam video quality on a software basis. So

the name no longer 100% covers the functionality. The video processing is

split in to 2 parts, libv4lconvert/control and libv4lconvert/processing.

The control part is used to offer video controls which can be used to control

the video processing functions made available by libv4lconvert/processing.

These controls are stored application wide (until reboot) by using a

persistent shared memory object.

libv4lconvert/processing offers the actual video processing functionality.

libv4l1

-------

This offers functions like v4l1_open, v4l1_ioctl, etc. which can by used to

quickly make v4l1 applications work with v4l2 devices. These functions work

exactly like the normal open/close/etc, except that libv4l1 does full emulation

of the v4l1 api on top of v4l2 drivers, in case of v4l1 drivers it will just

pass calls through. For more details on the v4l1_ functions see libv4l1.h .

libv4l2

-------

This offers functions like v4l2_open, v4l2_ioctl, etc. which can by used to

quickly make v4l2 applications work with v4l2 devices with weird formats.

libv4l2 mostly passes calls directly through to the v4l2 driver. When the

app does a TRY_FMT / S_FMT with a not supported format libv4l2 will get in

the middle and emulate the format (if an app wants to know which formats the

hardware can _really_ do it should use ENUM_FMT, not randomly try a bunch of

S_FMT's). For more details on the v4l2_ functions see libv4l2.h .

wrappers

--------

The functionality provided by libv4l1 for v4l1 apps and libv4l2 for v4l2 apps

can also be used by existing apps without modifying them. For this purpose

2 wrapper libraries are provided which can be preloaded before starting the

application using the LD_PRELOAD environment variable. These wrappers will

then intercept calls to open/close/ioctl/etc. and if these calls directed

towards a video device the wrapper will redirect the call to the libv4lX

counterparts.

The preloadable libv4l1 wrapper which adds v4l2 device compatibility to v4l1

applications is called v4l1compat.so. The preloadable libv4l2 wrapper which

adds support for various pixelformats to v4l2 applications is called

v4l2convert.so.

Example usage (after install in default location):

$ export LD_PRELOAD=/usr/local/lib/libv4l/v4l1compat.so

$ camorama

Prerequisites

-------------

libv4l requires shmem file system support in the kernel (CONFIG_SHMEM).

Installation Instructions

-------------------------

Simple type the following commands from the libv4l-x.y.z directory

(adjusting PREFIX as desired):

make

make install PREFIX=/usr/local

Note: make install also supports the DESTDIR=... parameter for installation

into chroots.

If you require static libraries to also be built, these can be compiled

along with the dynamic equivalents by defining LINKTYPE to 'static', e.g.:

make LINKTYPE=static

make install LINKTYPE=static

FAQ

---

Q: Why libv4l, whats wrong with directly accessing v4l2 devices ?

Q: Do we really need yet another library ?

A: Current webcam using applications like ekiga contain code to handle many

different specific pixelformats webcam's use, but that code only supports a

small subset of all native webcam (compressed) pixelformats. Other current

v4l2 applications do not support anything but rgb pixelformats (xawtv for

example) and this will not work with most webcams at all.

With gspca being ported to v4l2 and thus decoding to normal formats being

removed from the device driver as this really belongs in userspace, ekiga

would need to be extended with many more often chip dependent formats, like

the bayer compression used by the spca561 and the (different) compression used

by the pac207 and the (again different) compression used by the sn9c102. Adding

support for all these formats should not be done at the application level, as

then it needs to be written for each application seperately. Licensing issues

with the decompressors will then also become a problem as just cut and pasting

from one application to another is bound to hit license incompatibilities.

So clearly this belongs in a library, and in a library with a license which

allows this code to be used from as many different applications as possible.

Hence libv4l was born.

Q: Under which license may I use and distribute libv4l?

A: The libv4l libraries are licensed under the GNU Library General Publishing

License version 2 or (at your option) any later version. See the included

COPYING.LIB file. The decompression helpers are licensed under the GNU

Library Publishing License version 2 (as they are derived from kernel code)

Q: Okay so I get the use of having a libv4lconvert, but why libv4l1 ?

A: Many v4l2 drivers do not offer full v4l1 compatibility. They often do not

implemented the CGMBUF ioctl and v4l1 style mmap call. Adding support to all

these drivers for this is a lot of work and more importantly unnecessary

adds code to kernel space.

Also even if the CGMBUF ioctl and v4l1 style mmap are supported, then most

cams still deliver pixelformats which v4l1 applications do not understand.

This libv4l1 was born as an easy way to get v4l1 applications to work with

v4l2 devices without requiring full v4l1 emulation (including format

conversion) in the kernel, and without requiring major changes to the

applications.

Q: Why should I use libv4l2 in my app instead of direct device access

combined with libv4lconvert?

A: libv4l2 is mainly meant for quickly and easily adding support for more

pixelformats to existing v4l2 applications. So if you feel better directly

accessing the device in combination with libv4lconvert thats fine too.

Notice that libv4l2 also does emulation of the read() call on devices which

do not support it in the driver. In the background this uses mmap buffers

(even on devices which do support the read call). This mmap gives libv4lconvert

zero-copy access to the captured frame, and then it can write the converted

data directly to the buffer the application provided to v4l2_read(). Thus

another reason to use liv4l2 is to get the no memcpy advantage of the mmap

capture method combined with the simplicity of making a simple read() call.

Q: Where to send bugreports / questions?

A: Please send libv4l questions / bugreports to the:

Linux Media Mailing List <linux-media@vger.kernel.org>

Subscription is not necessary to send mail to this list. If you're not

subscribed please put yourself in the CC of your original mail so you

will receive replies.

★emouse 思·睿博客文章★
原创文章转载请注明:http://emouse.cnblogs.com

libv4l 库【转】的更多相关文章

  1. 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题4---共享库中嵌套库带路径【已解决】

    [Linux开发]OpenCV在ARM-linux上的移植过程遇到的问题4-共享库中嵌套库带路径[已解决] 标签:[Linux开发] 紧接着上一篇,我居然又尝试了一下编译opencv,主要是因为由于交 ...

  2. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  3. TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)

    使用方法很简单,很容易融入现有项目,使现有项目拥有Web网站功能和WebSocket,以及Socket直连! 并且包含了一个跨平台(windows/linux)工具集合; 嗯,也挺棒的^,^ 在项目中 ...

  4. 在 Laravel 中使用图片处理库 Integration/Image

    系统需求 PHP >= 5.3 Fileinfo Extension GD Library (>=2.0) … or … Imagick PHP extension (>=6.5.7 ...

  5. [APUE]标准IO库(下)

    一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...

  6. [APUE]标准IO库(上)

    一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...

  7. Python标准库--typing

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...

  8. Windows 常用运行库下载 (DirectX、VC++、.Net Framework等)

    经常听到有朋友抱怨他的电脑运行软件或者游戏时提示缺少什么 d3dx9_xx.dll 或 msvcp71.dll.msvcr71.dll又或者是 .Net Framework 初始化之类的错误而无法正常 ...

  9. vs2010静态链接MFC库报链接错误

    由于需要将MFC程序在其它电脑上运行,所以需要将动态链接的MFC改成静态链接,本以为很简单,没想到链接的时候出现下面的链接错误: uafxcw.lib(afxmem.obj) : error LNK2 ...

随机推荐

  1. 7-1 寻找大富翁 PTA 堆排序

    7-1 寻找大富翁 (25 分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首 ...

  2. 3,Flask 中的模板语言 Jinja2 及 render_template 的深度用法

    Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符串,用于传递到前端 S ...

  3. 9,Flask 中的蓝图(BluePrint)

    蓝图,听起来就是一个很宏伟的东西,在Flask中的蓝图 blueprint 也是非常宏伟的,它的作用就是将 功能 与 主服务 分开. 比如说,你有一个客户管理系统,最开始的时候,只有一个查看客户列表的 ...

  4. Dragger 2遇到的坑 Dragger2详解 Dragger2学习最好的资料

    我是曹新雨,我为自己代言.现在的菜鸟,3年以后我就是大神.为自己加油.微信:aycaoxinyu Dragger2是什么,我就不再说了.资料一堆,而且里面的注解什么意思,我推荐两篇文章,这两篇都是我精 ...

  5. laravel5.5artisan命令

    目录 1. 简介 2. 编写命令 2.1 构建自己的命令 2.2 闭包命令 3. 定义输入期望 4.I/O 命令 5. 注册命令 6. 调用命令 1. 简介 Artisan 是 Laravel 自带的 ...

  6. 云计算之路-阿里云上:OCS问题的进展以及11:30-11:50遇到的问题

    (上图是今天出问题期间Web服务器性能监控图,紫色表示的是Request Execution Time) 昨天我们发布了一篇博客分享了我们这两天遇到的OCS(开放缓存服务)问题,详见云计算之路-阿里云 ...

  7. 三 APPIUM GUI讲解(Windows版)

    本文本转自:http://www.cnblogs.com/sundalian/p/5629386.html APPIUM GUI讲解(Windows版)   Windows版本的APPIUM GUI有 ...

  8. NOIP2018 集训(三)

    A题 Tree 问题描述 给定一颗 \(n\) 个点的树,树边带权,试求一个排列 \(P\) ,使下式的值最大 \[\sum_{i=1}^{n-1} maxflow(P_i, P_{i+1}) \] ...

  9. python命名空间、作用域、闭包与传值传引用

    (以下内容,均基于python3) 最近在看python函数部分,讲到了python的作用域问题,然后又讲了Python的闭包问题. 在做作业的时候,我遇到了几个问题,下面先来看作业. 一. 作业1: ...

  10. React01补充

    使用yarn安装脚手架 npm i -g yarn npm uninstall -g create-react-app yarn global add create-react-app create- ...