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相关推荐

  1. v4l2 spec 中文 Ch01

      Video for Linux Two API Specification Revision 0.24               Michael H Schimek mschimek@gmx.a ...

  2. VVC spec中文翻译

    本文仅为作者阅读VVC spec的翻译笔记,若理解有误,欢迎留言. 参考文章:VVC spec / H266 spec 目录 第3章.定义 第4章.缩写 第7章.语法 和 语义 7.4.4.Profi ...

  3. v4l2驱动编写篇【转】

    转自:http://blog.csdn.net/michaelcao1980/article/details/53008418 大部分所需的信息都在这里.作为一个驱动作者,当挖掘头文件的时候,你可能也 ...

  4. V4L2获取usb视频流测试代码

    Video4Linux2(Video for Linux Two, 简称V4L2)是Linux中关于视频设备的驱动框架,为上层访问底层的视频设备提供统一接口.V4L2主要支持三类设备:视频输入输出设备 ...

  5. rpm命令选项中文说明

    rpm命令选项中文说明. 一.大纲 查询与校验包: 引用 rpm {-q|--query} [select-options] [query-options]     rpm {-V|--verify} ...

  6. python2.x和python3.x-matplotlib中文显示为方块-中文不显示-故障原理研究与解决

    matplot的字体问题,有以下3种方式 一种是从pylab中进行全局管理,可以管理任意实验相关的字体,可以是和matplot无关的实验的字体问题的管理 一种是matplot的配置文件,进行全局管理 ...

  7. java html api 百度云,Javase-6.0_中文API_HTML(最新更新)

    javase 中文API 最新版 ******************************* JavaTM 2 Platform Standard Ed. 6 所有类软件包 java.applet ...

  8. opensll、libcurl库安装的使用,树莓派CSI摄像头的配置,树莓派调用智能API平台实现人脸识别、树莓派配置中文环境

    接着上一节人工智能翔云平台介绍: 人工智能OCR识别: OCR 是英文Optical Character Recognition的缩写,意思是光学字符识别,也可简单地称为文字识别,是文字自动输入的一种 ...

  9. 中文分词--词典分词--最长匹配

    (个人学习笔记,慎重参考) 1 基本概念 中文分词 指的是将一段文本拆分为一系列单词的过程,这些单词顺序拼接后等于原文本. 作为中文信息处理的第一站,是后续nlp任务的基础,中文分词算法大致可分为词典 ...

最新文章

  1. 手动将web项目的class文件打成jar包,手动打jar包,java -cvf,IDE打包底层指令
  2. 这次我让你彻底弄懂 RESTful
  3. wxWidgets与其他工具库的比较(下)
  4. leetcode算法题--用两个栈实现队列
  5. android实现过程,Android:一个完整app开发流程
  6. 如何在picture上显示透明Label
  7. DataForm 中通过外面的按钮进行提交时,出错
  8. 如何修改Oracle并发连接数的设置
  9. 要来了!国内安卓统一推送标准将于3月开启测试
  10. qt种qdebug字符串_qDebug用法及中文乱码解决
  11. bat批处理更改文件后缀/挑出两个文件夹下不同名的文件
  12. 教你如何判断水泥的质量好坏?
  13. Golang错误和异常处理的正确姿势
  14. 【线段树】Interval GCD【线段树维护gcd】
  15. 基于物理的渲染:从理论到实现 PBRT 中文整合翻译计划
  16. bam文件读取_sam和bam文件处理
  17. html制作排班表模板,你会制作排班表吗?手把手教你用Word制作!分分钟搞定!...
  18. Visual Studio 番茄助手 安装问题
  19. 什么是服务器安全性?
  20. java井字游戏_java井字棋源代码(双人对战版)

热门文章

  1. c语言用蒙特卡洛算法求定积分,C++计算定积分、不定积分、蒙特卡洛积分法
  2. WebGL 理论基础 - 二维矩阵
  3. 基于STL实现自动贪心寻路算法的贪吃蛇小游戏
  4. OpenXDS存储相关(SQL)
  5. np.mat()函数与np.array()函数的辨析
  6. 道德哲学中的电车问题
  7. vb 获取计算机序列号,VB.net获取CPU与硬盘物理序列号与容量的实例
  8. 气象Matpy库的学习
  9. 台式计算机的配置清单表格,台式电脑配置清单60种.doc
  10. 计算机系统理论知识试卷及答案,计算机理论基础试题及答案