2.29. V4L2 JPEG 头部相关函数和数据结构¶
-
struct v4l2_jpeg_reference¶
对 JPEG 缓冲区的引用
定义:
struct v4l2_jpeg_reference {
u8 *start;
size_t length;
};
成员
start
指向被引用段或表的起始位置的指针
length
被引用段或表的大小
描述
当引用标记段时,start 指向标记代码之后的位置,length 是段参数的大小,不包括标记代码。
-
struct v4l2_jpeg_frame_component_spec¶
帧分量规范
定义:
struct v4l2_jpeg_frame_component_spec {
u8 component_identifier;
u8 horizontal_sampling_factor;
u8 vertical_sampling_factor;
u8 quantization_table_selector;
};
成员
component_identifier
C[i]
horizontal_sampling_factor
H[i]
vertical_sampling_factor
V[i]
quantization_table_selector
量化表目标选择器 Tq[i]
-
struct v4l2_jpeg_frame_header¶
JPEG 帧头
定义:
struct v4l2_jpeg_frame_header {
u16 height;
u16 width;
u8 precision;
u8 num_components;
struct v4l2_jpeg_frame_component_spec component[V4L2_JPEG_MAX_COMPONENTS];
enum v4l2_jpeg_chroma_subsampling subsampling;
};
成员
height
Y
width
X
precision
P
num_components
Nf
component
分量规范,请参阅 v4l2_jpeg_frame_component_spec
subsampling
从分量规范解码的二次采样
-
struct v4l2_jpeg_scan_component_spec¶
扫描分量规范
定义:
struct v4l2_jpeg_scan_component_spec {
u8 component_selector;
u8 dc_entropy_coding_table_selector;
u8 ac_entropy_coding_table_selector;
};
成员
component_selector
Cs[j]
dc_entropy_coding_table_selector
Td[j]
ac_entropy_coding_table_selector
Ta[j]
-
struct v4l2_jpeg_scan_header¶
JPEG 扫描头
定义:
struct v4l2_jpeg_scan_header {
u8 num_components;
struct v4l2_jpeg_scan_component_spec component[V4L2_JPEG_MAX_COMPONENTS];
};
成员
num_components
Ns
component
分量规范,请参阅 v4l2_jpeg_scan_component_spec
-
enum v4l2_jpeg_app14_tf¶
APP14 转换标志。根据 Rec. ITU-T T.872 (06/2012) 6.5.3,APP14 段用于颜色编码,它包含一个转换标志,该标志的值可能为 0、1 和 2,解释如下
常量
V4L2_JPEG_APP14_TF_CMYK_RGB
对于使用四个分量编码的图像,为 CMYK;对于使用三个分量编码的图像,为 RGB
V4L2_JPEG_APP14_TF_YCBCR
使用 YCbCr 编码的三个分量图像
V4L2_JPEG_APP14_TF_YCCK
使用 YCCK 编码的四个分量图像
V4L2_JPEG_APP14_TF_UNKNOWN
表示 app14 不存在
-
struct v4l2_jpeg_header¶
已解析的 JPEG 头部
定义:
struct v4l2_jpeg_header {
struct v4l2_jpeg_reference sof;
struct v4l2_jpeg_reference sos;
unsigned int num_dht;
struct v4l2_jpeg_reference dht[V4L2_JPEG_MAX_TABLES];
unsigned int num_dqt;
struct v4l2_jpeg_reference dqt[V4L2_JPEG_MAX_TABLES];
struct v4l2_jpeg_frame_header frame;
struct v4l2_jpeg_scan_header *scan;
struct v4l2_jpeg_reference *quantization_tables;
struct v4l2_jpeg_reference *huffman_tables;
u16 restart_interval;
size_t ecs_offset;
enum v4l2_jpeg_app14_tf app14_tf;
};
成员
sof
指向帧头和大小的指针
sos
指向扫描头和大小的指针
num_dht
dht 中的条目数
dht
指向哈夫曼表和大小的指针
num_dqt
dqt 中的条目数
dqt
指向量化表和大小的指针
frame
已解析的帧头
scan
指向已解析扫描头的指针,可选
quantization_tables
对四个量化表的引用,可选
huffman_tables
按 DC0、DC1、AC0、AC1 顺序对四个哈夫曼表的引用,可选
restart_interval
每个重启间隔的 MCU 数量,Ri
ecs_offset
到熵编码段的缓冲字节偏移量
app14_tf
来自 app14 数据的转换标志
描述
当此结构传递给 v4l2_jpeg_parse_header 时,可选的 scan、quantization_tables 和 huffman_tables 指针必须初始化为 NULL 或指向有效的内存。
-
int v4l2_jpeg_parse_header(void *buf, size_t len, struct v4l2_jpeg_header *out)¶
定位标记段,并可选择解析头部
参数
void *buf
JPEG 缓冲区的地址,应以 SOI 标记开头
size_t len
JPEG 缓冲区的长度
struct v4l2_jpeg_header *out
返回标记段位置,并可选择返回已解析的头部
描述
out->scan_header 指针必须初始化为 NULL 或指向有效的 v4l2_jpeg_scan_header 结构。out->huffman_tables 和 out->quantization_tables 指针必须初始化为 NULL 或指向每个包含 4 个 v4l2_jpeg_reference 结构的有效数组。
如果解析失败,则返回 0 或负错误。
-
int v4l2_jpeg_parse_frame_header(void *buf, size_t len, struct v4l2_jpeg_frame_header *frame_header)¶
解析帧头
参数
void *buf
SOF0 标记之后帧头的地址
size_t len
帧头的长度
struct v4l2_jpeg_frame_header *frame_header
返回已解析的帧头
描述
如果解析失败,则返回 0 或负错误。
-
int v4l2_jpeg_parse_scan_header(void *buf, size_t len, struct v4l2_jpeg_scan_header *scan_header)¶
解析扫描头
参数
void *buf
扫描头地址,在 SOS 标记之后
size_t len
扫描头长度
struct v4l2_jpeg_scan_header *scan_header
返回解析后的扫描头
描述
如果解析失败,则返回 0 或负错误。
-
int v4l2_jpeg_parse_quantization_tables(void *buf, size_t len, u8 precision, struct v4l2_jpeg_reference *q_tables)¶
解析量化表段
参数
void *buf
量化表段的地址,在 DQT 标记之后
size_t len
量化表段的长度
u8 precision
每个分量的采样精度(P),以位为单位
struct v4l2_jpeg_reference *q_tables
返回缓冲区中四个可能量化表目标位置的引用
描述
如果解析失败,则返回 0 或负错误。
-
int v4l2_jpeg_parse_huffman_tables(void *buf, size_t len, struct v4l2_jpeg_reference *huffman_tables)¶
解析哈夫曼表段
参数
void *buf
哈夫曼表段的地址,在 DHT 标记之后
size_t len
哈夫曼表段的长度
struct v4l2_jpeg_reference *huffman_tables
返回缓冲区中四个可能哈夫曼表目标位置的引用,顺序为 DC0, DC1, AC0, AC1
描述
如果解析失败,则返回 0 或负错误。