vlc_preparser_Deactivate() won't prevent any callbacks to be called, it
will just cancel all pending tasks and ensure no tasks are pushed
anymore. vlc_preparser_Delete() will wait for the executor threads and
prevent callbacks to be called.
Fixes the following use-after-free:
==1190318==ERROR: AddressSanitizer: heap-use-after-free on address 0x517000003fb0 at pc 0x7f1f71dff3e5 bp 0x7f1f6e5feb00 sp 0x7f1f6e5feaf8
READ of size 8 at 0x517000003fb0 thread T2 (vlc-run-searchl)
#0 0x7f1f71dff3e4 in vlc_mutex_held ../../src/misc/threads.c:91
#1 0x7f1f71d5a41c in vlc_player_Lock ../../src/player/player.c:943
#2 0x7f1f71ce9891 in vlc_playlist_Lock ../../src/playlist/playlist.c:101
#3 0x7f1f71ce9d54 in on_preparse_ended ../../src/playlist/preparse.c:99
#4 0x7f1f71cf2c7a in NotifyPreparseEnded ../../src/preparser/preparser.c:153
#5 0x7f1f71cf2d4c in OnArtFetchEnded ../../src/preparser/preparser.c:205
#6 0x7f1f71cf003d in NotifyArtFetchEnded ../../src/preparser/fetcher.c:296
#7 0x7f1f71cf1c0e in RunSearchLocal ../../src/preparser/fetcher.c:393
#8 0x7f1f71debd07 in ThreadRun ../../src/misc/executor.c:134
#9 0x7f1f7205b1d5 in asan_thread_start ../../../../src/libsanitizer/asan/asan_interceptors.cpp:234
#10 0x7f1f7195f111 in start_thread nptl/pthread_create.c:447
#11 0x7f1f719dd8f7 in __clone3 ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
0x517000003fb0 is located 48 bytes inside of 656-byte region [0x517000003f80,0x517000004210)
freed by thread T0 here:
#0 0x7f1f720f3918 in free ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:52
#1 0x7f1f71e0be6f in vlc_object_delete ../../src/misc/objects.c:144
#2 0x7f1f71d5f35e in vlc_player_Delete ../../src/player/player.c:1909
#3 0x7f1f71ce8d9e in vlc_playlist_PlayerDestroy ../../src/playlist/player.c:169
#4 0x7f1f71ce9801 in vlc_playlist_Delete ../../src/playlist/playlist.c:90
#5 0x7f1f71ca8286 in libvlc_InternalCleanup ../../src/libvlc.c:367
#6 0x7f1f71fcc756 in libvlc_release ../../lib/core.c:114
#7 0x560dae321a97 in main ../../bin/vlc.c:275
#8 0x7f1f718f6d67 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
Since the button has no background, it looks fine without border. This
does not change behavior, because border color was not respected by
the tool button anyway.
The updated patch doesn't meet the underlying libavcodec changes.
The VC-1 patch is not needed as the merged version upstream is sufficient.
The MPEG-2 patch is done in a similar way as the VC-1 patch.
Fixes#28855
Some distributions allow installing both Pipewire and PulseAudio, leaving
Pipewire to manage only video devices.
On one hand, if we leave the Pipewire output with higher priority, then we
do not get access to any audio output device in this case. On the other hand,
if we simply probe the PulseAudio output first, then we will never use the
native Pipewire protocol, even if the PulseAudio service is not actually
running, since Pipewire emulates PulseAudio.
So this checks the name of the PulseAudio daemon, and uses the PulseAudio
protocol if and only if the server is not Pipewire.
The timing can now be sent just after pw is starting, the timing
audio_ts will very likely be VLC_TICK_0 (or first_pts).
This fixes video glitches on startup.