#757 Multi Monitor broken on Linux

smplayer
open
nobody
9
2016-06-17
2016-06-13
No

Hi, guys
First great job and thank you for your efforts ;)

Guys, the current release of Smplayer 16.6 is heavily broken on Linux when handling multi screens(i guess it works fine on Windowz and Mac) and you should probably add a way to disable the new behaviour for now on linux.

Problem:
1.) moving smplayer to any other screen than the primary hangs it badly and need to be killed
2.) send to screen X when on Gnome crash it, on Plasma 5.6 just show it fullscreen on the primary screen regardless the screen you select or plainly crashes, it's kinda random

Tested:
1.)mpv current git and mpv stable.
2.)Xorg current and latest git
3.)Gnome 3.20 and 3.21
4.)Plasma 5.6 with Qt-5.6.1
5.)Mesa stable and git + LLVM 3.9 and svn
6.)Tested with and without VDPAU, OpenGL-hq and auto outputs

OS:
ArchLinux latest updates
Radeonsi (TAHITI and Cape Verde cards)
Intel (IvyBridge)
AMD fx 6100(16Gb ram) and Xeon E3-1240v3(32Gb ram)

Monitors:
1 DVI IPS monitor(1 Dell and 1 LG) + HDMI TV(1080P sony and samsung 2015 models) in both systems.

For i just downgraded to 16.4 which works perfectly fine.

Again thank you very much for your time

