有关海思3559显示与输入有一帧的延时问题

海思3559的输入与hdmi输出之间有一帧的延时,通路为vi->vpss->vo,模式为vi offline,vpss offline。
与延时有关的函数是
HI_MPI_VI_SetPipeFrameInterruptAttr(VI_PIPE ViPipe, const FRAME_INTERRUPT_ATTR_S* pstFrameIntAttr);
函数相关的参数说明
typedef struct hiFRAME_INTERRUPT_ATTR_S
{
FRAME_INTERRUPT_TYPE_E enIntType;
HI_U32 u32EarlyLine;
} FRAME_INTERRUPT_ATTR_S;

typedef enum hiFRAME_INTERRUPT_TYPE_E
{
FRAME_INTERRUPT_START,
FRAME_INTERRUPT_EARLY,
FRAME_INTERRUPT_EARLY_END,
FRAME_INTERRUPT_BUTT,
} FRAME_INTERRUPT_TYPE_E;
对于不同的中断模式在《HiMPP V4.0 媒体处理软件 FAQ.pdf》文档里面有说明,以下是copy了相关的部分内容

FRAME_INTERRUPT_START 类型
中断处理:在帧起始中断中采集准备与发送采集完成的帧。
DDR 占用:采集过程中 VB 的占用周期是固定的 2 帧时间。
优点:帧采集完整无误。
缺点:VB 占用的时间比较长。

FRAME_INTERRUPT_EARLY 类型
中断处理:在提前上报中断中采集准备与发送采集完成的帧。
DDR 占用:采集过程中 VB 的占用周期是固定的 1 帧时间。
优点:占用 VB 时间非常短,在内存紧张的情况下使用该中断类型省内存。
缺点:
 帧采集到 u32EarlyLine 行之后就会发给后端处理,u32EarlyLine 行设置较小的时候可能导致问题。
 后端模块的处理赶不上采集的速度可能导致图像花屏,甚至逻辑挂死。
 由于帧压缩是整帧压缩,不能按行解压,因此不能使用帧压缩。
 拍照通路不能使用。
调试方法:u32EarlyLine 行设置较小的时候,帧未采集完成,发送给后端模块处理,需要调整 u32EarlyLine 使后端模块的处理赶不上采集的速度,否则可能导致图像花屏,甚至逻辑挂死,例如 VI 离线的情况下,采集行压缩或者帧压缩的 raw 就可能导致VIPROC 报错误中断。u32EarlyLine 依赖时序,帧率,后端模块的性能,假设 VI 采集一帧的时间是 T1(帧起始到帧完成的时间,不包含消隐区),图像高度是 H,后端模块(VIPROC,VPSS,VENC 等)处理一帧的时间是 T2,则:
(T1/H)*(H-u32EarlyLine) <= T2

FRAME_INTERRUPT_EARLY_END 类型
中断处理:在提前上报中断中采集准备,在帧完成中断中发送采集完成的帧。
DDR 占用:采集过程中 VB 的占用周期是 1 帧到 2 帧的时间。
优点:
 帧采集完整无误。
 在低帧率,不连续的序列下能及时采集数据。
缺点:
 VB 占用的时间比较长,但是在 u32EarlyLine 配置为图像高度,VB 的占用周期是固定的 1 帧时间。
 中断个数增多,增加 CPU 消耗。
调试方法:在后消隐区比较大的情况下,强烈建议 u32EarlyLine 配置为图像高度,如果后消隐区非常小导致帧完成与帧起始中断重合,则调整 u32EarlyLine 比图像高度小直至保证 VI 不丢帧

程序默认配置为了FRAME_INTERRUPT_START 类型的中端方式,这样就会导致输出与输入之间有帧延时的存在,把中断模式设置为FRAME_INTERRUPT_EARLY_END,u32EarlyLine 配置为图像高度后,帧延时的现象消失了。

你可能感兴趣的:(海思3559)