Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
  • zyad-ayad/vlc
408 results
Show changes
Commits on Source (3)
......@@ -28,26 +28,62 @@
namespace vlc {
Compositor* Compositor::createCompositor(qt_intf_t *p_intf)
{
bool ret;
VLC_UNUSED(ret);
template<typename T>
static Compositor* instanciateCompositor(qt_intf_t *p_intf) {
return new T(p_intf);
}
template<typename T>
static bool preInit(qt_intf_t *p_intf) {
return T::preInit(p_intf);
}
struct {
const char* name;
Compositor* (*instanciate)(qt_intf_t *p_intf);
bool (*preInit)(qt_intf_t *p_intf);
} static compositorList[] = {
#ifdef _WIN32
#ifdef HAVE_DCOMP_H
CompositorDirectComposition* dcomp_compositor = new CompositorDirectComposition(p_intf);
ret = dcomp_compositor->init();
if (ret)
return dcomp_compositor;
delete dcomp_compositor;
msg_Dbg(p_intf, "failed to create DirectComposition backend, use fallback");
{"dcomp", &instanciateCompositor<CompositorDirectComposition>, &preInit<CompositorDirectComposition> },
#endif
CompositorWin7* win7_compositor = new CompositorWin7(p_intf);
if (win7_compositor->init())
return win7_compositor;
delete win7_compositor;
msg_Dbg(p_intf, "failed to create Win7 compositor backend, use fallback");
{"win7", &instanciateCompositor<CompositorWin7>, &preInit<CompositorWin7> },
#endif
return new CompositorDummy(p_intf);
{"dummy", &instanciateCompositor<CompositorDummy>, &preInit<CompositorDummy> }
};
CompositorFactory::CompositorFactory(qt_intf_t *p_intf, const char* compositor)
: m_intf(p_intf)
, m_compositorName(compositor)
{
}
bool CompositorFactory::preInit()
{
for (; m_compositorIndex < ARRAY_SIZE(compositorList); m_compositorIndex++)
{
if (m_compositorName == "auto" || m_compositorName == compositorList[m_compositorIndex].name)
{
if (compositorList[m_compositorIndex].preInit(m_intf))
return true;
}
}
return false;
}
Compositor* CompositorFactory::createCompositor()
{
for (; m_compositorIndex < ARRAY_SIZE(compositorList); m_compositorIndex++)
{
if (m_compositorName == "auto" || m_compositorName == compositorList[m_compositorIndex].name)
{
Compositor* compositor = compositorList[m_compositorIndex].instanciate(m_intf);
if (compositor->init())
return compositor;
}
}
msg_Err(m_intf, "no suitable compositor found");
return nullptr;
}
void Compositor::onWindowDestruction(vout_window_t *p_wnd)
......
......@@ -48,6 +48,8 @@ public:
public:
virtual ~Compositor() = default;
virtual bool init() = 0;
virtual MainInterface* makeMainInterface() = 0;
virtual void destroyMainInterface() = 0;
......@@ -57,15 +59,56 @@ public:
virtual Type type() const = 0;
//factory
static Compositor* createCompositor(qt_intf_t *p_intf);
protected:
void onWindowDestruction(vout_window_t *p_wnd);
VoutDestroyCb m_destroyCb = nullptr;
};
/**
* @brief The CompositorFactory class will instanciate a compositor
* in auto mode, compositor will be instantiated from the list by order declaration,
* compositor can be explicitly defined by passing its name.
*
* the usual scenario is:
*
* - call to preInit that will try to preInit compositors from list until we find
* a matching candidate
*
* - start Qt main loop
*
* - call to createCompositor to instantiate the compositor, if it fails it will
* try to initialize the next compositors from the list
*/
class CompositorFactory {
public:
CompositorFactory(qt_intf_t *p_intf, const char* compositor = "auto");
/**
* @brief preInit will check whether a compositor can be used, before starting Qt,
* each candidate will may perform some basic checks and can setup Qt enviroment variable if required
*
* @note if a compositor return true on preinit but fails to initialize afterwards, next
* compositor in chain will be initialized without the preinit phaze (as Qt will be already started)
* this might lead to an unstable configuration if incompatible operations are done in the preInit phase
*
* @return true if a compositor can be instantiated
*/
bool preInit();
/**
* @brief createCompositor will instantiate a compositor
*
* @return the instantaied compositor, null if no compsitor can be instanciated
*/
Compositor* createCompositor();
private:
qt_intf_t* m_intf = nullptr;
QString m_compositorName;
size_t m_compositorIndex = 0;
};
}
......
......@@ -29,6 +29,7 @@
#include <QApplication>
#include <QDesktopWidget>
#include <QQuickWidget>
#include <QLibrary>
#include <QOpenGLFunctions>
#include <QOpenGLFramebufferObject>
......@@ -140,6 +141,98 @@ CompositorDirectComposition::~CompositorDirectComposition()
FreeLibrary(m_dcomp_dll);
}
bool CompositorDirectComposition::preInit(qt_intf_t * p_intf)
{
//import DirectComposition API (WIN8+)
QLibrary dcompDll("DCOMP.dll");
if (!dcompDll.load())
return false;
DCompositionCreateDeviceFun myDCompositionCreateDevice = (DCompositionCreateDeviceFun)dcompDll.resolve("DCompositionCreateDevice");
if (!myDCompositionCreateDevice)
{
msg_Dbg(p_intf, "Direct Composition is not present, can't initialize direct composition");
return false;
}
//check whether D3DCompiler is available. whitout it Angle won't work
QLibrary d3dCompilerDll;
for (int i = 47; i > 41; --i)
{
d3dCompilerDll.setFileName(QString("D3DCOMPILER_%1.dll").arg(i));
if (d3dCompilerDll.load())
break;
}
if (!d3dCompilerDll.isLoaded())
{
msg_Dbg(p_intf, "can't find d3dcompiler_xx.dll, can't initialize direct composition");
return false;
}
HRESULT hr;
UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT
//| D3D11_CREATE_DEVICE_DEBUG
;
D3D_FEATURE_LEVEL requestedFeatureLevels[] = {
D3D_FEATURE_LEVEL_11_1,
D3D_FEATURE_LEVEL_11_0,
};
ComPtr<ID3D11Device> d3dDevice;
hr = D3D11CreateDevice(
nullptr, // Adapter
D3D_DRIVER_TYPE_HARDWARE,
nullptr, // Module
creationFlags,
requestedFeatureLevels,
ARRAY_SIZE(requestedFeatureLevels),
D3D11_SDK_VERSION,
d3dDevice.GetAddressOf(),
nullptr, // Actual feature level
nullptr);
if (FAILED(hr))
{
msg_Dbg(p_intf, "can't create D3D11 device, can't initialize direct composition");
return false;
}
//check that we can create a shared texture
D3D11_FEATURE_DATA_D3D11_OPTIONS d3d11Options;
HRESULT checkFeatureHR = d3dDevice->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS, &d3d11Options, sizeof(d3d11Options));
D3D11_TEXTURE2D_DESC texDesc = { };
texDesc.MipLevels = 1;
texDesc.SampleDesc.Count = 1;
texDesc.MiscFlags = 0;
texDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
texDesc.Usage = D3D11_USAGE_DEFAULT;
texDesc.CPUAccessFlags = 0;
texDesc.ArraySize = 1;
texDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
texDesc.Height = 16;
texDesc.Width = 16;
if (SUCCEEDED(checkFeatureHR) && d3d11Options.ExtendedResourceSharing) //D3D11.1 feature
texDesc.MiscFlags = D3D11_RESOURCE_MISC_SHARED | D3D11_RESOURCE_MISC_SHARED_NTHANDLE;
else
texDesc.MiscFlags = D3D11_RESOURCE_MISC_SHARED;
ComPtr<ID3D11Texture2D> d3dTmpTexture;
hr = d3dDevice->CreateTexture2D( &texDesc, NULL, &d3dTmpTexture );
if (FAILED(hr))
{
msg_Dbg(p_intf, "can't create shared texture, can't initialize direct composition");
return false;
}
//sanity check succeeded, we can now setup global Qt settings
//force usage of ANGLE backend
QApplication::setAttribute( Qt::AA_UseOpenGLES );
return true;
}
bool CompositorDirectComposition::init()
{
//import DirectComposition API (WIN8+)
......@@ -187,8 +280,6 @@ bool CompositorDirectComposition::init()
if (FAILED(hr))
return false;
QApplication::setAttribute( Qt::AA_UseOpenGLES ); //force usage of ANGLE backend
return true;
}
......
......@@ -45,7 +45,8 @@ public:
CompositorDirectComposition(qt_intf_t *p_intf, QObject* parent = nullptr);
~CompositorDirectComposition();
bool init();
static bool preInit(qt_intf_t *);
bool init() override;
MainInterface *makeMainInterface() override;
void destroyMainInterface() override;
......@@ -70,6 +71,7 @@ private:
qt_intf_t *m_intf = nullptr;
MainInterface* m_rootWindow = nullptr;
std::unique_ptr<CompositorDCompositionUISurface> m_uiSurface;
vout_window_t *m_window = nullptr;
std::unique_ptr<MainUI> m_ui;
......
......@@ -29,6 +29,16 @@ CompositorDummy::CompositorDummy(qt_intf_t *p_intf, QObject* parent)
{
}
bool CompositorDummy::preInit(qt_intf_t *)
{
return true;
}
bool CompositorDummy::init()
{
return true;
}
MainInterface* CompositorDummy::makeMainInterface()
{
m_rootWindow = new MainInterface(m_intf);
......
......@@ -37,6 +37,9 @@ public:
CompositorDummy(qt_intf_t *p_intf, QObject* parent = nullptr);
virtual ~CompositorDummy() = default;
static bool preInit(qt_intf_t*);
virtual bool init() override;
virtual MainInterface *makeMainInterface() override;
/**
......
......@@ -96,7 +96,7 @@ CompositorWin7::~CompositorWin7()
delete m_stable;
}
bool CompositorWin7::init()
bool CompositorWin7::preInit(qt_intf_t *p_intf)
{
//check whether D3DCompiler is available. whitout it Angle won't work
QLibrary d3dCompilerDll;
......@@ -134,13 +134,18 @@ bool CompositorWin7::init()
//otherwise Qt will load angle and fail.
if (!d3dCompilerDll.isLoaded() || FAILED(hr))
{
msg_Info(m_intf, "no D3D support, use software backend");
msg_Info(p_intf, "no D3D support, use software backend");
QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software);
}
return true;
}
bool CompositorWin7::init()
{
return true;
}
MainInterface* CompositorWin7::makeMainInterface()
{
//Tool flag needs to be passed in the window constructor otherwise the
......
......@@ -46,7 +46,8 @@ public:
virtual ~CompositorWin7();
bool init();
static bool preInit(qt_intf_t *p_intf);
virtual bool init() override;
virtual MainInterface *makeMainInterface() override;
virtual void destroyMainInterface() override;
......
......@@ -243,6 +243,9 @@ static void ShowDialog ( intf_thread_t *, int, int, intf_dialog_args_t * );
#define FULLSCREEN_CONTROL_PIXELS N_( "Fullscreen controller mouse sensitivity" )
#define QT_COMPOSITOR_TEXT N_("Select Qt video intergration backend")
#define QT_COMPOSITOR_LONGTEXT N_("Select Qt video intergration backend. Use with care, the interface may not start if an incompatible compositor is selected")
static const int i_notification_list[] =
{ NOTIFICATION_NEVER, NOTIFICATION_MINIMIZED, NOTIFICATION_ALWAYS };
......@@ -256,6 +259,27 @@ static const int i_raise_list[] =
static const char *const psz_raise_list_text[] =
{ N_( "Never" ), N_( "Video" ), N_( "Audio" ), _( "Audio/Video" ) };
static const char *const compositor_vlc[] = {
"auto",
#ifdef _WIN32
#ifdef HAVE_DCOMP_H
"dcomp"
#endif
"win7",
#endif
"dummy"
};
static const char *const compositor_user[] = {
N_("Automatic"),
#ifdef _WIN32
#ifdef HAVE_DCOMP_H
"Direct Composition",
#endif
"Windows 7",
#endif
N_("Dummy"),
};
/**********************************************************************/
vlc_module_begin ()
set_shortname( "Qt" )
......@@ -300,6 +324,9 @@ vlc_module_begin ()
add_bool( "qt-fs-controller", true, QT_FULLSCREEN_TEXT,
nullptr )
add_string("qt-compositor", "auto", QT_COMPOSITOR_TEXT, QT_COMPOSITOR_LONGTEXT)
change_string_list(compositor_vlc, compositor_user)
add_bool( "qt-recentplay", true, RECENTPLAY_TEXT,
nullptr )
add_string( "qt-recentplay-filter", "",
......@@ -647,7 +674,9 @@ static void *Thread( void *obj )
Q_INIT_RESOURCE( vlc );
p_intf->p_compositor = vlc::Compositor::createCompositor(p_intf);
vlc::CompositorFactory compositorFactory(p_intf, var_InheritString(p_intf, "qt-compositor"));
compositorFactory.preInit();
QApplication::setAttribute( Qt::AA_EnableHighDpiScaling );
QApplication::setAttribute( Qt::AA_UseHighDpiPixmaps );
......@@ -730,7 +759,12 @@ static void *Thread( void *obj )
if( !p_intf->b_isDialogProvider )
{
p_mi = p_intf->p_compositor->makeMainInterface();
do {
p_intf->p_compositor = compositorFactory.createCompositor();
if (! p_intf->p_compositor)
break;
p_mi = p_intf->p_compositor->makeMainInterface();
} while(p_mi == nullptr);
p_intf->p_mi = p_mi;
if (!p_mi)
......