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
403 results
Show changes
Commits on Source (3)
  • Alexandre Janniaux's avatar
    darwinvlc: remove VLA for argv · ca7cb8d4
    Alexandre Janniaux authored and François Cartegnie's avatar François Cartegnie committed
    VLA are not compatible with blocks, and error handling is pretty simple
    here, so there's no reason not to use dynamic allocation instead.
    ca7cb8d4
  • Alexandre Janniaux's avatar
    darwinvlc: start interfaces in separate thread · 3a6bd45b
    Alexandre Janniaux authored and François Cartegnie's avatar François Cartegnie committed
    Interfaces from libvlc were started from the main thread directly. But
    UI inserting their own event loop inside the main runloop like Qt were
    taking over the interface insertion. It was preventing other interfaces
    to load correctly, required dedicated code to handle the startup in the
    Qt interface and it was not possible to exit the interface correctly.
    
    By moving the creation of the interfaces in a dedicated thread, we can
    ensure all UI are created and destroyed correctly, but the macosx
    interface must now dispatch its own creation into the main thread to
    match Cocoa requirement on main thread usage for UI components.
    
    Note that libvlc_new itself must be moved to the intf_queue given that
    it starts additional extraintf.
    
    The macosx interface must now start its own NSApp inside the main loop,
    via a dispatch call, which simplify the main loop into running the
    default main loop.
    3a6bd45b
  • Alexandre Janniaux's avatar
    qt: setup startup for Darwin · 9cae3668
    Alexandre Janniaux authored and François Cartegnie's avatar François Cartegnie committed
    Now that the interfaces are not run from the main thread directly, it's
    possible to dispatch the QApplication startup and UI creation to the
    main thread directly on Darwin. It matches the behaviour of the
    interface on other platform that Darwin, where a thread is created to
    handle the interface, except that the thread is already existing as the
    main thread for Darwin.
    
    It means that there won't need any specific code (except for Thread()
    startup) to handle the specificities of the Qt interface startup on
    Darwin anymore.
    
    Ticket #27103 showed issues when leaving the interface with the
    medialibrary, because the path releasing the medialibrary was not taken
    correctly, but other issues could arise, including deadlocks.
    
    Fixes #27103
    9cae3668
