Tool/software: Linux
Hello there,
We're having AM5728 based custom board, on VIN1 Port A we have connected our camera module. Camera creates a video node /dev/video1.
We are running a QT5.5 based application upon EGLFS platform. Previously we were using Wayland based platform, on which camera was working fine.
After switching to EGLFS, when we try to run the Qt's example camera app from, /usr/share/qt5/examples/multimediawidgets/camera/camera, camera doesn't display live stream. The behavior is random, once in 5-6 times, we can see the camera app working fine and we can see the stream on the LCD, rest of the time, the stream doesn't come on LCD and below errors print on the console.
root@raymond-gdm:/opt/GDM# sh run_camera.sh
[ 3621.998258] PVR_K: UM DDK-(3699939) and KM DDK-(3699939) match. [ OK ]
PVR:(Error): SrvInit: PVRSRVInitSrvConnect failed (129) [0, ]
/usr/bin/pvrsrvctl: SrvInit failed (already initialized?) (err=PVRSRV_ERROR_SRV_CONNECT_FAILED)
qt.qpa.egldeviceintegration: EGL device integration plugin keys: ("eglfs_kms")
qt.qpa.egldeviceintegration: Using base device integration
qt.qpa.input: evdevkeyboard: Using device discovery
qt.qpa.input: udev device discovery for type QFlags(0x8)
qt.qpa.input: Found matching devices ("/dev/input/event1")
qt.qpa.input: Adding keyboard at "/dev/input/event1"
qt.qpa.input: Try to create keyboard handler for "/dev/input/event1" ""
qt.qpa.input: Opening keyboard at "/dev/input/event1"
qt.qpa.input: Create keyboard handler with for device "/dev/input/event1"
qt.qpa.input: Unload current keymap and restore built-in
qt.qpa.input: numlock=0 , capslock=0, scrolllock=0
qt.qpa.input: evdevmouse: Using device discovery
qt.qpa.input: udev device discovery for type QFlags(0x1|0x2)
qt.qpa.input: Found matching devices ()
qt.qpa.input: Initializing tslib plugin "TsLib" ""
qt.qpa.input: tslib device is "/dev/input/event0"
Unable to query physical screen size, defaulting to 100 dpi.
To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
qt.qpa.input: Initializing tslib plugin "tslib" "/dev/input/event0"
qt.qpa.input: tslib device is "/dev/input/event0"
[ 3622.578363] vip1-s0: VIP_PORTA_OUTPUT_FIFO_YUV
[ 3622.584290] vip1-s0: vip_overflow_recovery_work: Port A
[ 3622.611693] vip1-s0: VIP_PORTA_OUTPUT_FIFO_YUV
[ 3622.616421] vip1-s0: vip_overflow_recovery_work: Port A
[ 3622.645026] vip1-s0: VIP_PORTA_OUTPUT_FIFO_YUV
[ 3622.649739] vip1-s0: vip_overflow_recovery_work: Port A
[ 3622.678360] vip1-s0: VIP_PORTA_OUTPUT_FIFO_YUV
[ 3622.683826] vip1-s0: vip_overflow_recovery_work: Port A
[ 3622.711693] vip1-s0: VIP_PORTA_OUTPUT_FIFO_YUV
[ 3622.717199] vip1-s0: vip_overflow_recovery_work: Port A
[ 3622.724115] vip1-s0: vip_overflow_recovery_work: num_recovery limit exceeded leaving disabled
Text in bold fonts are my concern. I have checked the driver code, it seems like driver is giving up on not having interrupts from camera port and it's trying 5 times.
I have also checked the vip interrupts while the app is running and found out that, when camera doesn't show stream on LCD, vip interrupt doesn't increase. On the other hand, when we see camera's stream on the LCD, the interrupts on vip increases. Below is the way I check the interrupts for vip.
root@raymond-gdm:/opt/GDM# cat /proc/interrupts | grep vip
354: 65946 0 CBAR 351 Level vip1-s0
355: 0 0 CBAR 392 Level vip1-s1
Any help would be highly appreciated. I can also provide camera invoke script if needed.
Thanks,
Divyeshkumar M