Jetson Linux API 参考文档

32.7.4 版本
05_jpeg_encode (JPEG 编码)

概述

本示例演示了如何:

  • 使用 libv4l2 转换组件函数来分配缓冲区
  • 设置属性
  • 使用 JPEG 编码组件将 YUV 数据编码为文件。

本示例不需要摄像头。


构建和运行

前提条件

构建

  • 输入
     $ cd /usr/src/jetson_multimedia_api/samples/05_jpeg_encode
     $ make
    

运行

  • 输入
     $ ./jpeg_encode <in-file> <in-width> <in-height> <out-file> [OPTIONS]
    

示例

   $ ./jpeg_encode ../../data/Picture/nvidia-logo.yuv 1920 1080 test.jpg
注意
jpeg_encode 示例使用 YUV 文件。如果您还没有 YUV 文件,可以使用 jpeg_decode 示例生成一个。例如:
 $ cd /usr/src/jetson_multimedia_api/samples/06_jpeg_decode/
 $ ./jpeg_decode num_files 1 ../../data/Picture/nvidia-logo.jpg ../../data/Picture/nvidia-logo.yuv

流程

下图显示了数据流经本示例的流程。

更多细节

输出平面用于接收输入,捕获平面用于生成输出。进入 JPEG 编码器之前的 YUV 数据格式可以是块状、线性或倾斜线性。 这导致 2 种不同的编码过程:encodeFromFDencodeFromBufferencodeFromFD 允许 JPEG 编码硬件直接处理数据。 encodeFromBuffer 需要在写入 JPEG 文件之前进行额外的格式转换。


主要结构和类

struct context_t 全局结构管理应用程序中的所有资源。

NvVideoDecoder描述
NvVideoConverter包含关于视频格式转换的元素和函数。
NvJpegEncoder包含用于编码 JPEG 图像的元素和函数。

NvVideoConverter 包含所有视频转换相关的元素和函数。示例中使用的 NvVideoConverter 的主要成员包括:

NvVideoConverter 成员描述
output_plane V4l2 输出平面。
capture_plane V4l2 捕获平面。
waitForIdle 等待直到所有排队的输出平面缓冲区都被处理并从捕获平面出队。
setOutputPlaneFormat 设置输出平面格式。
setCapturePlaneFormat 设置捕获平面格式。

NvVideoConverter 元素 output_planecapture_plane 属于 NvV4l2ElementPlane 类。示例中使用的 NvV4l2ElementPlane 的主要成员如下:

元素描述
setupPlane 设置 V4l2 元素的平面。
deinitPlane 销毁 V4l2 元素的平面。
setStreamStatus 启动/停止流。
setDQThreadCallback 设置出队缓冲区线程的回调函数。
startDQThread 启动出队缓冲区线程。
stopDQThread 停止出队缓冲区线程。
qBuffer 将 V4l2 缓冲区入队。
dqBuffer 将 V4l2 缓冲区出队。
getNumBuffers 获取 V4l2 缓冲区的数量。
getNumQueuedBuffers 获取队列中 V4l2 缓冲区的数量。
getNthBuffer 获取索引为 N 的 NvBuffer

NvJpegEncoder 类包含所有用于 JPEG 编码的函数。使用的主要成员包括:

NvV4l2ElementPlane描述
encodeFromFd 从 V4L2 元素导出的缓冲区的 FD 进行编码。
encodeFromBuffer 从缓冲区数据的指针进行编码。
. All rights reserved.