......@@ -228,7 +228,10 @@ int main(int i_argc, const char *ppsz_argv[])
/* Handle parameters */
const char *argv[i_argc + 2];
const char **argv = calloc(i_argc + 2, sizeof (argv[0]));
if (argv == NULL)
exit(1);
int argc = 0;
argv[argc++] = "--no-ignore-config";
......@@ -264,22 +267,38 @@ int main(int i_argc, const char *ppsz_argv[])
argc += i_argc;
argv[argc] = NULL;
/* Initialize libvlc */
libvlc_instance_t *vlc = libvlc_new(argc, argv);
if (vlc == NULL)
return 1;
dispatch_queue_t intf_queue = dispatch_queue_create("org.videolan.vlc", NULL);
__block bool intf_started = true;
__block libvlc_instance_t *vlc = NULL;
int ret = 1;
libvlc_SetExitHandler(vlc->p_libvlc_int, vlc_terminate, NULL);
libvlc_set_app_id(vlc, "org.VideoLAN.VLC", PACKAGE_VERSION, PACKAGE_NAME);
libvlc_set_user_agent(vlc, "VLC media player", "VLC/"PACKAGE_VERSION);
dispatch_async(intf_queue, ^{
/* Initialize libvlc */
vlc = libvlc_new(argc, argv);
if (vlc == NULL)
{
dispatch_sync(dispatch_get_main_queue(), ^{
intf_started = false;
CFRunLoopStop(CFRunLoopGetMain());
});
return;
}
if (libvlc_InternalAddIntf(vlc->p_libvlc_int, NULL)) {
fprintf(stderr, "VLC cannot start any interface. Exiting.\n");
goto out;
}
libvlc_SetExitHandler(vlc->p_libvlc_int, vlc_terminate, NULL);
libvlc_set_app_id(vlc, "org.VideoLAN.VLC", PACKAGE_VERSION, PACKAGE_NAME);
libvlc_set_user_agent(vlc, "VLC media player", "VLC/"PACKAGE_VERSION);
if (libvlc_InternalAddIntf(vlc->p_libvlc_int, NULL)) {
fprintf(stderr, "VLC cannot start any interface. Exiting.\n");
dispatch_sync(dispatch_get_main_queue(), ^{
intf_started = false;
CFRunLoopStop(CFRunLoopGetMain());
});
return;
}
libvlc_InternalPlay(vlc->p_libvlc_int);
libvlc_InternalPlay(vlc->p_libvlc_int);
});
/*
* Run the main loop. If the mac interface is not initialized, only the CoreFoundation
......@@ -287,17 +306,18 @@ int main(int i_argc, const char *ppsz_argv[])
* before actually starting the loop.
*/
@autoreleasepool {
if(NSApp == nil) {
CFRunLoopRun();
} else {
[NSApp run];
}
CFRunLoopRun();
}
if (!intf_started)
goto out;
ret = 0;
/* Cleanup */
out:
dispatch_release(intf_queue);
free(argv);
dispatch_release(sigIntSource);
dispatch_release(sigTermSource);
dispatch_release(sigChldSource);
......
......@@ -141,36 +141,49 @@ intf_thread_t *getIntf()
int OpenIntf (vlc_object_t *p_this)
{
@autoreleasepool {
intf_thread_t *p_intf = (intf_thread_t*) p_this;
p_interface_thread = p_intf;
msg_Dbg(p_intf, "Starting macosx interface");
@try {
VLCApplication * const application = VLCApplication.sharedApplication;
NSCAssert(application != nil, @"VLCApplication must not be nil");
VLCMain * const main = VLCMain.sharedInstance;
NSCAssert(main != nil, @"VLCMain must not be nil");
msg_Dbg(p_intf, "Finished loading macosx interface");
return VLC_SUCCESS;
} @catch (NSException *exception) {
msg_Err(p_intf, "Loading the macosx interface failed. Do you have a valid window server?");
return VLC_EGENERIC;
__block int retcode = VLC_SUCCESS;
dispatch_sync(dispatch_get_main_queue(), ^{
@autoreleasepool {
intf_thread_t *p_intf = (intf_thread_t*) p_this;
p_interface_thread = p_intf;
msg_Dbg(p_intf, "Starting macosx interface");
@try {
VLCApplication * const application = VLCApplication.sharedApplication;
NSCAssert(application != nil, @"VLCApplication must not be nil");
VLCMain * const main = VLCMain.sharedInstance;
NSCAssert(main != nil, @"VLCMain must not be nil");
msg_Dbg(p_intf, "Finished loading macosx interface");
} @catch (NSException *exception) {
msg_Err(p_intf, "Loading the macosx interface failed. Do you have a valid window server?");
retcode = VLC_EGENERIC;
return;
}
dispatch_async(dispatch_get_main_queue(), ^{
[NSApp run];
});
}
}
});
return retcode;
}
void CloseIntf (vlc_object_t *p_this)
{
@autoreleasepool {
msg_Dbg(p_this, "Closing macosx interface");
[VLCMain.sharedInstance applicationWillTerminate:nil];
[VLCMain killInstance];
}
p_interface_thread = nil;
void (^release_intf)() = ^{
@autoreleasepool {
msg_Dbg(p_this, "Closing macosx interface");
[VLCMain.sharedInstance applicationWillTerminate:nil];
[VLCMain killInstance];
}
p_interface_thread = nil;
};
if (CFRunLoopGetCurrent() == CFRunLoopGetMain())
release_intf();
else
dispatch_sync(dispatch_get_main_queue(), release_intf);
}
/*****************************************************************************
......
......@@ -536,10 +536,13 @@ static void *Thread( void * );
static void *ThreadCleanup( qt_intf_t *p_intf, CleanupReason cleanupReason );
#ifdef Q_OS_MAC
static void ThreadDarwin(void *);
/* Used to abort the app.exec() on OSX after libvlc_Quit is called */
#include "../../../lib/libvlc_internal.h" /* libvlc_SetExitHandler */
#include <dispatch/dispatch.h>
static void Abort( void *obj )
{
(void)obj;
triggerQuit();
}
#endif
......@@ -579,7 +582,6 @@ static int OpenInternal( qt_intf_t *p_intf )
/* Get the playlist before the lock to avoid a lock-order-inversion */
vlc_playlist_t *playlist = vlc_intf_GetMainPlaylist(p_intf->intf);
#ifndef Q_OS_MAC
vlc::threads::mutex_locker locker (lock);
if (busy || open_state == OPEN_STATE_ERROR)
{
......@@ -587,7 +589,6 @@ static int OpenInternal( qt_intf_t *p_intf )
msg_Err (p_intf, "cannot start Qt multiple times");
return VLC_EGENERIC;
}
#endif
p_intf->p_mi = NULL;
......@@ -599,7 +600,7 @@ static int OpenInternal( qt_intf_t *p_intf )
#ifdef Q_OS_MAC
/* Run mainloop on the main thread as Cocoa requires */
libvlc_SetExitHandler( vlc_object_instance(p_intf), Abort, p_intf );
Thread( (void *)p_intf );
dispatch_async_f(dispatch_get_main_queue(), static_cast<void*>(p_intf), ThreadDarwin);
#else
if( vlc_clone( &p_intf->thread, Thread, p_intf ) )
{
......@@ -610,10 +611,8 @@ static int OpenInternal( qt_intf_t *p_intf )
/* Wait for the interface to be ready. This prevents the main
* LibVLC thread from starting video playback before we can create
* an embedded video window. */
#ifndef Q_OS_MAC
while (open_state == OPEN_STATE_INIT)
wait_ready.wait(lock);
#endif
if (open_state == OPEN_STATE_ERROR)
{
......@@ -1053,15 +1052,6 @@ static void *Thread( void *obj )
open_state = OPEN_STATE_OPENED;
wait_ready.signal();
}
#ifdef Q_OS_MAC
/* We took over main thread, register and start here */
if( !p_intf->b_isDialogProvider )
{
vlc_playlist_Lock( p_intf->p_playlist );
vlc_playlist_Start( p_intf->p_playlist );
vlc_playlist_Unlock( p_intf->p_playlist );
}
#endif
/* Last settings */
app.setQuitOnLastWindowClosed( false );
......@@ -1078,18 +1068,21 @@ static void *Thread( void *obj )
return ThreadCleanup( p_intf, CLEANUP_APP_TERMINATED );
}
#ifdef Q_OS_MAC
static void ThreadDarwin(void *opaque)
{
Thread(opaque);
}
#endif
static void *ThreadCleanup( qt_intf_t *p_intf, CleanupReason cleanupReason )
{
{
#ifndef Q_OS_MAC
vlc::threads::mutex_locker locker (lock);
#endif
if( cleanupReason == CLEANUP_ERROR )
{
open_state = OPEN_STATE_ERROR;
#ifndef Q_OS_MAC
wait_ready.signal();
#endif
}
else
open_state = OPEN_STATE_INIT;
......