JPEG 解码示例演示了 JPEG 解码以及 lib4L2 转换 API 的可选使用,以便在需要缓冲区格式转换时使用。
$ cd /usr/src/jetson_multimedia_api/samples/06_jpeg_decode $ make
$ ./jpeg_decode num_files <number of files to decode> \ <in-file1> <out-file1> ...<in-filen> <out-filen> [OPTIONS]
$ ./jpeg_decode num_files 1 ../../data/Picture/nvidia-logo.jpg ../../data/Picture/nvidia-logo.yuv
下图显示了数据流经示例的流程。
输出平面用于接收输入,捕获平面用于生成输出。当调用 decodeToFd 时,数据格式与 Tegra 硬件匹配,因此不需要格式转换。调用 decodeToBuffer 需要在硬件加速 JPEG 解码后将缓冲区转换为软件格式。JPEG 文件格式包含标准软件格式。
此示例使用以下主要结构和类
元素 | 描述 |
---|---|
NvVideoConverter | 包含用于视频格式转换的元素和函数。 |
NvJpegDecoder | 包含用于解码 JPEG 图像的元素和函数。 |
NvVideoConverter 包含所有视频转换相关的元素和函数。示例中使用的 NvVideoConverter 的主要成员包括
NvVideoConverter 成员 | 描述 |
---|---|
output_plane | V4l2 输出平面。 |
capture_plane | V4l2 捕获平面。 |
waitForIdle | 等待直到所有排队的输出平面缓冲区都被处理并从捕获平面出队。 |
setOutputPlaneFormat | 设置输出平面格式。 |
setCapturePlaneFormat | 设置捕获平面格式。 |
NvVideoConverter 元素 output_plane
和 capture_plane
属于 NvV4l2ElementPlane 类。NvV4l2ElementPlane 中示例使用的主要成员如下
元素 | 描述 |
---|---|
setupPlane | 设置 V4l2 元素的平面。 |
deinitPlane | 销毁 V4l2 元素的平面。 |
setStreamStatus | 启动/停止流。 |
setDQThreadCallback | 设置出队缓冲区线程的回调函数。 |
startDQThread | 启动出队缓冲区线程。 |
stopDQThread | 停止出队缓冲区线程。 |
qBuffer | 排队 V4l2 缓冲区。 |
dqBuffer | 出队 V4l2 缓冲区。 |
getNumBuffers | 获取 V4l2 缓冲区的数量。 |
getNumQueuedBuffers | 获取队列中 V4l2 缓冲区的数量。 |
getNthBuffer | 获取索引 N 处的 NvBuffer。 |
NvJpegDecoder 类包含所有用于 JPEG 图像解码的函数。使用的主要成员是
函数 | 描述 |
---|---|
decodeToFd | 解码到硬件缓冲区(在文件描述符处),数据可供其他组件使用。 |
decodeToBuffer | 解码到软件缓冲区。 |