v4l2 spec 中文 Ch02
Chapter 2. 图像格式(Image Formats)
v4l2 全五章下载:
v4l2中文手册 ch02
V4L2 API主要是设计用于设备和应用程序进行图片数据交换的。结构v4l2_pix_format定义了一张图片在内存中的格式和布局。格式是通过VIDIOC_S_FMT协商得到的。(这里涉及的重点是关乎视频采集和输出,对于overlay帧缓冲格式,您还是看看VIDIOC_G_FBUF)。
Table 2-1. structv4l2_pix_format
__u32 width Image width in pixels.
__u32 height Image height inpixels.
应用程序设置这些域是用来请求图片尺寸,驱动会返回最接近的合适值。在平面格式情形中…(不知是不是我下规范不好怎么地,在这种列表式中总会有些地方不完整,当然我看过了,这不太影响我们的工作)
Applicationsset these fields to request an image size, drivers return the closest possiblevalues. In case of planar formats
__u32 pixelformat The pixel format or type of compression, set by
theapplication. This is a little endian four
charactercode. V4L2 defines standard RGB
formatsin Table 2-1, YUV formats in Section 2.5,
andreserved codes in Table 2-8
enum v4l2_field field Video images are typically interlaced.
Applicationscan request to capture or output only
thetop or bottom field, or both fields interlaced or
sequentiallystored in one buffer or alternating in
separatebuffers. Drivers return the actual field
orderselected. For details see Section 3.6.
__u32 bytesperline Distance in bytes between theleftmost pixels in
twoadjacent lines.
应用程序和驱动都可以设置这些域以请求在每行的末尾的填补位。然而驱动却可能予以忽略…
Both applications and drivers can set this field torequest padding bytes at the end of each line. Drivers however may ignore
__u32 sizeimage Size in bytes of the buffer to hold a complete
image,set by the driver. Usually this is
bytesperlinetimes height. When the image
consistsof variable length compressed data this is
themaximum number of bytes required to hold an
image.
enum v4l2_colorspace colorspace Thisinformation supplements the pixelformat
andmust be set by the driver,see Section2.2.
__u32 priv Reserved for custom (driver defined)additional
informationabout formats. When not used drivers
andapplications must set this field to zero.
2.1. 标准图形格式(Standard Image Formats)
为了在驱动和应用程序间进行图片交换,就必须有一个双方都能辨析(统一的)的图片数据格式。V4L2包含了诸多格式,而本节就来谈谈V4L2规范中的标准图形格式。
当然,V4L2驱动并不局限于这些个格式。相反,可以有定制的格式。在这种情况下,当需要时应用程序就可能依赖解码器来将这种格式转换成标准类型的。但是数据依然可以以专有(定制的)格式来进行数据的存储和重新获取。例子说,假设一个设备支持专有的压缩格式,那么,应用程序仍然可以以这种格式进行采集和保存数据,已达到节省空间的目的。而当要在X Windows端显示时,就可以用解码器进行解码并显示。
最后尽管如此,我们还是需要一些个标准格式的。只有定义了明确的标准格式,才可以保证V4L2规范的完整性嘛。
(接下来的这一段主要说标准格式,是未压缩的,其在内存的布局是怎么样的,就不译了)
在V4L2中,每种格式都个标识符形如PIX_FMT_XXX,定义在videodev.h头文件中。这些标识符代表了在下面列出的4字节代码,当然了他们和Windows(相对的是Linux或者Unix)世界里的用法是不一样的。
2.2. 色彩空间(Colorspaces)
GammaCorrection
[to do]
E’R = f(R)
E’G =f(G)
E’B =f(B)
Constructionof luminance and color-difference signals
[to do]
E’Y = CoeffR E’R+ CoeffG E’G + CoeffB E’B
(E’R - E’Y) =E’R - CoeffR E’R - CoeffG E’G- CoeffB E’B
(E’B - E’Y) =E’B - CoeffR E’R - CoeffG E’G- CoeffB E’B
Re-normalizedcolor-difference signals
The color-difference signals arescaled back to unity range [-0.5;+0.5]:
KB = 0.5 / (1 - CoeffB)
KR = 0.5 / (1 - CoeffR)
PB = KB (E’B- E’Y) = 0.5 (CoeffR / CoeffB) E’R+ 0.5 (CoeffG / CoeffB) E’G + 0.5 E’B
PR = KR (E’R- E’Y) = 0.5 E’R + 0.5 (CoeffG / CoeffR)E’G + 0.5 (CoeffB/ CoeffR) E’B
Quantization
[to do]
Y’ = (Lum. Levels - 1) · E’Y+ Lum. Offset
CB = (Chrom. Levels - 1) ·PB + Chrom. Offset
CR =(Chrom. Levels - 1) · PR + Chrom. Offset
给大伙提供个介绍RGB和YUV关系的文档(网上找的,在此感谢原作者!)
JPEG 简易文档 V1.0 - GameRes.com.htm(如果打不开直接去搜一下吧)
Example 2-1. ITU-R Rec.BT.601 color conversion
ForwardTransformation
intER, EG, EB; /* gamma correctedRGB input [0;255] */
intY1, Cb, Cr; /* output [0;255]*/
doubler, g, b; /* temporaries */
doubley1, pb, pr;
int
clamp (double x)
{
int r = x; /* round to nearest */
if (r < 0) return 0;
else if (r > 255) return 255;
else return r;
}
r= ER / 255.0;
g= EG / 255.0;
b= EB / 255.0;
y1= 0.299 * r + 0.587 * g + 0.114 * b;
pb= -0.169 * r - 0.331 * g + 0.5 * b;
pr= 0.5 * r - 0.419 * g - 0.081 * b;
Y1= clamp (219 * y1 + 16);
Cb= clamp (224 * pb + 128);
Cr= clamp (224 * pr + 128);
/*or shorter */
y1= 0.299 * ER + 0.587 * EG + 0.114 * EB;
Y1= clamp ( (219 / 255.0) * y1 + 16);
Cb= clamp (((224 / 255.0) / (2 - 2 * 0.114)) * (EB - y1) + 128);
Cr= clamp (((224 / 255.0) / (2 - 2 * 0.299)) * (ER - y1) + 128);
Inverse Transformation
int Y1, Cb, Cr; /* gamma pre-correctedinput [0;255] */
int ER, EG, EB; /* output [0;255] */
double r, g, b; /* temporaries */
doubley1, pb, pr;
int
clamp(double x)
{
int r = x; /* round to nearest */
if (r < 0) return 0;
else if (r > 255) return 255;
else return r;
}
y1= (255 / 219.0) * (Y1 - 16);
pb= (255 / 224.0) * (Cb - 128);
pr= (255 / 224.0) * (Cr - 128);
r= 1.0 * y1 + 0 * pb + 1.402 * pr;
g= 1.0 * y1 - 0.344 * pb - 0.714 * pr;
b= 1.0 * y1 + 1.772 * pb + 0 * pr;
ER= clamp (r * 255); /* [ok? one should prob. limit y1,pb,pr] */
EG= clamp (g * 255);
EB= clamp (b * 255);
Table 2-2. enum v4l2_colorspace
(详见P42)
2.3. 索引格式(Indexed Format)
在这种格式中,每个像素点都用一个8bit来表示,用来索引256色的调色板。这是特地为视频输出overlay准备的。没有用来访问该调色板的ioctl方法,但可以且仅可以通过Linux的帧缓冲API(头一回接触)来进行访问。
Table2-3. Indexed Image Format(P42-P43)
2.4. RGB格式(RGB Formats)
Packed RGB Formats
Name
Packed RGB formats – Packed RGB formats
Description
这些格式定义用来匹配传统PC的图形帧缓冲的像素格式的。每像素占据8,16,24或者32个bit。这就是填充像素(packed-pixel)格式,意味着每个像素点在内存中是一个挨着一个的。
当使用这些格式中的某一个时,驱动应该报告给色彩空间:V4L2_COLORSPACE_SRGB。
Table2-1. Packed RGB Image Formats
Identifier Code |
Byte 0 7654/3210 |
Byte 1 |
Byte 2 |
Byte 3 |
V4L2_PIX_FMT_RGB332 ‘RGB1’ |
b1 b0 g2 g1 g0 r2 r1 r0 |
|
||
V4L2_PIX_FMT_RGB444 ‘R444’ |
g3 g2 g1 g0 b3 b2 b1 b0 |
a3 a2 a1 a0 r3 r2 r1 r0 |
|
|
V4L2_PIX_FMT_RGB555 ‘RGBO’ |
g2 g1 g0 r4 r3 r2 r1 r0 |
a b4 b3 b2 b1 b0 g4 g3 |
||
V4L2_PIX_FMT_RGB555X ‘RGBQ’ |
a b4 b3 b2 b1 b0 g4 g3 |
g2 g1 g0 r4 r3 r2 r1 r0 |
|
|
V4L2_PIX_FMT_RGB565 ‘RGBP’ |
g2 g1 g0 r4 r3 r2 r1 r0 |
b4 b3 b2 b1 b0 g5 g4 g3 |
|
|
V4L2_PIX_FMT_RGB565X ‘RGBR’ |
b4 b3 b2 b1 b0 g5 g4 g3 |
g2 g1 g0 r4 r3 r2 r1 r0 |
|
|
V4L2_PIX_FMT_BGR24 ‘BGR3’ |
b7 b6 b5 b4 b3 b2 b1 b0 |
g7 g6 g5 g4 g3 g2 g1 g0 |
r7 r6 r5 r4 r3 r2 r1 r0 |
|
V4L2_PIX_FMT_RGB24 ‘RGB3’ |
r7 r6 r5 r4 r3 r2 r1 r0 |
g7 g6 g5 g4 g3 g2 g1 g0 |
b7 b6 b5 b4 b3 b2 b1 b0 |
|
V4L2_PIX_FMT_BGR32 ‘BGR4’ |
b7 b6 b5 b4 b3 b2 b1 b0 |
g7 g6 g5 g4 g3 g2 g1 g0 |
r7 r6 r5 r4 r3 r2 r1 r0 |
a7 a6 a5 a4 a3 a2 a1 a0 |
V4L2_PIX_FMT_RGB32 ‘RGB4’ |
r7 r6 r5 r4 r3 r2 r1 r0 |
g7 g6 g5 g4 g3 g2 g1 g0 |
b7 b6 b5 b4 b3 b2 b1 b0 |
a7 a6 a5 a4 a3 a2 a1 a0 |
一个驱动到底支持哪种RGB格式,你可以去LinuxTV v4l-dvb代码库下个工具测试下。可以访问http://linuxtv.org/repo/ 来获得更多信息。
V4L2_PIX_FMT_SBGGR8 (’BA81’)
Name
V4L2_PIX_FMT_SBGG8 --- Bayer RGB format
Description
这通常是数字摄像机的本征(native)格式,用来表明CCD设备上传感器的布局的。每个像素点就一个红色或者绿色或者蓝色。缺失部分必须用邻近像素来内插补充。从左到右,第一行包含一个blue和green,第二行是一个green和red。这种组合会向右向下每隔一行一列进行排布。
Example 2-1. V4L2_PIX_FMT_SBGGR8 4 × 4 pixel image
Byte Order. Each cell is one bytew.
start + 0: B00 G01 B02 G03
start + 4: G10 R11 G12 R13
start + 8: B20 G21 B22 G23
start + 12: G30 R31 G32 R33
V4L2_PIX_FMT_SBGGR16 (’BA82’)
Name
V4L2_PIX_FMT_SBGGR16— Bayer RGB format
Description
Tobe continued…
v4l2 spec 中文 Ch02相关推荐
- v4l2 spec 中文 Ch01
Video for Linux Two API Specification Revision 0.24 Michael H Schimek mschimek@gmx.a ...
- VVC spec中文翻译
本文仅为作者阅读VVC spec的翻译笔记,若理解有误,欢迎留言. 参考文章:VVC spec / H266 spec 目录 第3章.定义 第4章.缩写 第7章.语法 和 语义 7.4.4.Profi ...
- v4l2驱动编写篇【转】
转自:http://blog.csdn.net/michaelcao1980/article/details/53008418 大部分所需的信息都在这里.作为一个驱动作者,当挖掘头文件的时候,你可能也 ...
- V4L2获取usb视频流测试代码
Video4Linux2(Video for Linux Two, 简称V4L2)是Linux中关于视频设备的驱动框架,为上层访问底层的视频设备提供统一接口.V4L2主要支持三类设备:视频输入输出设备 ...
- rpm命令选项中文说明
rpm命令选项中文说明. 一.大纲 查询与校验包: 引用 rpm {-q|--query} [select-options] [query-options] rpm {-V|--verify} ...
- python2.x和python3.x-matplotlib中文显示为方块-中文不显示-故障原理研究与解决
matplot的字体问题,有以下3种方式 一种是从pylab中进行全局管理,可以管理任意实验相关的字体,可以是和matplot无关的实验的字体问题的管理 一种是matplot的配置文件,进行全局管理 ...
- java html api 百度云,Javase-6.0_中文API_HTML(最新更新)
javase 中文API 最新版 ******************************* JavaTM 2 Platform Standard Ed. 6 所有类软件包 java.applet ...
- opensll、libcurl库安装的使用,树莓派CSI摄像头的配置,树莓派调用智能API平台实现人脸识别、树莓派配置中文环境
接着上一节人工智能翔云平台介绍: 人工智能OCR识别: OCR 是英文Optical Character Recognition的缩写,意思是光学字符识别,也可简单地称为文字识别,是文字自动输入的一种 ...
- 中文分词--词典分词--最长匹配
(个人学习笔记,慎重参考) 1 基本概念 中文分词 指的是将一段文本拆分为一系列单词的过程,这些单词顺序拼接后等于原文本. 作为中文信息处理的第一站,是后续nlp任务的基础,中文分词算法大致可分为词典 ...
最新文章
- 手动将web项目的class文件打成jar包,手动打jar包,java -cvf,IDE打包底层指令
- 这次我让你彻底弄懂 RESTful
- wxWidgets与其他工具库的比较(下)
- leetcode算法题--用两个栈实现队列
- android实现过程,Android:一个完整app开发流程
- 如何在picture上显示透明Label
- DataForm 中通过外面的按钮进行提交时,出错
- 如何修改Oracle并发连接数的设置
- 要来了!国内安卓统一推送标准将于3月开启测试
- qt种qdebug字符串_qDebug用法及中文乱码解决
- bat批处理更改文件后缀/挑出两个文件夹下不同名的文件
- 教你如何判断水泥的质量好坏?
- Golang错误和异常处理的正确姿势
- 【线段树】Interval GCD【线段树维护gcd】
- 基于物理的渲染:从理论到实现 PBRT 中文整合翻译计划
- bam文件读取_sam和bam文件处理
- html制作排班表模板,你会制作排班表吗?手把手教你用Word制作!分分钟搞定!...
- Visual Studio 番茄助手 安装问题
- 什么是服务器安全性?
- java井字游戏_java井字棋源代码(双人对战版)
热门文章
- c语言用蒙特卡洛算法求定积分,C++计算定积分、不定积分、蒙特卡洛积分法
- WebGL 理论基础 - 二维矩阵
- 基于STL实现自动贪心寻路算法的贪吃蛇小游戏
- OpenXDS存储相关(SQL)
- np.mat()函数与np.array()函数的辨析
- 道德哲学中的电车问题
- vb 获取计算机序列号,VB.net获取CPU与硬盘物理序列号与容量的实例
- 气象Matpy库的学习
- 台式计算机的配置清单表格,台式电脑配置清单60种.doc
- 计算机系统理论知识试卷及答案,计算机理论基础试题及答案