alarm/vlc-rpi to 3.0.20-2

This commit is contained in:
graysky 2023-11-02 04:41:05 -04:00
parent b7fb8ac1e9
commit 5317769770
2 changed files with 320 additions and 13 deletions

View file

@ -1,3 +1,38 @@
diff --git a/NEWS b/NEWS
index 2cbc3e00b5..7690f54a53 100644
--- a/NEWS
+++ b/NEWS
@@ -1,21 +1,3 @@
-Changes between 3.0.19 and 3.0.20:
-----------------------------------
-
-Video Output:
- - Fix green line in fullscreen in D3D11 video output
- - Fix crash with some AMD drivers old versions
- - Fix events propagation issue when double-clicking with mouse wheel
-
-Decoders:
- - Fix crash when AV1 hardware decoder fails
-
-Interface:
- - Fix annoying disappearance of the Windows fullscreen controller
-
-Demuxers:
- - Fix potential security issue (OOB Write) on MMS:// by checking user size bounds
-
-
Changes between 3.0.18 and 3.0.19:
----------------------------------
@@ -73,7 +55,7 @@ Misc:
* Fix 5.1/7.1 output on macOS and tvOS
* Fix several crashes and bugs in the macOS preferences panel
* Improvements on the threading of the MMDevice audio output on Windows
- * Fix a potential security issue on the uninstaller DLLs (CVE-2023-46814)
+ * Fix a potential security issue on the uninstaller DLLs
* Fix memory leaks when using the media_list_player libVLC APIs
Translations:
diff --git a/bin/vlc.c b/bin/vlc.c
index 72e0eee428..6d92b95990 100644
--- a/bin/vlc.c
@ -15,9 +50,22 @@ index 72e0eee428..6d92b95990 100644
/*****************************************************************************
diff --git a/configure.ac b/configure.ac
index 753d0610e6..2933715dc6 100644
index 69beb77ac0..2933715dc6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,10 +2,10 @@ dnl Autoconf settings for vlc
AC_COPYRIGHT([Copyright 1999-2023 VLC authors and VideoLAN])
-AC_INIT(vlc, 3.0.20)
+AC_INIT(vlc, 3.0.19)
VERSION_MAJOR=3
VERSION_MINOR=0
-VERSION_REVISION=20
+VERSION_REVISION=19
VERSION_EXTRA=0
VERSION_DEV=
@@ -3083,6 +3083,21 @@ AS_IF([test "${have_gl}" = "yes"], [
dnl OpenGL ES 2: depends on EGL 1.1
PKG_ENABLE_MODULES_VLC([GLES2], [], [glesv2], [OpenGL ES v2 support], [disabled])
@ -76,6 +124,42 @@ index 753d0610e6..2933715dc6 100644
dnl
dnl evas plugin
diff --git a/contrib/src/dav1d/SHA512SUMS b/contrib/src/dav1d/SHA512SUMS
index 737a98e57e..ae01773dff 100644
--- a/contrib/src/dav1d/SHA512SUMS
+++ b/contrib/src/dav1d/SHA512SUMS
@@ -1 +1 @@
-a91d217b8656c452dd80f5597e988f0e7a2ea32b12092c2695e7dc388033db7b193f7a8c98413bec31d1c38af376561d39f7618b935c4feeb6498c5d2b43f6a4 dav1d-1.3.0.tar.xz
+f172eebc0a5f6c51d31fc9e9758c2dd0de51d8a5d0e00c93a5f2b1b16b7b4a37b365f9c56dea95d400e66b63af5fa4c63d9e720719ac38852777fc8c6066e4a7 dav1d-1.2.1.tar.xz
diff --git a/contrib/src/dav1d/rules.mak b/contrib/src/dav1d/rules.mak
index 1a692e41f5..dd009c8dad 100644
--- a/contrib/src/dav1d/rules.mak
+++ b/contrib/src/dav1d/rules.mak
@@ -1,6 +1,6 @@
# libdav1d
-DAV1D_VERSION := 1.3.0
+DAV1D_VERSION := 1.2.1
DAV1D_URL := $(VIDEOLAN)/dav1d/$(DAV1D_VERSION)/dav1d-$(DAV1D_VERSION).tar.xz
PKGS += dav1d
diff --git a/include/vlc_fixups.h b/include/vlc_fixups.h
index 37f7889337..2e8a1456bb 100644
--- a/include/vlc_fixups.h
+++ b/include/vlc_fixups.h
@@ -589,12 +589,6 @@ struct addrinfo
struct addrinfo *ai_next;
};
-# ifdef __LIBCN__
-/* OS/2 LIBCn has inet_pton(). Because of this, socklen_t is not defined above.
- * And OS/2 LIBCn has socklen_t. So include sys/socket.h here for socklen_t. */
-# include <sys/socket.h>
-# endif
-
const char *gai_strerror (int);
int getaddrinfo (const char *node, const char *service,
diff --git a/include/vlc_fourcc.h b/include/vlc_fourcc.h
index 97827bd4c1..76ad846f2f 100644
--- a/include/vlc_fourcc.h
@ -141,6 +225,39 @@ index 53b90a2713..6a29b126e9 100644
include hw/vaapi/Makefile.am
include hw/vdpau/Makefile.am
include keystore/Makefile.am
diff --git a/modules/access/mms/mmsh.c b/modules/access/mms/mmsh.c
index ff598d775f..b032b4c5bb 100644
--- a/modules/access/mms/mmsh.c
+++ b/modules/access/mms/mmsh.c
@@ -927,15 +927,7 @@ static int GetPacket( stream_t * p_access, chunk_t *p_ck )
if( restsize < 8 )
p_ck->i_size2 = 8;
else
- {
p_ck->i_size2 = GetWLE( p_sys->buffer + 10);
- if (p_ck->i_size2 < 8 /* Prevent underflow when set to i_data */
- || p_ck->i_size2 - 8 > BUFFER_SIZE - 12 /* Prevent Out Of Bound Write */)
- {
- msg_Err(p_access, "invalid size2: %" PRIu16, p_ck->i_size2);
- return VLC_EGENERIC;
- }
- }
p_ck->p_data = p_sys->buffer + 12;
p_ck->i_data = p_ck->i_size2 - 8;
diff --git a/modules/access/vcd/cdrom.c b/modules/access/vcd/cdrom.c
index 83ef4388c5..8b719ec532 100644
--- a/modules/access/vcd/cdrom.c
+++ b/modules/access/vcd/cdrom.c
@@ -856,7 +856,7 @@ static int OpenVCDImage( vlc_object_t * p_this, const char *psz_dev,
p_vcddev->i_vcdimage_handle = vlc_open( psz_vcdfile,
O_RDONLY | O_NONBLOCK | O_BINARY );
- while( !b_found && fgets( line, 1024, cuefile ) )
+ while( fgets( line, 1024, cuefile ) && !b_found )
{
/* We have a cue file, but no valid vcd file yet */
char filename[1024];
diff --git a/modules/audio_filter/converter/tospdif.c b/modules/audio_filter/converter/tospdif.c
index 0c725d99e7..8d962d6e81 100644
--- a/modules/audio_filter/converter/tospdif.c
@ -856,7 +973,7 @@ index 0feb03b974..aa3a80f929 100644
#if LIBAVUTIL_VERSION_CHECK(54, 13, 1, 24, 100)
case AV_PIX_FMT_D3D11VA_VLD:
diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
index 55ea1c82fb..c299fe2a38 100644
index 8c892dd3f4..c299fe2a38 100644
--- a/modules/codec/avcodec/video.c
+++ b/modules/codec/avcodec/video.c
@@ -29,6 +29,8 @@
@ -1045,7 +1162,24 @@ index 55ea1c82fb..c299fe2a38 100644
#endif
AV_PIX_FMT_NONE,
};
@@ -814,11 +892,11 @@ failed:
@@ -788,7 +866,7 @@ int InitVideoHwDec( vlc_object_t *obj )
int res = InitVideoDecCommon( p_dec );
if (res != VLC_SUCCESS)
- return res;
+ goto not_usable;
const AVPixFmtDescriptor *src_desc = av_pix_fmt_desc_get(p_context->sw_pix_fmt);
@@ -799,6 +877,7 @@ int InitVideoHwDec( vlc_object_t *obj )
return VLC_SUCCESS;
}
+not_usable:
EndVideoDec(obj);
return VLC_EGENERIC;
failed:
@@ -813,11 +892,11 @@ failed:
* the ffmpeg codec will be opened, some memory allocated. The vout is not yet
* opened (done after the first decoded frame).
*****************************************************************************/
@ -1059,7 +1193,7 @@ index 55ea1c82fb..c299fe2a38 100644
if( p_context == NULL )
return VLC_EGENERIC;
@@ -840,6 +918,27 @@ int InitVideoDec( vlc_object_t *obj )
@@ -839,6 +918,27 @@ int InitVideoDec( vlc_object_t *obj )
return InitVideoDecCommon( p_dec );
}
@ -1087,7 +1221,7 @@ index 55ea1c82fb..c299fe2a38 100644
/*****************************************************************************
* Flush:
*****************************************************************************/
@@ -849,6 +948,8 @@ static void Flush( decoder_t *p_dec )
@@ -848,6 +948,8 @@ static void Flush( decoder_t *p_dec )
AVCodecContext *p_context = p_sys->p_context;
date_Set(&p_sys->pts, VLC_TICK_INVALID); /* To make sure we recover properly */
@ -1096,7 +1230,7 @@ index 55ea1c82fb..c299fe2a38 100644
p_sys->i_late_frames = 0;
p_sys->b_draining = false;
cc_Flush( &p_sys->cc );
@@ -876,6 +977,8 @@ static bool check_block_validity( decoder_sys_t *p_sys, block_t *block )
@@ -875,6 +977,8 @@ static bool check_block_validity( decoder_sys_t *p_sys, block_t *block )
if( block->i_flags & (BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) )
{
date_Set( &p_sys->pts, VLC_TICK_INVALID ); /* To make sure we recover properly */
@ -1105,7 +1239,7 @@ index 55ea1c82fb..c299fe2a38 100644
cc_Flush( &p_sys->cc );
p_sys->i_late_frames = 0;
@@ -1216,6 +1319,10 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
@@ -1215,6 +1319,10 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
}
if( b_has_data )
{
@ -1116,7 +1250,7 @@ index 55ea1c82fb..c299fe2a38 100644
pkt->data = p_block->p_buffer;
pkt->size = p_block->i_buffer;
pkt->pts = p_block->i_pts > VLC_TICK_INVALID ? p_block->i_pts : AV_NOPTS_VALUE;
@@ -1322,6 +1429,17 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
@@ -1321,6 +1429,17 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
if( i_pts == AV_NOPTS_VALUE )
i_pts = date_Get( &p_sys->pts );
@ -1134,7 +1268,7 @@ index 55ea1c82fb..c299fe2a38 100644
/* Interpolate the next PTS */
if( i_pts > VLC_TICK_INVALID )
date_Set( &p_sys->pts, i_pts );
@@ -1374,9 +1492,10 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
@@ -1373,9 +1492,10 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
{ /* When direct rendering is not used, get_format() and get_buffer()
* might not be called. The output video format must be set here
* then picture buffer can be allocated. */
@ -1147,7 +1281,7 @@ index 55ea1c82fb..c299fe2a38 100644
p_pic = decoder_NewPicture(p_dec);
if( !p_pic )
@@ -1769,6 +1888,7 @@ static enum PixelFormat ffmpeg_GetFormat( AVCodecContext *p_context,
@@ -1768,6 +1888,7 @@ static enum PixelFormat ffmpeg_GetFormat( AVCodecContext *p_context,
}
swfmt = defaultfmt;
}
@ -1155,6 +1289,28 @@ index 55ea1c82fb..c299fe2a38 100644
if (p_sys->pix_fmt == AV_PIX_FMT_NONE)
goto no_reuse;
diff --git a/modules/gui/qt/components/controller.cpp b/modules/gui/qt/components/controller.cpp
index 3adfe67c0d..382be37dcc 100644
--- a/modules/gui/qt/components/controller.cpp
+++ b/modules/gui/qt/components/controller.cpp
@@ -1089,7 +1089,7 @@ bool FullscreenControllerWidget::eventFilter( QObject *watched, QEvent *event )
if ( watched == wParent && event->type() == QEvent::ActivationChange )
{
/* Hide if not active */
- if ( !wParent->isActiveWindow() && !isActiveWindow() )
+ if ( !wParent->isActiveWindow() )
hideFSC();
}
@@ -1307,7 +1307,7 @@ void FullscreenControllerWidget::mouseChanged( vout_thread_t *, int i_mousex, in
Q_ASSERT( wParent );
/* Ignore mouse events if not active */
- if ( !wParent->isActiveWindow() && !isActiveWindow() ) return;
+ if ( !wParent->isActiveWindow() ) return;
bool b_toShow;
diff --git a/modules/gui/qt/components/interface_widgets.cpp b/modules/gui/qt/components/interface_widgets.cpp
index 4a0a0dae12..17946c58d6 100644
--- a/modules/gui/qt/components/interface_widgets.cpp
@ -16413,6 +16569,67 @@ index 2709425255..5ac384e633 100644
i_ret = CreateChain( p_filter, &fmt_mid );
es_format_Clean( &fmt_mid );
if( i_ret == VLC_SUCCESS )
diff --git a/modules/video_chroma/d3d11_fmt.c b/modules/video_chroma/d3d11_fmt.c
index 1ca26e8e20..0875af6ea2 100644
--- a/modules/video_chroma/d3d11_fmt.c
+++ b/modules/video_chroma/d3d11_fmt.c
@@ -146,32 +146,21 @@ int D3D11_AllocateShaderView(vlc_object_t *obj, ID3D11Device *d3ddevice,
#if !VLC_WINSTORE_APP
static HKEY GetAdapterRegistry(vlc_object_t *obj, DXGI_ADAPTER_DESC *adapterDesc)
{
- HKEY hDisplayKey, hKey;
+ HKEY hKey;
CHAR key[128];
CHAR szData[256], lookup[256];
DWORD len = 256;
LSTATUS ret;
- ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e968-e325-11ce-bfc1-08002be10318}", 0, KEY_READ, &hDisplayKey);
- if ( ret != ERROR_SUCCESS )
- {
- msg_Warn(obj, "failed to read the Display Adapter registry key (%ld)", ret);
- return NULL;
- }
-
- char DisplayNum[16];
_snprintf(lookup, 256, "pci\\ven_%04x&dev_%04x", adapterDesc->VendorId, adapterDesc->DeviceId);
- for (DWORD k=0;; k++)
+ for (int i=0;;i++)
{
- ret = RegEnumKeyA(hDisplayKey, k, DisplayNum, ARRAY_SIZE(DisplayNum));
- if (ret != ERROR_SUCCESS)
- break;
-
- ret = RegOpenKeyExA(hDisplayKey, DisplayNum, 0, KEY_READ, &hKey);
+ _snprintf(key, 128, "SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e968-e325-11ce-bfc1-08002be10318}\\%04d", i);
+ ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE, key, 0, KEY_READ, &hKey);
if ( ret != ERROR_SUCCESS )
{
- msg_Warn(obj, "failed to read the %s Display Adapter registry key (%ld)", DisplayNum, ret);
- continue;
+ msg_Warn(obj, "failed to read the %d Display Adapter registry key (%ld)", i, ret);
+ return NULL;
}
len = sizeof(szData);
@@ -179,15 +168,13 @@ static HKEY GetAdapterRegistry(vlc_object_t *obj, DXGI_ADAPTER_DESC *adapterDesc
if ( ret == ERROR_SUCCESS ) {
if (_strnicmp(lookup, szData, strlen(lookup)) == 0)
return hKey;
- msg_Dbg(obj, "different %s device %s vs %s", DisplayNum, lookup, szData);
+ msg_Dbg(obj, "different %d device %s vs %s", i, lookup, szData);
}
else
- msg_Warn(obj, "failed to get the %s MatchingDeviceId (%ld)", DisplayNum, ret);
+ msg_Warn(obj, "failed to get the %d MatchingDeviceId (%ld)", i, ret);
RegCloseKey(hKey);
}
- RegCloseKey(hDisplayKey);
-
return NULL;
}
diff --git a/modules/video_output/Makefile.am b/modules/video_output/Makefile.am
index ae48c8e062..270f1a63b8 100644
--- a/modules/video_output/Makefile.am
@ -28591,6 +28808,83 @@ index 08ad5022f9..b1feb622d8 100644
set_callbacks(Open, Close)
add_shortcut("wl")
vlc_module_end()
diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index 9fe576ebad..06aeddeff8 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -122,7 +122,6 @@ struct vout_display_sys_t
d3d11_handle_t hd3d;
IDXGISwapChain1 *dxgiswapChain; /* DXGI 1.2 swap chain */
IDXGISwapChain4 *dxgiswapChain4; /* DXGI 1.5 for HDR */
- DXGI_HDR_METADATA_HDR10 hdr10;
d3d11_device_t d3d_dev;
d3d_quad_t picQuad;
video_format_t quad_fmt;
@@ -1104,11 +1103,7 @@ static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpic
hdr10.MaxMasteringLuminance = picture->format.mastering.max_luminance;
hdr10.MaxContentLightLevel = picture->format.lighting.MaxCLL;
hdr10.MaxFrameAverageLightLevel = picture->format.lighting.MaxFALL;
- if (memcmp(&sys->hdr10, &hdr10, sizeof(hdr10)))
- {
- memcpy(&sys->hdr10, &hdr10, sizeof(hdr10));
- IDXGISwapChain4_SetHDRMetaData(sys->dxgiswapChain4, DXGI_HDR_METADATA_TYPE_HDR10, sizeof(hdr10), &hdr10);
- }
+ IDXGISwapChain4_SetHDRMetaData(sys->dxgiswapChain4, DXGI_HDR_METADATA_TYPE_HDR10, sizeof(hdr10), &hdr10);
}
}
@@ -1575,6 +1570,16 @@ static int Direct3D11Open(vout_display_t *vd, bool external_device)
video_format_Copy(&sys->pool_fmt, &fmt);
+ sys->legacy_shader = sys->d3d_dev.feature_level < D3D_FEATURE_LEVEL_10_0 ||
+ (sys->scaleProc == NULL && !CanUseTextureArray(vd)) ||
+ BogusZeroCopy(vd);
+
+ if (!sys->legacy_shader && is_d3d11_opaque(sys->pool_fmt.i_chroma))
+ {
+ sys->pool_fmt.i_width = (sys->pool_fmt.i_width + 0x7F) & ~0x7F;
+ sys->pool_fmt.i_height = (sys->pool_fmt.i_height + 0x7F) & ~0x7F;
+ }
+ else
if ( sys->picQuad.formatInfo->formatTexture != DXGI_FORMAT_R8G8B8A8_UNORM &&
sys->picQuad.formatInfo->formatTexture != DXGI_FORMAT_B5G6R5_UNORM )
{
@@ -1684,10 +1689,6 @@ static int SetupOutputFormat(vout_display_t *vd, video_format_t *fmt)
InitScaleProcessor(vd);
- sys->legacy_shader = sys->d3d_dev.feature_level < D3D_FEATURE_LEVEL_10_0 ||
- (sys->scaleProc == NULL && !CanUseTextureArray(vd)) ||
- BogusZeroCopy(vd);
-
if (Direct3D11CreateFormatResources(vd, fmt)) {
msg_Err(vd, "Failed to allocate format resources");
return VLC_EGENERIC;
diff --git a/modules/video_output/win32/events.c b/modules/video_output/win32/events.c
index 474142f0fc..476a710529 100644
--- a/modules/video_output/win32/events.c
+++ b/modules/video_output/win32/events.c
@@ -277,9 +277,6 @@ static void *EventThread( void *p_this )
case WM_MBUTTONUP:
MouseReleased( p_event, MOUSE_BUTTON_CENTER );
break;
- case WM_MBUTTONDBLCLK:
- MousePressed( p_event, msg.hwnd, MOUSE_BUTTON_CENTER );
- break;
case WM_RBUTTONDOWN:
MousePressed( p_event, msg.hwnd, MOUSE_BUTTON_RIGHT );
@@ -287,9 +284,6 @@ static void *EventThread( void *p_this )
case WM_RBUTTONUP:
MouseReleased( p_event, MOUSE_BUTTON_RIGHT );
break;
- case WM_RBUTTONDBLCLK:
- MousePressed( p_event, msg.hwnd, MOUSE_BUTTON_RIGHT );
- break;
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
diff --git a/pi-util/README.txt b/pi-util/README.txt
new file mode 100644
index 0000000000..59a8655955
@ -29296,3 +29590,16 @@ index 892d5b7dac..3c75b6450f 100644
assert( p_dst->context == NULL );
diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
index 085067cb40..592c0474ca 100644
--- a/src/video_output/video_output.c
+++ b/src/video_output/video_output.c
@@ -1427,8 +1427,6 @@ static void ThreadChangeWindowMouse(vout_thread_t *vout,
case VOUT_WINDOW_MOUSE_DOUBLE_CLICK:
if (mouse->button_mask == 0)
vout_display_SendEventMouseDoubleClick(vd);
- else
- vout_display_SendEventMousePressed(vd, mouse->button_mask);
break;
default: vlc_assert_unreachable();
break;

View file

@ -10,7 +10,7 @@ _vlcver=3.0.20
# optional fixup version including hyphen
_vlcfixupver=
pkgver=${_vlcver}${_vlcfixupver//-/.r}
pkgrel=1
pkgrel=2
pkgdesc='Multi-platform MPEG, VCD/DVD, and DivX player with hw accel for RPi 3/4/400'
url='https://www.videolan.org/vlc/'
arch=(aarch64)
@ -113,7 +113,7 @@ source=(https://download.videolan.org/${_pkgname}/${_vlcver}/${_pkgname}-${_vlcv
# credit to jc and RPi-Distro maintainers for this work, see:
# https://github.com/jc-kynesim/vlc.git
# https://github.com/RPi-Distro/vlc/tree/bullseye-rpt/debian/patches
0003-dev-3.0.19-port_1.patch
0003-dev-3.0.19-port_1_to_3.0.20.patch
update-vlc-plugin-cache.hook)
sha256sums=('adc7285b4d2721cddf40eb5270cada2aaa10a334cb546fd55a06353447ba29b5'
'SKIP'
@ -121,7 +121,7 @@ sha256sums=('adc7285b4d2721cddf40eb5270cada2aaa10a334cb546fd55a06353447ba29b5'
'be970a020695fdc4d0f968021f057a1cb625eeb6ee62995560e532d61ffb52dc'
'753517a8b88c5950d516f0fe57a3ef169e0665ba7817d4b8d9976c666829a291'
'c47ecb0e8e8c03f8c5451aa12fc2e38e380364c38c411a13aa38b7b41def6989'
'6d0e7b14ae4cd2e490271a8c00cd97027af01eb6e65629f761562bcbd2869980'
'ea721ef759c7fa4b9cc66ea57b4ba02b78e2944049ef39792c1ef2c6082e499f'
'b98043683dd90d3f5a3f501212dfc629839b661100de5ac79fd30cb7b4a06f13')
validpgpkeys=('65F7C6B4206BD057A7EB73787180713BE58D1ADC') # VideoLAN Release Signing Key