NVIDIA V4L2 视频解码器描述和扩展。
视频解码器设备节点是
/dev/nvhost-nvdec
输出平面 | 捕获平面 |
---|---|
V4L2_PIX_FMT_H264 | V4L2_PIX_FMT_NV12M |
V4L2_PIX_FMT_H265 | V4L2_PIX_FMT_NV12M |
内存 | 输出平面 | 捕获平面 |
---|---|---|
V4L2_MEMORY_MMAP | 是 | 是 |
V4L2_MEMORY_DMABUF | 否 | 是 |
V4L2_MEMORY_USERPTR | 是 | 否 |
事件 | 目的 |
---|---|
V4L2_EVENT_RESOLUTION_CHANGE | 流的分辨率已更改。 |
当解码器生成 V4L2_EVENT_RESOLUTION_CHANGE
事件时,应用程序在捕获平面上调用 STREAMOFF
,以告知解码器通过调用计数为零的 REQBUF 来释放当前缓冲区,获取新的捕获平面格式,然后继续设置捕获平面的缓冲区。
在解码器的情况下,缓冲区格式可能与显示分辨率不同。应用程序必须使用 VIDIOC_G_CROP
来获取显示分辨率。
必须遵循以下顺序来发送 EOS 并从解码器接收 EOS。
v4l2_buffer.m.planes[0].bytesused = 0
))向解码器发送 EOS。v4l2_buffer.m.planes[0].bytesused == 0
))解码器支持将流头解析错误信息作为输入帧元数据报告。有关更多信息,请参阅 V4L2_CID_MPEG_VIDEO_ERROR_REPORTING
、V4L2_CID_MPEG_VIDEODEC_INPUT_METADATA
和 v4l2_ctrl_video_metadata
。
解码器支持报告帧相关元数据,包括错误报告和 DPB 信息。有关更多信息,请参阅 V4L2_CID_MPEG_VIDEO_ERROR_REPORTING
、V4L2_CID_MPEG_VIDEODEC_METADATA
和 v4l2_ctrl_video_metadata
。
数据结构 | |
结构体 | v4l2_ctrl_videodec_statusmetadata_ |
保存帧的解码器错误状态元数据。 更多... | |
结构体 | v4l2_ctrl_videodec_refframe_metadata_ |
保存参考帧的帧特定元数据。 更多... | |
结构体 | v4l2_ctrl_videodec_currentframe_metadata_ |
保存当前帧的帧特定元数据。 更多... | |
结构体 | v4l2_ctrl_videodec_dpbinfometadata_ |
保存解码器 DPB 信息元数据。 更多... | |
结构体 | v4l2_ctrl_h264dec_bufmetadata_ |
保存帧的 H.264 特定解码器元数据。 更多... | |
结构体 | v4l2_ctrl_hevcdec_bufmetadata_ |
保存帧的 H.265 特定解码器元数据。 更多... | |
结构体 | v4l2_ctrl_videodec_inputbuf_metadata_ |
保存帧的视频解码器输入头错误元数据。 更多... | |
结构体 | v4l2_ctrl_videodec_outputbuf_metadata_ |
保存帧的视频解码器输出元数据。 更多... | |
类型定义 | |
typedef struct v4l2_ctrl_videodec_statusmetadata_ | v4l2_ctrl_videodec_statusmetadata |
保存帧的解码器错误状态元数据。 更多... | |
typedef struct v4l2_ctrl_videodec_refframe_metadata_ | v4l2_ctrl_videodec_refframe_metadata |
保存参考帧的帧特定元数据。 更多... | |
typedef struct v4l2_ctrl_videodec_currentframe_metadata_ | v4l2_ctrl_videodec_currentframe_metadata |
保存当前帧的帧特定元数据。 更多... | |
typedef struct v4l2_ctrl_videodec_dpbinfometadata_ | v4l2_ctrl_videodec_dpbinfometadata |
保存解码器 DPB 信息元数据。 更多... | |
typedef struct v4l2_ctrl_h264dec_bufmetadata_ | v4l2_ctrl_h264dec_bufmetadata |
保存帧的 H.264 特定解码器元数据。 更多... | |
typedef struct v4l2_ctrl_hevcdec_bufmetadata_ | v4l2_ctrl_hevcdec_bufmetadata |
保存帧的 H.265 特定解码器元数据。 更多... | |
typedef struct v4l2_ctrl_videodec_inputbuf_metadata_ | v4l2_ctrl_videodec_inputbuf_metadata |
保存帧的视频解码器输入头错误元数据。 更多... | |
typedef struct v4l2_ctrl_videodec_outputbuf_metadata_ | v4l2_ctrl_videodec_outputbuf_metadata |
保存帧的视频解码器输出元数据。 更多... | |
枚举 | |
enum | v4l2_skip_frames_type { V4L2_SKIP_FRAMES_TYPE_NONE = 0, V4L2_SKIP_FRAMES_TYPE_NONREF = 1, V4L2_SKIP_FRAMES_TYPE_DECODE_IDR_ONLY = 2 } |
枚举 v4l2_skip_frames_type,解码器跳帧的可能方法。 更多... | |
enum | v4l2_cuda_mem_type { V4L2_CUDA_MEM_TYPE_DEVICE = 0, V4L2_CUDA_MEM_TYPE_PINNED = 1, V4L2_CUDA_MEM_TYPE_UNIFIED = 2 } |
枚举 v4l2_cuda_mem_type,cuda 内存类型的可能方法。 更多... | |
enum | v4l2_videodec_input_error_type { V4L2_DEC_ERROR_NONE = 0x0, V4L2_DEC_ERROR_SPS = 0x1, V4L2_DEC_ERROR_PPS = 0x2, V4L2_DEC_ERROR_SLICE_HDR = 0x4, V4L2_DEC_ERROR_MISSING_REF_FRAME = 0x8, V4L2_DEC_ERROR_VPS = 0x10 } |
枚举 v4l2_videodec_input_error_type,输入流的可能错误类型。 更多... | |
#define V4L2_CID_MPEG_VIDEO_DISABLE_COMPLETE_FRAME_INPUT (V4L2_CID_MPEG_BASE+515) |
定义控件 ID,以指示解码器输入缓冲区不包含完整缓冲区。
必须为此控件提供布尔值。
定义于文件 v4l2_nv_extensions.h 的第 501 行。
#define V4L2_CID_MPEG_VIDEO_DISABLE_DPB (V4L2_CID_MPEG_BASE+516) |
定义控件 ID 以禁用解码器 DPB 管理。
必须为此控件提供布尔值。
定义于文件 v4l2_nv_extensions.h 的第 513 行。
#define V4L2_CID_MPEG_VIDEO_ERROR_REPORTING (V4L2_CID_MPEG_BASE+517) |
定义控件 ID 以启用解码器错误和元数据报告。
必须为此控件提供布尔值。
定义于文件 v4l2_nv_extensions.h 的第 523 行。
#define V4L2_CID_MPEG_VIDEO_SKIP_FRAMES (V4L2_CID_MPEG_BASE+518) |
定义控件 ID 以设置解码器的跳帧属性。
必须将解码器配置为跳过某些类型的帧。必须传递一个 v4l2_skip_frames_type
。
定义于文件 v4l2_nv_extensions.h 的第 535 行。
#define V4L2_CID_MPEG_VIDEODEC_INPUT_METADATA (V4L2_CID_MPEG_BASE+520) |
定义控件 ID 以获取解码器输入头错误元数据。
必须为此控件提供指向有效 v4l2_ctrl_video_metadata
结构的指针。
定义于文件 v4l2_nv_extensions.h 的第 565 行。
#define V4L2_CID_MPEG_VIDEODEC_METADATA (V4L2_CID_MPEG_BASE+519) |
定义控件 ID 以获取解码器输出元数据。
必须为此控件提供指向有效 v4l2_ctrl_video_metadata
结构的指针。
定义于文件 v4l2_nv_extensions.h 的第 550 行。
#define V4L2_CID_MPEG_VIDEODEC_SAR_HEIGHT (V4L2_CID_MPEG_BASE+570) |
定义控件 ID 以获取解码的样本宽高比高度。
此控件返回样本宽高比高度的无符号整数。
定义于文件 v4l2_nv_extensions.h 的第 602 行。
#define V4L2_CID_MPEG_VIDEODEC_SAR_WIDTH (V4L2_CID_MPEG_BASE+569) |
定义控件 ID 以获取解码的样本宽高比宽度。
此控件返回样本宽高比宽度的无符号整数。
定义于文件 v4l2_nv_extensions.h 的第 592 行。
#define V4L2_CID_MPEG_VIDEOENC_DS_SEI_DATA (V4L2_CID_MPEG_BASE+571) |
定义控件 ID 以嵌入来自上游插件的 SEI 数据。
此控件设置编码器的 SEI 有效负载大小和 SEI 数据指针。
定义于文件 v4l2_nv_extensions.h 的第 612 行。
#define V4L2_CID_VIDEODEC_DISPLAYDATA_PRESENT (V4L2_CID_MPEG_BASE+521) |
#define V4L2_CID_VIDEODEC_HDR_MASTERING_DISPLAY_DATA (V4L2_CID_MPEG_BASE+522) |
定义控件 ID 以在 V4L2_CID_VIDEODEC_DISPLAYDATA_PRESENT 返回 true 时获取显示数据。
此控件返回显示模块所需的显示数据,例如 display_primaries、white_point 和 display_parameter_luminance。
定义于文件 v4l2_nv_extensions.h 的第 582 行。
typedef struct v4l2_ctrl_h264dec_bufmetadata_ v4l2_ctrl_h264dec_bufmetadata |
保存帧的 H.264 特定解码器元数据。
typedef struct v4l2_ctrl_hevcdec_bufmetadata_ v4l2_ctrl_hevcdec_bufmetadata |
保存帧的 H.265 特定解码器元数据。
保存当前帧的帧特定元数据。
保存解码器 DPB 信息元数据。
保存帧的视频解码器输入头错误元数据。
保存帧的视频解码器输出元数据。
保存参考帧的帧特定元数据。
保存帧的解码器错误状态元数据。
enum v4l2_cuda_mem_type |
枚举 v4l2_cuda_mem_type,cuda 内存类型的可能方法。
枚举器 | |
---|---|
V4L2_CUDA_MEM_TYPE_DEVICE | 内存类型设备。 |
V4L2_CUDA_MEM_TYPE_PINNED | 内存类型主机。 |
V4L2_CUDA_MEM_TYPE_UNIFIED | 内存类型统一。 |
定义于文件 1602 行,文件为 v4l2_nv_extensions.h。
枚举 v4l2_skip_frames_type,解码器跳帧的可能方法。
枚举器 | |
---|---|
V4L2_SKIP_FRAMES_TYPE_NONE | 不跳过任何帧。 |
V4L2_SKIP_FRAMES_TYPE_NONREF | 跳过所有非参考帧。 |
V4L2_SKIP_FRAMES_TYPE_DECODE_IDR_ONLY | 跳过除 IDR 之外的所有帧。 |
定义于文件 1591 行,文件为 v4l2_nv_extensions.h。
枚举 v4l2_videodec_input_error_type,输入流的可能错误类型。
枚举器 | |
---|---|
V4L2_DEC_ERROR_NONE | 无错误。 |
V4L2_DEC_ERROR_SPS | SPS 错误。 |
V4L2_DEC_ERROR_PPS | PPS 错误。 |
V4L2_DEC_ERROR_SLICE_HDR | 切片头错误。 |
V4L2_DEC_ERROR_MISSING_REF_FRAME | 缺少参考帧错误。 |
V4L2_DEC_ERROR_VPS | VPS 错误。 |
定义于文件 1613 行,文件为 v4l2_nv_extensions.h。