When opening the people view in a large window allowing for many faces, the thumbnails will flicker continuously. Steps to reproduce ================== 1) Use the faces images from http://cswww.essex.ac.uk/mv/allfaces/faces94.html http://cswww.essex.ac.uk/mv/allfaces/faces94.zip 2) Create test folder and put the images there. 3) Create a new test database, and use the images above 5) Open the People view, and scan all images for faces using the default options. 5) Look for Unknown, and set the size of the face thumbnails to smallest (124px) 6) Make the window size for Digikam large enough until the flicker starts. I usually get it with > ~210 faces (thumbnails). Expected result ================ People view displays the thumbnails without flicker. Actual result =============== People view displays the thumbnails constant flickering Additional info =============== See video of flickering at https://youtu.be/AwmapnWNDBw I get this on my laptop and desktop. I was using digikam built from sources (d72b486b7109fd80f6071fd78af2b9509de56044) Observation =========== It seems that applying following patch makes the flicker go away. But I'm not sure what the downside of the patch is... krikar@krikar-desktop:~/dev/kde/digikam/core$ git diff diff --git a/app/items/imagecategorizedview.cpp b/app/items/imagecategorizedview.cpp index d5847c7..ba6dd47 100644 --- a/app/items/imagecategorizedview.cpp +++ b/app/items/imagecategorizedview.cpp @@ -737,14 +737,14 @@ ImageInfoList ImageCategorizedView::resolveGrouping(const QModelIndexList indexe void ImageCategorizedView::paintEvent(QPaintEvent* e) { // We want the thumbnails to be loaded in order. - ImageThumbnailModel* const thumbModel = imageThumbnailModel(); +/* ImageThumbnailModel* const thumbModel = imageThumbnailModel(); if (thumbModel) { QModelIndexList indexesToThumbnail = imageFilterModel()->mapListToSource(categorizedIndexesIn(viewport()->rect())); d->delegate->prepareThumbnails(thumbModel, indexesToThumbnail); } - +*/ ItemViewCategorized::paintEvent(e); }
I noticed this first, when using a maximized Digikam window on a 4K monitor, where enough faces/thumbnails were rendered to cause the flickering. Reducing the size of the Digikam window will make the flickering go away.
Can you reproduce the problem with pre-release 5.4.0 AppImage univerdal bundle for Linux available here : https://drive.google.com/drive/folders/0BzeiVr-byqt5Y0tIRWVWelRJenM
Yes, I could reproduce the problem on the pre-release 5.4.0 AppImage.
The flickering still exists digikam 5.7.0, installed from neon CI repository: aptitude show digikam Package: digikam State: installed Automatically installed: no Version: 4:5.5.0+p16.04+git20170621.0646-0 Priority: optional Section: graphics Maintainer: Neon CI <neon@kde.org> Architecture: amd64 Uncompressed Size: 26,6 M Depends: digikam-data (= 4:5.5.0+p16.04+git20170621.0646-0), libqt5sql5-sqlite, perl, libc6 (>= 2.14), libexiv2-14 (>= 0.25), libexpat1 (>= 2.0.1), libgcc1 (>= 1:3.0), libgl1-mesa-glx | libgl1, libgomp1 (>= 4.9), libgphoto2-6 (>= 2.5.9), libgphoto2-port12 (>= 2.5.9), libjasper1, libjpeg8 (>= 8c), libkf5akonadicontact5, libkf5calendarcore5, libkf5configcore5, libkf5configgui5, libkf5configwidgets5, libkf5contacts5, libkf5coreaddons5, libkf5filemetadata3, libkf5i18n5, libkf5iconthemes5, libkf5kdelibs4support5, libkf5kiowidgets5, libkf5kipi32.0.0, libkf5notifications5, libkf5notifyconfig5, libkf5sane5, libkf5service5, libkf5solid5, libkf5threadweaver5, libkf5widgetsaddons5, libkf5windowsystem5, libkf5xmlgui5, liblcms2-2 (>= 2.2+git20110628), liblensfun0 (>= 0.2.8), liblqr-1-0 (>= 0.4.0), libmarblewidget-qt5-28, libopencv-contrib2.4v5, libopencv-core2.4v5, libopencv-imgproc2.4v5, libopencv-objdetect2.4v5, libpng12-0 (>= 1.2.13-4), libqt5concurrent5 (>= 5.9.0), libqt5core5a (>= 5.9.0), libqt5dbus5 (>= 5.9.0), libqt5gui5 (>= 5.9.0), libqt5network5 (>= 5.9.0), libqt5opengl5 (>= 5.9.0), libqt5printsupport5 (>= 5.9.0), libqt5sql5 (>= 5.9.0), libqt5webkit5, libqt5widgets5 (>= 5.9.0), libqt5x11extras5, libqt5xml5 (>= 5.9.0), libstdc++6 (>= 5.2), libtiff5 (>= 4.0.3), libx11-6
Here, i tried with digiKam 5.7.0 + Qt 5.9. + KF5 5.35, and OpenCV 3.1.0 with a 4K monitor under Mageia6. I cannot reproduce the problem. Which screen resolution do you use exactly ? Gilles Caulier
I have seen this problem on 2 different 4K screens. One connected to my midtower machine. And last, my laptop Lenovo Thinkpad X240 connected using Display Port to a BenQ BL3201PT 32-inch Ultra HD, running 3840x2160 30 FPS It does not matter what size I have on the thumbnails, 128 or 256 px.
The AppImage Linux Bundle have been recompiled with last changes from source code and is available here for testing : https://files.kde.org/digikam/ Take a care : 6.0.0 is a beta release for the moment. Make a database backup before to test. Problem still here ? Gilles Caulier
I had looked at this a while ago. I suspect after the video here is some display composer used (Compiz?). This probably sends a paint event constantly. Normally, the paint event occurs only when e.g. a window is moved in front over the thumbnails. At the moment I do not see a solution to not break other display managers. Maik
I tested this on a different 4k screen, and I get the same problem. Using the latest from git: 0890e2005cae874dd1fcf71c2d3642152c00eff0, digikam produces the following on the terminal during this flickering : : digikam.general: Request to get thumbnail for "" digikam.general: Could not open input file: "" digikam.general: Failed to extract video thumbnail for "" QFSFileEngine::open: No file name specified digikam.general: Request to get thumbnail for "" digikam.general: Could not open input file: "" digikam.general: Failed to extract video thumbnail for "" QFSFileEngine::open: No file name specified digikam.general: Request to get thumbnail for "" digikam.general: Could not open input file: "" digikam.general: Failed to extract video thumbnail for "" QFSFileEngine::open: No file name specified digikam.general: Request to get thumbnail for "" digikam.general: Could not open input file: "" digikam.general: Failed to extract video thumbnail for "" digikam.general: Request to get thumbnail for "" QFSFileEngine::open: No file name specified digikam.general: Could not open input file: "" digikam.general: Failed to extract video thumbnail for "" QFSFileEngine::open: No file name specified digikam.general: Request to get thumbnail for "" digikam.general: Could not open input file: "" digikam.general: Failed to extract video thumbnail for "" QFSFileEngine::open: No file name specified digikam.general: Request to get thumbnail for "" digikam.general: Could not open input file: "" digikam.general: Failed to extract video thumbnail for "" QFSFileEngine::open: No file name specified digikam.general: Request to get thumbnail for "" digikam.general: Could not open input file: "" digikam.general: Failed to extract video thumbnail for "" QFSFileEngine::open: No file name specified : :
The first thing that is strange is that you constantly have a paint event. As I said, usually only when the mouse pointer or a window moves in front of it or the view is scrolled. The second question is where the empty ImageInfo::filePath() come from to preload thumbnails. If I create a patch with more debug output, can you apply it for testing? Maik
Absolutely! I'll try some debugging of my own in the meantime. I got a dual screen setup to hel me debug now.
When debugging this morning, I paused during flicker, and paused execution. Every time I paused , the stack trace for Digikam code started at: https://github.com/KDE/digikam/blob/c013f88088bf08e321e4da8be71a61b02b67af2c/core/libs/widgets/itemview/itemviewcategorized.cpp#L997 I added before the return statement: qCDebug(DIGIKAM_GENERAL_LOG) << "Event: " << event; return DCategorizedView::viewportEvent(event); Which now gave the following output during flicker: digikam.general: Event: QPaintEvent(QRegion(929,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(1083,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(1237,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(1545,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(1699,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(1853,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(2007,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(2161,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(1391,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(2315,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(2469,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(size=2, bounds=(2623,888 298x212) - [(2623,888 144x212), (2777,888 144x212)])) digikam.general: Event: QPaintEvent(QRegion(2931,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(3085,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(3239,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(3393,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(3547,888 144x212)) digikam.general: Event: QPaintEvent(QRegion(5,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(159,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(313,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(467,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(621,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(775,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(929,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(1083,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(1237,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(1391,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(1545,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(1699,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(1853,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(2007,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(size=2, bounds=(2161,1110 298x212) - [(2161,1110 144x212), (2315,1110 144x212)])) digikam.general: Event: QPaintEvent(QRegion(size=2, bounds=(2469,1110 298x212) - [(2469,1110 144x212), (2623,1110 144x212)])) digikam.general: Event: QPaintEvent(QRegion(2777,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(2931,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(3085,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(3239,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(3393,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(3547,1110 144x212)) digikam.general: Event: QPaintEvent(QRegion(5,1332 144x212)) digikam.general: Event: QPaintEvent(QRegion(159,1332 144x212)) digikam.general: Event: QPaintEvent(QRegion(313,1332 144x212)) digikam.general: Event: QPaintEvent(QRegion(467,1332 144x212)) digikam.general: Event: QPaintEvent(QRegion(621,1332 144x212)) digikam.general: Event: QPaintEvent(QRegion(775,1332 144x212)) digikam.general: Event: QPaintEvent(QRegion(929,1332 144x212)) digikam.general: Event: QPaintEvent(QRegion(1083,1332 144x212)) digikam.general: Event: QPaintEvent(QRegion(1237,1332 144x212))
Some more details observed while debugging. It seems like ThumbnailLoadingTask is getting called repeatably during flicker: libdigikamcore.so.6.0.0!Digikam::ThumbnailCreator::loadDetail(const Digikam::ThumbnailCreator * const this, const Digikam::ThumbnailIdentifier & identifier, const QRect & rect) (/home/krikar/dev/kde/digikam/core/libs/threadimageio/thumbnailcreator.cpp:187) libdigikamcore.so.6.0.0!Digikam::ThumbnailLoadingTask::execute(Digikam::ThumbnailLoadingTask * const this) (/home/krikar/dev/kde/digikam/core/libs/threadimageio/thumbnailtask.cpp:169) libdigikamcore.so.6.0.0!Digikam::LoadSaveThread::run(Digikam::LoadSaveThread * const this) (/home/krikar/dev/kde/digikam/core/libs/threadimageio/loadsavethread.cpp:133) libdigikamcore.so.6.0.0!Digikam::DynamicThread::Private::run(Digikam::DynamicThread::Private * const this) (/home/krikar/dev/kde/digikam/core/libs/threads/dynamicthread.cpp:183) libQt5Core.so.5![Unknown/Just-In-Time compiled code] (Unknown Source:0) libpthread.so.0!start_thread(void * arg) (/build/glibc-OTsEL5/glibc-2.27/nptl/pthread_create.c:463) libc.so.6!clone() (/build/glibc-OTsEL5/glibc-2.27/sysdeps/unix/sysv/linux/x86_64/clone.S:95)
That's right, the thumbnails are "preloaded" by the Paint Event. The thumbnail task will send a signal to the image model that the thumbnail is available and it will be drawn. By you over and over again. The advantage of this thumbnail preload only with the fast scrolling, the thumbnails appear faster. The problem is the Paint Event, which is constantly triggered by you. So again my question: which desktop? which display manager and extension? Graphics card and driver? Maik
Oh sorry! Desktop: KDE Neon (Plasma 5.13.4,KDE frameworks 5.49.0, Qt 5.11.1 ) on Ubuntu 18.04 Display manager and extension: cat /etc/X11/default-display-manager /usr/bin/sddm Graphics card and driver? glxinfo | grep OpenGL OpenGL vendor string: Intel Open Source Technology Center OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 620 (Kaby Lake GT2) OpenGL core profile version string: 4.5 (Core Profile) Mesa 18.0.5 OpenGL core profile shading language version string: 4.50 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 3.0 Mesa 18.0.5 OpenGL shading language version string: 1.30 OpenGL context flags: (none) OpenGL extensions: OpenGL ES profile version string: OpenGL ES 3.2 Mesa 18.0.5 OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 OpenGL ES profile extensions: Resolution on the screen: 3840x2160
Do you use X11 or Wayland ? I never tested AppImage with Wayland, and think it must miss some piece of Qt plugins in the bundle. Gilles Caulier
I use x11 echo $XDG_SESSION_TYPE x11
I think that maybe the resolution might be involved somehow. If I use may 2560x1440, I don't get any flickering. When I use 3840x2160, I do get flickering. Please note, that the digikam window is maximized in both cases.
Maybe a long shot, but could maybe this method be involved somehow? https://github.com/KDE/digikam/blob/c013f88088bf08e321e4da8be71a61b02b67af2c/core/libs/widgets/itemview/dcategorizedview.cpp#L70-L132 I'll add some debug logging and see what I can find
Another way to experiment : In appimage, we use Qt 5.9.6 LTS. Perhaps a major update to Qt 5.11.x can solve this problem. Gilles Caulier
I tested the latest appimage of Digikam (digikam-5.9.0-01-x86-64.appimage) on the latest KUbuntu (18-04.1) version on Virtualbox. 1) I used images from http://cswww.essex.ac.uk/mv/allfaces/faces94.html http://cswww.essex.ac.uk/mv/allfaces/faces94.zip 2) I then let Digikam scan for faces on all the images 3) I open People view, and select the tag unknown 4) Select a Flat List in the View | Separate Items 4) I maximize my VirtualBox window in my 3840x2160 screen, and then maximize Digikam in VirtualBox. 5) I click on the People view tab (hide it), so I can maximize the number of thumbnails in the window. 6) Adjust thumbnail sizes to smallest possible. I get flicker. Using the steps above should be enough to reproduce the flicker on any 4k screen. If an 4K screen is not available, the VirtualBox window could be made very large by just increasing the size of that window, and moving it outside, until a very large window is made, the maximize the Digikam window. I think the problem perhaps is related to the actual size of the Digikam window, and the number of people thumbnails being displayed?
In virtualbox, did you enable 3D support (openGL) Gilles Caulier
No. 3D Acceleration was disabled.
Well, try again with this option... Gilles Caulier
With 3D Acceleration enabled, I still get flickering on my VirtualBox installation, I'm afraid.
ok, What's about the cores assigned to the VM ? Same for the system memory and the video memory. This is important because it can influence to the rendering performances. Gilles Caulier
System ======= Processors: 1 CPU Base memory: 4610 MB Acceleration: VT-x/AMD-V, Nested Paging, KVM Paravirtualization Display ======= Video memory: 33 MB Acceleration: 3D
Complete printout of information regarding the VM machine $ VBoxManage showvminfo "Kubuntu 18.04" Name: Kubuntu 18.04 Groups: / Guest OS: Ubuntu (64-bit) UUID: 73aa30f4-e0f1-4359-96ba-b1e860f8038f Config file: /home/krikar/VirtualBox VMs/Kubuntu 18.04/Kubuntu 18.04.vbox Snapshot folder: /home/krikar/VirtualBox VMs/Kubuntu 18.04/Snapshots Log folder: /home/krikar/VirtualBox VMs/Kubuntu 18.04/Logs Hardware UUID: 73aa30f4-e0f1-4359-96ba-b1e860f8038f Memory size: 4610MB Page Fusion: off VRAM size: 33MB CPU exec cap: 100% HPET: off Chipset: piix3 Firmware: BIOS Number of CPUs: 1 PAE: off Long Mode: on Triple Fault Reset: off APIC: on X2APIC: on CPUID Portability Level: 0 CPUID overrides: None Boot menu mode: message and menu Boot Device (1): Floppy Boot Device (2): DVD Boot Device (3): HardDisk Boot Device (4): Not Assigned ACPI: on IOAPIC: on BIOS APIC mode: APIC Time offset: 0ms RTC: UTC Hardw. virt.ext: on Nested Paging: on Large Pages: off VT-x VPID: on VT-x unr. exec.: on Paravirt. Provider: Default Effective Paravirt. Provider: KVM State: powered off (since 2018-09-11T16:41:47.676000000) Monitor count: 1 3D Acceleration: on 2D Video Acceleration: off Teleporter Enabled: off Teleporter Port: 0 Teleporter Address: Teleporter Password: Tracing Enabled: off Allow Tracing to Access VM: off Tracing Configuration: Autostart Enabled: off Autostart Delay: 0 Default Frontend: Storage Controller Name (0): IDE Storage Controller Type (0): PIIX4 Storage Controller Instance Number (0): 0 Storage Controller Max Port Count (0): 2 Storage Controller Port Count (0): 2 Storage Controller Bootable (0): on Storage Controller Name (1): SATA Storage Controller Type (1): IntelAhci Storage Controller Instance Number (1): 0 Storage Controller Max Port Count (1): 30 Storage Controller Port Count (1): 1 Storage Controller Bootable (1): on IDE (1, 0): Empty SATA (0, 0): /home/krikar/VirtualBox VMs/Kubuntu 18.04/Snapshots/{d346dd72-695a-4b30-a07f-9e743849bb7a}.vdi (UUID: d346dd72-695a-4b30-a07f-9e743849bb7a) NIC 1: MAC: 0800272205A2, Attachment: NAT, Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny, Bandwidth group: none NIC 1 Settings: MTU: 0, Socket (send: 64, receive: 64), TCP Window (send:64, receive: 64) NIC 2: disabled NIC 3: disabled NIC 4: disabled NIC 5: disabled NIC 6: disabled NIC 7: disabled NIC 8: disabled Pointing Device: USB Tablet Keyboard Device: PS/2 Keyboard UART 1: disabled UART 2: disabled UART 3: disabled UART 4: disabled LPT 1: disabled LPT 2: disabled Audio: enabled (Driver: PulseAudio, Controller: AC97, Codec: AD1980) Audio playback: disabled Audio capture: enabled Clipboard Mode: disabled Drag and drop Mode: disabled VRDE: disabled USB: enabled EHCI: enabled XHCI: disabled USB Device Filters: <none> Bandwidth groups: <none> Shared folders: <none> Capturing: not active Capture audio: not active Capture screens: 0 Capture file: /home/krikar/VirtualBox VMs/Kubuntu 18.04/Kubuntu 18.04.webm Capture dimensions: 1024x768 Capture rate: 512 kbps Capture FPS: 25 Capture options: ac_enabled=false Guest: Configured memory balloon size: 0 MB Snapshots: Name: Prestine (UUID: 43f8bf90-35c4-440e-b854-23041d709ac4) *
After 3 weeks of work, i finally completed the compilation of AppImage using Qt 5.11.3 + QWebkit 5.212. New 6.1.0 pre-release AppImage bundle can be found here (64 bits only for the moment) : https://files.kde.org/digikam/ Please check if this bugzilla entry still valid. Thanks in advance Gilles Caulier
I can confirm, that the issue still exists. I tried using digikam-6.1.0-git-20190321T102236-x86-64.appimage If there's anything I can do, to try to pin-point the problem, I'm happy to help out.
Git commit ea71d3e0a2f1e527300d729bed8dc3f47fc819d7 by Maik Qualmann. Committed on 08/11/2020 at 06:39. Pushed by mqualmann into branch 'master'. remove dead code to update thumbnails when a paint event occurs Related: bug 426208 FIXED-IN: 7.2.0 M +5 -3 NEWS M +0 -5 core/app/items/delegate/itemdelegate.cpp M +0 -5 core/app/items/delegate/itemdelegate.h M +1 -6 core/app/items/delegate/itemfacedelegate.cpp M +0 -2 core/app/items/delegate/itemfacedelegate.h M +0 -15 core/app/items/views/itemcategorizedview.cpp M +0 -1 core/app/items/views/itemcategorizedview.h M +0 -5 core/libs/models/itemalbumfiltermodel.cpp M +0 -3 core/libs/models/itemalbumfiltermodel.h M +0 -5 core/showfoto/thumbbar/showfotodelegate.h https://invent.kde.org/graphics/digikam/commit/ea71d3e0a2f1e527300d729bed8dc3f47fc819d7