Discussion

  • Ricardo Villalba

    This version is compiled with Qt 5 by default. Could you test to compile it with Qt 4 and see if it works better?

     
  • rafael castillo

    rafael castillo - 2016-06-14

    mmm, today i updated the whole stack + some marek patches for radeonsi and it started to work on my Tahiti - Xeon system(tomorrow i try to reproduce it on my cape verde system), i suspect now the issue is a combination of Mesa/Xorg commits.

    I'll try to track the commits on smplayer and bisect the issue on Xorg/mesa/llvm first then come back to you.

    thank you for your time :)

     
  • rafael castillo

    rafael castillo - 2016-06-14

    Well all tested, i got same version of everything on both systems and the cape verde / AMD FX still crashes.

    Here is the backtrace

    Doesn't look like this is related to rendering after all since QMenuBar is the culprit in the backtrace.

    Update:
    mmm i think smplayer have an issue here after all, the FX system had both qt4 and qt-5.6.1 installed while my xeon just had qt-5.6.1(my eyeballs are bleeding ;) ), so i removed Qt4 completely and Bum fixed. so it seems when you had both Qt versions installed they conflict with your app somehow ;)

    Thank you for your time

     
  • fuzzydude

    fuzzydude - 2016-06-14

    I can confirm what rafael is seeing in that 16.6.0-1 freezes in a multiple display desktop when moving or spawning to a secondary display. In my case, I also have both Qt4 and Qt5 packages in Kubuntu 15.04 (Plasma 5.3) but am unable to uninstall Qt4 to test rafael's findings due to dependencies. Downgrading does make the problem go away. Sidenote, the same problem is also happening to smtube 16.6.0-1 with multiple displays.

     
  • Ricardo Villalba

    There has been many changes from version 16.6 in smplayer, however there has been mainly only 2 changes in smtube: support for high dpi screens (code shared with smplayer) and use of Qt 5.

    Could you test to disable the high dpi support (in smplayer, preferences -> interface -> high dpi)?
    If that doesn't fix the problem then I guess the problem is caused somehow by Qt 5.

     
  • rafael castillo

    rafael castillo - 2016-06-15

    disabling high dpi seems to fix the issue when Qt4 is also installed, without Qt4 high dpi works fine.

    maybe check your linking process or header includes because it seems its looking for both and coincidentaly some symbols coincide enough to avoid sigsegvs at start(just a guess don't take me too seriously)

     
  • Ricardo Villalba

    Question: did you compile smplayer 16.6 with Qt 5.6 or did you get a package from a linux distro?

     
  • fuzzydude

    fuzzydude - 2016-06-16

    Disabling high dpi in the settings fixed the issue. Since smplayer normally freezes on multi display, I was only able to enter smplayer settings by disabling my extra display. Once back on multi-display the issue was fixed. Oddly, I don't seem to have an issue on smtube anymore or perhaps it is intermittent. In my case all smplayer/smtube libraries are installed from packages.

     
  • Ricardo Villalba

    Is that package for archlinux compiled with Qt 5.6 or maybe it uses an older version?

    The code to enable high dpi support in Qt 5.4 and 5.5 is different than in Qt 5.6, so if the package is not built with Qt 5.6 maybe that can cause problems. You can see the version of Qt used for compiling in the smplayer's about dialog.

    By the way, another way to disable the high dpi support without running smplayer is editing the file ~/.config/smplayerhdpi.ini and set "enabled" to false.

     
  • rafael castillo

    rafael castillo - 2016-06-16

    Arch is a rolling release distro, so yes it is compiled with 5.6.0(checked in about just in case), btw Arch uses GCC 6.1.1, dunno if you have tested it before(i don't think is the issue tho, since nothing else fail for me on either system but who knows).

    Maybe later this week if i have the time, i get the smplayer hdpi code and assert the living shit out of it, maybe i can track in Qt the sigsegv with some luck or at least code an reproduceable example for the Qtbug if applies.

     
  • Ricardo Villalba

    The way to enable high DPI support in smplayer is extremely simple. For Qt 5.6 it just set an attribute (QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);), for Qt 5.4 and 5.5 it sets an environment variable. After that everything is done by Qt.

    Another way to enable high DPI support for Qt 5 applications is to set the enviroment variable QT_AUTO_SCREEN_SCALE_FACTOR to 1. So you can test to set that variable and check if other Qt 5 apps have the same problem.

    More info here:
    http://doc.qt.io/qt-5/highdpi.html

     
  • rafael castillo

    rafael castillo - 2016-06-17

    is a Qt bug it seems, moving qtcreator to another screen sigsegv when auto scale is on

    [junior@junior ~]$ QT_AUTO_SCREEN_SCALE_FACTOR=1 qtcreator
    QOpenGLFramebufferObject: Framebuffer incomplete attachment.
    QOpenGLFramebufferObject: Framebuffer incomplete attachment.
    QOpenGLFramebufferObject: Framebuffer incomplete attachment.
    QOpenGLFramebufferObject: Framebuffer incomplete attachment.
    QOpenGLFramebufferObject: Framebuffer incomplete, missing attachment.
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::save: Painter not active
    QPainter::font: Painter not active
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::fontMetrics: Painter not active
    QPainter::setOpacity: Painter not active
    QPainter::setPen: Painter not active
    QPainter::translate: Painter not active
    QPainter::restore: Unbalanced save/restore
    QPainter::save: Painter not active
    QPainter::font: Painter not active
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setOpacity: Painter not active
    QPainter::fontMetrics: Painter not active
    QPainter::setOpacity: Painter not active
    QPainter::setPen: Painter not active
    QPainter::translate: Painter not active
    QPainter::restore: Unbalanced save/restore
    QPainter::save: Painter not active
    QPainter::font: Painter not active
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::fontMetrics: Painter not active
    QPainter::setOpacity: Painter not active
    QPainter::setPen: Painter not active
    QPainter::translate: Painter not active
    QPainter::restore: Unbalanced save/restore
    QPainter::save: Painter not active
    QPainter::font: Painter not active
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setOpacity: Painter not active
    QPainter::fontMetrics: Painter not active
    QPainter::setOpacity: Painter not active
    QPainter::setPen: Painter not active
    QPainter::translate: Painter not active
    QPainter::restore: Unbalanced save/restore
    QPainter::save: Painter not active
    QPainter::font: Painter not active
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::fontMetrics: Painter not active
    QPainter::setOpacity: Painter not active
    QPainter::setPen: Painter not active
    QPainter::translate: Painter not active
    QPainter::restore: Unbalanced save/restore
    QPainter::save: Painter not active
    QPainter::begin: Paint device returned engine == 0, type: 2
    QPainter::translate: Painter not active
    QPainter::save: Painter not active
    QPainter::restore: Unbalanced save/restore
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QPainter::font: Painter not active
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::fontMetrics: Painter not active
    QPainter::setOpacity: Painter not active
    QPainter::setPen: Painter not active
    QPainter::translate: Painter not active
    QPainter::restore: Unbalanced save/restore
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::font: Painter not active
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setFont: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::save: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QPainter::restore: Unbalanced save/restore
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::save: Painter not active
    QPainter::translate: Painter not active
    QPainter::setPen: Painter not active
    QPainter::restore: Unbalanced save/restore
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setFont: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::begin: Paint device returned engine == 0, type: 3
    QPainter::setOpacity: Painter not active
    QPainter::setOpacity: Painter not active
    QPainter::end: Painter not active, aborted
    QPainter::begin: Paint device returned engine == 0, type: 3
    QPainter::setOpacity: Painter not active
    QPainter::setOpacity: Painter not active
    QPainter::end: Painter not active, aborted
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::save: Painter not active
    QPainter::setBrushOrigin: Painter not active
    QPainter::restore: Unbalanced save/restore
    QPainter::setClipRect: Painter not active
    QPainter::pen: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QPainter::setPen: Painter not active
    QPainter::pen: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setOpacity: Painter not active
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    /usr/bin/qtcreator: line 2: 31245 Segmentation fault (core dumped) QT_LOGGING_TO_CONSOLE=1 qtcreator-bin $@

     

Log in to post a comment.

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks