DISP Q&A

Q1:DISP一直刷下面错误打印[MI ERR ]: _MI_SYS_IMPL_PrepareOutputTaskBuf[7056]: Invalid bufconfig allocated from module15, pass 0, channel0, output port 0!

这是设置MI_DISP_SetInputPortAttr宽高为0导致。

Q2:多分屏切全屏显示的时候出现显示画面错位

  1. dump disp input数据发现正常 echo dumpframe [layerid] [portid] [path] > /proc/mi_modules/mi_disp/mi_disp0
  2. 看是否有使用disp layer1,会不会是layer1盖在上面导致;关闭layer1发现问题仍然存在
  3. 查看disp0 proc信息

发现原来是区域有重叠,同一层layer不同port显示窗口不能重叠,除非重叠窗口有disable,hide也不行。

Q3: 测试disp dev1时接口int ioctl (int fd,FBIOPUT_VSCREENINFO, struct fb_var_screeninfo *var)一直阻塞

出现这个问题的原因是FB_HWLAYER_ID未修改,还是按照dev0上的情况设置。当disp用dev1时候,需要修改fbdev.ini里面的FB_HWLAYER_ID = 3/2,FB_HWLAYER_ID对应的是GOP,dev1上是用GOP 2和3,device0 上是用 GOP 0和1,所以这里3或者2都可以,一般ID小的用作cursor,例如:

[FB_DEVICE]
FB_HWLAYER_ID = 3
FB_HWWIN_ID = 0
FB_HWLAYER_DST = 3
FB_HWWIN_FORMAT = 6
FB_HWLAYER_OUTPUTCOLOR = 1
FB_WIDTH = 1280
FB_HEIGHT = 720
FB_TIMMING_WIDTH = 1920
FB_TIMMING_HEIGHT = 1080
FB_MMAP_NAME = E_MMAP_ID_FB
FB_BUFFER_LEN = 8192
#unit:Kbyte,4096=4M, fbdev.ko alloc size = FB_BUFFER_LEN*1024
[FB_CURSOR]
FB_HWLAYER_ID = 2
FB_HWWIN_ID = 0
FB_HWLAYER_DST = 3
FB_HWWIN_FORMAT = 6
FB_HWLAYER_OUTPUTCOLOR = 1
FB_MMAP_NAME = E_MMAP_ID_HW_CURSOR
[LAYER_ZORDER]
LAYER_ZORDER0 = 0
LAYER_ZORDER1 = 1
LAYER_ZORDER2 = 2
LAYER_ZORDER3 = 3
LAYER_ZORDER4 = 4

另外Disp用dev0时候, Disp layer用0/1; Disp用dev1时候, Disp layer改用2/3。Disp layer是MOP 硬件抽象层,与 DEV 有固定的绑定关系。Disp layer0/2有16个port, Disp layer1/3只有1个port。DISP 模块初始化的时候需要call API接口设定使用的Layer层,例如MI_DISP_BindVideoLayer,可参考MI DISP API文档。

Q4: 920用disp的dev1输出HDMI/VGA时,如果同时要使用cvbs, cvbs是使用dev1还是dev0?

当HDMI/VGA用dev0的时候,cvbs是用wbc bind dev1的。现在情况cvbs需要切到dev0,设置WBC属性(MI_DISP_WBC_Source_t参数)的时候,可以选择数据源是dev1,然后wbc bind disp dev0来实现cvbs输出。

Q5:DISP模块只支持YUV420SP(NV12)格式吗?

是的,目前只能吃这一种格式,如果没法改变源的格式,可以尝试用SCL模块去转成YUV420SP再给到disp模块。

例如前级JPD模块,输出的是yuv422格式的数据,中间通过接SCL模块将格式转换成yuv420SP,然后再送给disp。

Q6:切换预览窗口,使用disp disable/enable inputport这对接口时,需要重新bind吗?

不需要,只需要重新设置窗口的宽高。

Q7:disp支持1080i 分辨率吗?

不支持。

Q8:wbc支持放大功能吗?

不支持。WBC支持缩小,但不支持放大。如果配置目标分辨率比源分辨率小,那么会自动缩小。

如果需要放大,可以在后面添加scl进行放大后再传给后级。

Q9:如何确认disp输出帧率能够达到某个固定值?

通过查看disp中断数来判断,watch -n1 cat /proc/mi_modules/mi_disp/mi_disp1 | grep IrqCnt -A2

此命令为间隔1s,查询中断次数。再相减之后,可以算出1s收到多少个中断数,如上,第一行中断数为91107,第二行91167,相减为61,因此理论上disp1应该可以达到60帧,如果达不到,可以去前级找原因,是否做了帧率控制。

Q10:是否支持异源输出。

支持,910Q/920G 可以支持双屏异源输出(HDMI + TTL/Mipi)。

Q11:cvbs显示最边缘出现小黑边,如何调整。

如图,不同的cvbs屏,用默认一套参数,有可能出现显示上有黑边的情况。

这种情况下,可以微调disp timing中的 Hstar和Hend来尝试将左右黑边去掉,Hend = Hstar + width - 1,Hstar为config.ini中的m_wPanelHStart(需要找到对应的timing字段)

以上2种调节方法:1.直接修改config.ini中的参数。 2.修改对应寄存器,若是device1,则是bank1161 offset 0x17(Hstar)和offset 0x18(Hend). riu_w 0x1161 0x17 xxxx; 若是device0,则是bank1151 offset 0x17和0x18

可以先尝试往下调整,这款cvbs屏最终Hstart值调整到0x78(原本是0x7a),黑边消失。