diff --git a/.gitignore b/.gitignore index b5fbc0e..1560980 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/vlc-3.0.20.tar.xz +SOURCES/vlc-3.0.21.tar.xz diff --git a/.vlc.metadata b/.vlc.metadata index f2a1d71..2e8ae1f 100644 --- a/.vlc.metadata +++ b/.vlc.metadata @@ -1 +1 @@ -b834516ab701bf6311980ed5d67b77c834fdebe7 SOURCES/vlc-3.0.20.tar.xz +be8557fc2f4be58caebe4a8b1d70f03dc6b95792 SOURCES/vlc-3.0.21.tar.xz diff --git a/SOURCES/4645.patch b/SOURCES/4645.patch deleted file mode 100644 index bd26976..0000000 --- a/SOURCES/4645.patch +++ /dev/null @@ -1,177 +0,0 @@ -From 1e2918115ca2f5c4ffde00dc02ad89525714f6c2 Mon Sep 17 00:00:00 2001 -From: Thomas Guillem -Date: Tue, 5 Dec 2023 09:23:35 +0100 -Subject: [PATCH 1/5] input: fix incompatible-pointer-types assignment - -Fixes #28441 ---- - src/input/input_internal.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/input/input_internal.h b/src/input/input_internal.h -index d29731edca1b..ea02f39f5add 100644 ---- a/src/input/input_internal.h -+++ b/src/input/input_internal.h -@@ -117,7 +117,7 @@ typedef struct input_thread_private_t - - /* Title infos FIXME multi-input (not easy) ? */ - int i_title; -- const input_title_t **title; -+ input_title_t * const *title; - - int i_title_offset; - int i_seekpoint_offset; --- -GitLab - - -From adcf4e66e2ce2c382bb97957c91bfde040f4f3ca Mon Sep 17 00:00:00 2001 -From: Zhao Zhili -Date: Thu, 1 Mar 2018 14:25:59 +0800 -Subject: [PATCH 2/5] yadif: fix variable type - -Signed-off-by: Thomas Guillem -(cherry picked from commit 77b86f4452be4dbe0d56a9cd1b66da61b116da60) -Signed-off-by: Thomas Guillem ---- - modules/video_filter/deinterlace/yadif.h | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/modules/video_filter/deinterlace/yadif.h b/modules/video_filter/deinterlace/yadif.h -index 4bc592ba9307..af16443d0804 100644 ---- a/modules/video_filter/deinterlace/yadif.h -+++ b/modules/video_filter/deinterlace/yadif.h -@@ -140,10 +140,10 @@ static void yadif_filter_line_c(uint8_t *dst, uint8_t *prev, uint8_t *cur, uint8 - } - - static void yadif_filter_line_c_16bit(uint8_t *dst8, uint8_t *prev8, uint8_t *cur8, uint8_t *next8, int w, int prefs, int mrefs, int parity, int mode) { -- uint8_t *dst = (uint8_t *)dst8; -- uint8_t *prev = (uint8_t *)prev8; -- uint8_t *cur = (uint8_t *)cur8; -- uint8_t *next = (uint8_t *)next8; -+ uint16_t *dst = (uint16_t *)dst8; -+ uint16_t *prev = (uint16_t *)prev8; -+ uint16_t *cur = (uint16_t *)cur8; -+ uint16_t *next = (uint16_t *)next8; - int x; - uint16_t *prev2= parity ? prev : cur ; - uint16_t *next2= parity ? cur : next; --- -GitLab - - -From 45198e5328ff2b2f4eb2fb76add0789fec26270f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= -Date: Sun, 3 Mar 2019 09:59:10 +0200 -Subject: [PATCH 3/5] swscale: avoid invalid pointer conversion - -(cherry picked from commit ab00e6c59d42e05ab08893091783d8b5febc0058) -Signed-off-by: Thomas Guillem ---- - modules/video_chroma/swscale.c | 12 ++++++++---- - 1 file changed, 8 insertions(+), 4 deletions(-) - -diff --git a/modules/video_chroma/swscale.c b/modules/video_chroma/swscale.c -index 8993d11ec5dd..11897527355c 100644 ---- a/modules/video_chroma/swscale.c -+++ b/modules/video_chroma/swscale.c -@@ -588,8 +588,9 @@ static void Convert( filter_t *p_filter, struct SwsContext *ctx, - { - filter_sys_t *p_sys = p_filter->p_sys; - uint8_t palette[AVPALETTE_SIZE]; -- uint8_t *src[4]; int src_stride[4]; -- uint8_t *dst[4]; int dst_stride[4]; -+ uint8_t *src[4], *dst[4]; -+ const uint8_t *csrc[4]; -+ int src_stride[4], dst_stride[4]; - - GetPixels( src, src_stride, p_sys->desc_in, &p_filter->fmt_in.video, - p_src, i_plane_count, b_swap_uvi ); -@@ -606,11 +607,14 @@ static void Convert( filter_t *p_filter, struct SwsContext *ctx, - GetPixels( dst, dst_stride, p_sys->desc_out, &p_filter->fmt_out.video, - p_dst, i_plane_count, b_swap_uvo ); - -+ for (size_t i = 0; i < ARRAY_SIZE(src); i++) -+ csrc[i] = src[i]; -+ - #if LIBSWSCALE_VERSION_INT >= ((0<<16)+(5<<8)+0) -- sws_scale( ctx, src, src_stride, 0, i_height, -+ sws_scale( ctx, csrc, src_stride, 0, i_height, - dst, dst_stride ); - #else -- sws_scale_ordered( ctx, src, src_stride, 0, i_height, -+ sws_scale_ordered( ctx, csrc, src_stride, 0, i_height, - dst, dst_stride ); - #endif - } --- -GitLab - - -From 4431076ad4a21fdcabd3f7ef1d61c45891689b0c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= -Date: Sun, 3 Mar 2019 17:20:04 +0200 -Subject: [PATCH 4/5] dynamicoverlay: fix variable shadowing - -(cherry picked from commit d42e05d6b2c061ae352c131d5aebf8c8d8aa6d35) -Signed-off-by: Thomas Guillem ---- - modules/spu/dynamicoverlay/dynamicoverlay_commands.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/modules/spu/dynamicoverlay/dynamicoverlay_commands.c b/modules/spu/dynamicoverlay/dynamicoverlay_commands.c -index a93462925e8a..a85f9aafb0b9 100644 ---- a/modules/spu/dynamicoverlay/dynamicoverlay_commands.c -+++ b/modules/spu/dynamicoverlay/dynamicoverlay_commands.c -@@ -899,12 +899,11 @@ static const commanddesc_static_t p_commands[] = - void RegisterCommand( filter_t *p_filter ) - { - filter_sys_t *p_sys = (filter_sys_t*) p_filter->p_sys; -- size_t i_index = 0; - - p_sys->i_commands = ARRAY_SIZE(p_commands); - p_sys->pp_commands = (commanddesc_t **) calloc( p_sys->i_commands, sizeof(commanddesc_t*) ); - if( !p_sys->pp_commands ) return; -- for( i_index = 0; i_index < p_sys->i_commands; i_index ++ ) -+ for( size_t i_index = 0; i_index < p_sys->i_commands; i_index ++ ) - { - p_sys->pp_commands[i_index] = (commanddesc_t *) malloc( sizeof(commanddesc_t) ); - if( !p_sys->pp_commands[i_index] ) return; --- -GitLab - - -From fda14fc7c013eb75291df10cc8b88336c51328ad Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= -Date: Mon, 26 Feb 2018 20:43:03 +0200 -Subject: [PATCH 5/5] dynamicoverlay: fix memory corruption - -Font alpha is 8-bits, not 32-bits. - -(cherry picked from commit 6f14081af7325d334a53126c4eea52bc30fc08a0) -Signed-off-by: Thomas Guillem ---- - modules/spu/dynamicoverlay/dynamicoverlay_commands.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/modules/spu/dynamicoverlay/dynamicoverlay_commands.c b/modules/spu/dynamicoverlay/dynamicoverlay_commands.c -index a85f9aafb0b9..7a71c6f2373a 100644 ---- a/modules/spu/dynamicoverlay/dynamicoverlay_commands.c -+++ b/modules/spu/dynamicoverlay/dynamicoverlay_commands.c -@@ -234,8 +234,12 @@ static int parser_SetTextAlpha( char *psz_command, char *psz_end, - skip_space( &psz_command ); - if( isdigit( (unsigned char)*psz_command ) ) - { -- if( parse_digit( &psz_command, &p_params->fontstyle.i_font_alpha ) == VLC_EGENERIC ) -+ int32_t value; -+ -+ if( parse_digit( &psz_command, &value ) == VLC_EGENERIC ) - return VLC_EGENERIC; -+ -+ p_params->fontstyle.i_font_alpha = value; - } - return VLC_SUCCESS; - } --- -GitLab - diff --git a/SOURCES/4665.patch b/SOURCES/4665.patch deleted file mode 100644 index 47e5847..0000000 --- a/SOURCES/4665.patch +++ /dev/null @@ -1,375 +0,0 @@ -From 770789f265761fc7ab2de69ca105fec4ad93d9e2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= -Date: Mon, 26 Feb 2018 20:36:29 +0200 -Subject: [PATCH 1/9] chromaprint: missing cast - -(cherry picked from commit 7bd5bab3e43ae187f7219db61ed85d06d2ba0547) -Signed-off-by: Steve Lhomme ---- - modules/stream_out/chromaprint.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/modules/stream_out/chromaprint.c b/modules/stream_out/chromaprint.c -index 80ec31ba2590..c76cbda3c2bb 100644 ---- a/modules/stream_out/chromaprint.c -+++ b/modules/stream_out/chromaprint.c -@@ -231,7 +231,7 @@ static int Send( sout_stream_t *p_stream, sout_stream_id_sys_t *id, - if ( !p_sys->b_finished && id->i_samples > 0 && p_buf->i_buffer ) - { - if(! chromaprint_feed( p_sys->p_chromaprint_ctx, -- p_buf->p_buffer, -+ (int16_t *)p_buf->p_buffer, - p_buf->i_buffer / BYTESPERSAMPLE ) ) - msg_Warn( p_stream, "feed error" ); - id->i_samples -= i_samples; --- -GitLab - - -From 6179d6b843f2a93af6a3d51c4244766e3eba9e77 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= -Date: Sun, 14 Apr 2019 09:41:38 +0300 -Subject: [PATCH 2/9] win32: wrap {g,s}etsockopt() - -char * can alias anything, and Winsock relies on that. Unfortunately, -the compiler still issues warnings. This works around that. - -(cherry picked from commit 36715d9b79f34824e126c2bc3aee2f1c1c16af46) -Signed-off-by: Steve Lhomme ---- - include/vlc_network.h | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/include/vlc_network.h b/include/vlc_network.h -index 010454a01c09..e39ffd0bacaa 100644 ---- a/include/vlc_network.h -+++ b/include/vlc_network.h -@@ -183,6 +183,22 @@ VLC_API int vlc_close(int); - - /** @} */ - -+#ifdef _WIN32 -+static inline int vlc_getsockopt(int s, int level, int name, -+ void *val, socklen_t *len) -+{ -+ return getsockopt(s, level, name, (char *)val, len); -+} -+#define getsockopt vlc_getsockopt -+ -+static inline int vlc_setsockopt(int s, int level, int name, -+ const void *val, socklen_t len) -+{ -+ return setsockopt(s, level, name, (const char *)val, len); -+} -+#define setsockopt vlc_setsockopt -+#endif -+ - /* Portable network names/addresses resolution layer */ - - #define NI_MAXNUMERICHOST 64 --- -GitLab - - -From 3391108f9709f0d77d9297c94371cf9cd30f2cbe Mon Sep 17 00:00:00 2001 -From: Steve Lhomme -Date: Thu, 7 Dec 2023 15:43:04 +0100 -Subject: [PATCH 3/9] netsync: use char for temporary local buffer - -On Windows recvfrom/revc/sendto expects a char*. ---- - modules/control/netsync.c | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - -diff --git a/modules/control/netsync.c b/modules/control/netsync.c -index 2a6a1a6a2bf8..8c91034d7cf2 100644 ---- a/modules/control/netsync.c -+++ b/modules/control/netsync.c -@@ -181,7 +181,7 @@ static void *Master(void *handle) - intf_sys_t *sys = intf->p_sys; - for (;;) { - struct pollfd ufd = { .fd = sys->fd, .events = POLLIN, }; -- uint64_t data[2]; -+ char data[16]; - - if (poll(&ufd, 1, -1) < 0) - continue; -@@ -198,8 +198,8 @@ static void *Master(void *handle) - if (master_system < 0) - continue; - -- data[0] = hton64(mdate()); -- data[1] = hton64(master_system); -+ SetQWBE(&data[0], mdate()); -+ SetQWBE(&data[8], master_system); - - /* Reply to the sender */ - sendto(sys->fd, data, 16, 0, -@@ -224,7 +224,7 @@ static void *Slave(void *handle) - - for (;;) { - struct pollfd ufd = { .fd = sys->fd, .events = POLLIN, }; -- uint64_t data[2]; -+ char data[16]; - - vlc_tick_t system = GetPcrSystem(sys->input); - if (system < 0) -@@ -233,7 +233,7 @@ static void *Slave(void *handle) - /* Send clock request to the master */ - const vlc_tick_t send_date = mdate(); - -- data[0] = hton64(system); -+ SetQWBE(&data[0], system); - send(sys->fd, data, 8, 0); - - /* Don't block */ -@@ -244,8 +244,8 @@ static void *Slave(void *handle) - if (recv(sys->fd, data, 16, 0) < 16) - goto wait; - -- const vlc_tick_t master_date = ntoh64(data[0]); -- const vlc_tick_t master_system = ntoh64(data[1]); -+ const vlc_tick_t master_date = GetQWBE(&data[0]); -+ const vlc_tick_t master_system = GetQWBE(&data[8]); - const vlc_tick_t diff_date = receive_date - - ((receive_date - send_date) / 2 + master_date); - --- -GitLab - - -From 27e584d7b9add8dbbb82b7227228e1ec1e25a089 Mon Sep 17 00:00:00 2001 -From: Steve Lhomme -Date: Tue, 3 Jan 2023 13:23:00 +0100 -Subject: [PATCH 4/9] access/dtv: move the lfind() Windows hack in the module - -So that we don't have to include search.h each time vlc_fixups.h is used. - -The Win32 prototype of lfind() expects an unsigned* for 'nelp', not a size_t*. - -(cherry picked from commit 7c43bcba27b6fe256456d93a9d32e10648f08da8) -Signed-off-by: Steve Lhomme ---- - include/vlc_fixups.h | 3 +++ - modules/access/dtv/access.c | 5 +++++ - 2 files changed, 8 insertions(+) - -diff --git a/include/vlc_fixups.h b/include/vlc_fixups.h -index 37f788933779..861cb4cc5063 100644 ---- a/include/vlc_fixups.h -+++ b/include/vlc_fixups.h -@@ -501,8 +501,11 @@ void *tsearch( const void *key, void **rootp, int(*cmp)(const void *, const void - void *tfind( const void *key, const void **rootp, int(*cmp)(const void *, const void *) ); - void *tdelete( const void *key, void **rootp, int(*cmp)(const void *, const void *) ); - void twalk( const void *root, void(*action)(const void *nodep, VISIT which, int depth) ); -+#ifndef _WIN32 -+/* the Win32 prototype of lfind() expects an unsigned* for 'nmemb' */ - void *lfind( const void *key, const void *base, size_t *nmemb, - size_t size, int(*cmp)(const void *, const void *) ); -+#endif - #endif /* HAVE_SEARCH_H */ - #ifndef HAVE_TDESTROY - void tdestroy( void *root, void (*free_node)(void *nodep) ); -diff --git a/modules/access/dtv/access.c b/modules/access/dtv/access.c -index d9756c7b4885..c6ca5005883c 100644 ---- a/modules/access/dtv/access.c -+++ b/modules/access/dtv/access.c -@@ -32,6 +32,11 @@ - #ifdef HAVE_SEARCH_H - #include - #endif -+#if defined(_WIN32) -+/* the Win32 prototype of lfind() expects an unsigned* for 'nelp' */ -+# define lfind(a,b,c,d,e) \ -+ lfind((a),(b), &(unsigned){ (*(c) > UINT_MAX) ? UINT_MAX : *(c) }, (d),(e)) -+#endif - - #include "dtv/dtv.h" - --- -GitLab - - -From 5a9ca37a95b6e85e6beaaefba9aa4a886a45411c Mon Sep 17 00:00:00 2001 -From: Steve Lhomme -Date: Mon, 15 Jul 2019 12:41:29 +0200 -Subject: [PATCH 5/9] vlc_common: fix swab() calls on win32 that don't use - const on source pointer - -(cherry picked from commit a9e0b1124e19225b903a2926951781e84002c410) -Signed-off-by: Steve Lhomme ---- - include/vlc_common.h | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/include/vlc_common.h b/include/vlc_common.h -index 8090b277150d..089878581763 100644 ---- a/include/vlc_common.h -+++ b/include/vlc_common.h -@@ -947,6 +947,11 @@ static inline void SetQWLE (void *p, uint64_t qw) - # define O_NONBLOCK 0 - # endif - -+/* the mingw32 swab() and win32 _swab() prototypes expect a char* instead of a -+ const void* */ -+# define swab(a,b,c) swab((char*) (a), (char*) (b), (c)) -+ -+ - # include - #endif /* _WIN32 */ - --- -GitLab - - -From b758e19479a80604e3feb470b197e4a13a203a85 Mon Sep 17 00:00:00 2001 -From: Steve Lhomme -Date: Wed, 10 Jul 2019 08:23:45 +0200 -Subject: [PATCH 6/9] avcodec: encoder: fix MPEG4 matrix passed as const - -lavc expects a pointer that it will free in avcodec_free_context(). - -(cherry picked from commit d86c4c87aa78130a4fd00294e25df865d0e2b327) -Signed-off-by: Steve Lhomme ---- - modules/codec/avcodec/encoder.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c -index 2b1c3604713d..4919ccf0e0e4 100644 ---- a/modules/codec/avcodec/encoder.c -+++ b/modules/codec/avcodec/encoder.c -@@ -588,8 +588,14 @@ int InitVideoEnc( vlc_object_t *p_this ) - - if ( p_sys->b_mpeg4_matrix ) - { -- p_context->intra_matrix = mpeg4_default_intra_matrix; -- p_context->inter_matrix = mpeg4_default_non_intra_matrix; -+ p_context->intra_matrix = av_malloc( sizeof(mpeg4_default_intra_matrix) ); -+ if ( p_context->intra_matrix ) -+ memcpy( p_context->intra_matrix, mpeg4_default_intra_matrix, -+ sizeof(mpeg4_default_intra_matrix)); -+ p_context->inter_matrix = av_malloc( sizeof(mpeg4_default_non_intra_matrix) ); -+ if ( p_context->inter_matrix ) -+ memcpy( p_context->inter_matrix, mpeg4_default_non_intra_matrix, -+ sizeof(mpeg4_default_non_intra_matrix)); - } - - if ( p_sys->b_pre_me ) --- -GitLab - - -From 55be3ce60795a09d13861c5637c1fe7aebc5ce8b Mon Sep 17 00:00:00 2001 -From: Steve Lhomme -Date: Thu, 7 Dec 2023 14:18:22 +0100 -Subject: [PATCH 7/9] smb: fix potential string to wide string copy - -The type of net_resource depends on the UNICODE define. ---- - modules/access/smb.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/modules/access/smb.c b/modules/access/smb.c -index 5fe56f0c9dfe..6add2a3e6278 100644 ---- a/modules/access/smb.c -+++ b/modules/access/smb.c -@@ -524,7 +524,7 @@ static void Win32AddConnection( stream_t *p_access, const char *psz_server, - const char *psz_pwd, const char *psz_domain ) - { - char psz_remote[MAX_PATH]; -- NETRESOURCE net_resource; -+ NETRESOURCEA net_resource; - DWORD i_result; - VLC_UNUSED( psz_domain ); - -@@ -544,7 +544,7 @@ static void Win32AddConnection( stream_t *p_access, const char *psz_server, - - net_resource.lpRemoteName = psz_remote; - -- i_result = WNetAddConnection2( &net_resource, psz_pwd, psz_user, 0 ); -+ i_result = WNetAddConnection2A( &net_resource, psz_pwd, psz_user, 0 ); - - if( i_result != NO_ERROR ) - { --- -GitLab - - -From 5ae924bf212dce64a6424561d92426dbcc2cf3a0 Mon Sep 17 00:00:00 2001 -From: Steve Lhomme -Date: Wed, 6 Dec 2023 14:45:46 +0100 -Subject: [PATCH 8/9] dxva2: add missing mask initializers - ---- - modules/codec/avcodec/dxva2.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c -index 18b872fe0fe3..2e6809a05410 100644 ---- a/modules/codec/avcodec/dxva2.c -+++ b/modules/codec/avcodec/dxva2.c -@@ -84,12 +84,12 @@ DEFINE_GUID(DXVA_Intel_H264_NoFGT_ClearVideo, 0x604F8E68, 0x4951, 0x4c54, - - /* XXX Preferred format must come first */ - static const d3d9_format_t d3d_formats[] = { -- { "YV12", MAKEFOURCC('Y','V','1','2'), VLC_CODEC_YV12 }, -- { "NV12", MAKEFOURCC('N','V','1','2'), VLC_CODEC_NV12 }, -- //{ "IMC3", MAKEFOURCC('I','M','C','3'), VLC_CODEC_YV12 }, -- { "P010", MAKEFOURCC('P','0','1','0'), VLC_CODEC_P010 }, -+ { "YV12", MAKEFOURCC('Y','V','1','2'), VLC_CODEC_YV12, 0,0,0 }, -+ { "NV12", MAKEFOURCC('N','V','1','2'), VLC_CODEC_NV12, 0,0,0 }, -+ //{ "IMC3", MAKEFOURCC('I','M','C','3'), VLC_CODEC_YV12, 0,0,0 }, -+ { "P010", MAKEFOURCC('P','0','1','0'), VLC_CODEC_P010, 0,0,0 }, - -- { NULL, 0, 0 } -+ { NULL, 0, 0, 0,0,0 } - }; - - static const d3d9_format_t *D3dFindFormat(D3DFORMAT format) --- -GitLab - - -From 08c7a66780740679ba1b0abe9e30e73afc6bc271 Mon Sep 17 00:00:00 2001 -From: Steve Lhomme -Date: Wed, 6 Dec 2023 07:48:29 +0100 -Subject: [PATCH 9/9] win32/modules: use cast with GetProcAddress function - pointers - ---- - src/text/url.c | 3 ++- - src/win32/plugin.c | 3 ++- - 2 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/src/text/url.c b/src/text/url.c -index b962eb31f849..2eb4b8d10817 100644 ---- a/src/text/url.c -+++ b/src/text/url.c -@@ -892,7 +892,8 @@ static int IdnToAscii(DWORD flags, LPCWSTR str, int len, LPWSTR buf, int size) - int (WINAPI *IdnToAsciiReal)(DWORD, LPCWSTR, int, LPWSTR, int); - int ret = 0; - -- IdnToAsciiReal = GetProcAddress(h, "IdnToAscii"); -+ IdnToAsciiReal = (int (WINAPI *)(DWORD, LPCWSTR, int, LPWSTR, int)) -+ GetProcAddress(h, "IdnToAscii"); - if (IdnToAsciiReal != NULL) - ret = IdnToAsciiReal(flags, str, len, buf, size); - else -diff --git a/src/win32/plugin.c b/src/win32/plugin.c -index 1a65521fca75..b5c336eb99ca 100644 ---- a/src/win32/plugin.c -+++ b/src/win32/plugin.c -@@ -45,7 +45,8 @@ static BOOL WINAPI SetThreadErrorModeFallback(DWORD mode, DWORD *oldmode) - - BOOL (WINAPI *SetThreadErrorModeReal)(DWORD, DWORD *); - -- SetThreadErrorModeReal = GetProcAddress(h, "SetThreadErrorMode"); -+ SetThreadErrorModeReal = (BOOL (WINAPI *)(DWORD, DWORD *)) -+ GetProcAddress(h, "SetThreadErrorMode"); - if (SetThreadErrorModeReal != NULL) - return SetThreadErrorModeReal(mode, oldmode); - --- -GitLab - diff --git a/SOURCES/5574.patch b/SOURCES/5574.patch new file mode 100644 index 0000000..ab0c395 --- /dev/null +++ b/SOURCES/5574.patch @@ -0,0 +1,853 @@ +From a4645b577c71e58db09ee6888f270fb3d0cfd61e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= +Date: Sat, 5 May 2018 15:28:15 +0300 +Subject: [PATCH 01/11] avcodec: avoid signedness mismatch warning + +Bitmask should be unsigned, but ffmpeg seems confused with itself. + +(cherry picked from commit 8544233e7fde2965435e32a445494898440ecc30) +--- + modules/codec/avcodec/audio.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules/codec/avcodec/audio.c b/modules/codec/avcodec/audio.c +index 50a76c7a18e1..e5af0ca5f2f8 100644 +--- a/modules/codec/avcodec/audio.c ++++ b/modules/codec/avcodec/audio.c +@@ -593,9 +593,9 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust ) + uint32_t pi_order_src[i_order_max]; + + int i_channels_src = 0; +- int64_t channel_layout = ++ uint64_t channel_layout = + p_sys->p_context->channel_layout ? p_sys->p_context->channel_layout : +- av_get_default_channel_layout( p_sys->p_context->channels ); ++ (uint64_t)av_get_default_channel_layout( p_sys->p_context->channels ); + + if( channel_layout ) + { +-- +GitLab + + +From 2d51293c3f8e0bfa2b73112acf4dacb62b40ac57 Mon Sep 17 00:00:00 2001 +From: Ilkka Ollakka +Date: Wed, 5 Jul 2023 12:51:34 +0300 +Subject: [PATCH 02/11] avcodec: use p_dec->fmt_out instead of context channels + on audio channel-count + +reduces the need of ifdefs when adding ch_layout support + +(cherry picked from commit bddf5ba19111d1cc4463d9876c4bc4ba75f82d7f) +--- + modules/codec/avcodec/audio.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/modules/codec/avcodec/audio.c b/modules/codec/avcodec/audio.c +index e5af0ca5f2f8..26166c084e51 100644 +--- a/modules/codec/avcodec/audio.c ++++ b/modules/codec/avcodec/audio.c +@@ -484,15 +484,15 @@ static block_t * ConvertAVFrame( decoder_t *p_dec, AVFrame *frame ) + /* Interleave audio if required */ + if( av_sample_fmt_is_planar( ctx->sample_fmt ) ) + { +- p_block = block_Alloc(frame->linesize[0] * ctx->channels); ++ p_block = block_Alloc(frame->linesize[0] * p_dec->fmt_out.audio.i_channels ); + if ( likely(p_block) ) + { +- const void *planes[ctx->channels]; +- for (int i = 0; i < ctx->channels; i++) ++ const void *planes[p_dec->fmt_out.audio.i_channels]; ++ for (int i = 0; i < p_dec->fmt_out.audio.i_channels; i++) + planes[i] = frame->extended_data[i]; + + aout_Interleave(p_block->p_buffer, planes, frame->nb_samples, +- ctx->channels, p_dec->fmt_out.audio.i_format); ++ p_dec->fmt_out.audio.i_channels, p_dec->fmt_out.audio.i_format); + p_block->i_nb_samples = frame->nb_samples; + } + av_frame_free(&frame); +@@ -511,7 +511,7 @@ static block_t * ConvertAVFrame( decoder_t *p_dec, AVFrame *frame ) + { + aout_ChannelExtract( p_buffer->p_buffer, + p_dec->fmt_out.audio.i_channels, +- p_block->p_buffer, ctx->channels, ++ p_block->p_buffer, p_dec->fmt_out.audio.i_channels, + p_block->i_nb_samples, p_sys->pi_extraction, + p_dec->fmt_out.audio.i_bitspersample ); + p_buffer->i_nb_samples = p_block->i_nb_samples; +@@ -600,13 +600,13 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust ) + if( channel_layout ) + { + for( unsigned i = 0; i < i_order_max +- && i_channels_src < p_sys->p_context->channels; i++ ) ++ && i_channels_src < p_dec->fmt_out.audio.i_channels; i++ ) + { + if( channel_layout & pi_channels_map[i][0] ) + pi_order_src[i_channels_src++] = pi_channels_map[i][1]; + } + +- if( i_channels_src != p_sys->p_context->channels && b_trust ) ++ if( i_channels_src != p_dec->fmt_out.audio.i_channels && b_trust ) + msg_Err( p_dec, "Channel layout not understood" ); + + /* Detect special dual mono case */ +-- +GitLab + + +From 1e5bd8a6f5fbf2c07071cefb1b24aceff058760d Mon Sep 17 00:00:00 2001 +From: Ilkka Ollakka +Date: Wed, 5 Jul 2023 13:33:09 +0300 +Subject: [PATCH 03/11] avcodec: audio decoder to use ch_layout + +(cherry picked from commit 496f0f2a659c1339d1e37330d446e9b6ce96e76b) +--- + modules/codec/avcodec/audio.c | 42 ++++++++++++++++++++++++++++------- + 1 file changed, 34 insertions(+), 8 deletions(-) + +diff --git a/modules/codec/avcodec/audio.c b/modules/codec/avcodec/audio.c +index 26166c084e51..ad8a40ab4ed6 100644 +--- a/modules/codec/avcodec/audio.c ++++ b/modules/codec/avcodec/audio.c +@@ -139,7 +139,11 @@ static int OpenAudioCodec( decoder_t *p_dec ) + } + + ctx->sample_rate = p_dec->fmt_in.audio.i_rate; ++#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100) ++ av_channel_layout_default( &ctx->ch_layout, p_dec->fmt_in.audio.i_channels ); ++#else + ctx->channels = p_dec->fmt_in.audio.i_channels; ++#endif + ctx->block_align = p_dec->fmt_in.audio.i_blockalign; + ctx->bit_rate = p_dec->fmt_in.i_bitrate; + ctx->bits_per_coded_sample = p_dec->fmt_in.audio.i_bitspersample; +@@ -395,12 +399,17 @@ static int DecodeBlock( decoder_t *p_dec, block_t **pp_block ) + ret = avcodec_receive_frame( ctx, frame ); + if( ret == 0 ) + { ++#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100) ++ int channels = frame->ch_layout.nb_channels; ++#else ++ int channels = ctx->channels; ++#endif + /* checks and init from first decoded frame */ +- if( ctx->channels <= 0 || ctx->channels > INPUT_CHAN_MAX ++ if( channels <= 0 || channels > INPUT_CHAN_MAX + || ctx->sample_rate <= 0 ) + { + msg_Warn( p_dec, "invalid audio properties channels count %d, sample rate %d", +- ctx->channels, ctx->sample_rate ); ++ channels, ctx->sample_rate ); + goto drop; + } + else if( p_dec->fmt_out.audio.i_rate != (unsigned int)ctx->sample_rate ) +@@ -580,6 +589,16 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust ) + p_dec->fmt_out.audio.i_rate = p_sys->p_context->sample_rate; + + /* */ ++#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100) ++ if( p_sys->i_previous_channels == p_sys->p_context->ch_layout.nb_channels && ++ p_sys->i_previous_layout == p_sys->p_context->ch_layout.u.mask ) ++ return; ++ if( b_trust ) ++ { ++ p_sys->i_previous_channels = p_sys->p_context->ch_layout.nb_channels; ++ p_sys->i_previous_layout = p_sys->p_context->ch_layout.u.mask; ++ } ++#else + if( p_sys->i_previous_channels == p_sys->p_context->channels && + p_sys->i_previous_layout == p_sys->p_context->channel_layout ) + return; +@@ -588,25 +607,32 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust ) + p_sys->i_previous_channels = p_sys->p_context->channels; + p_sys->i_previous_layout = p_sys->p_context->channel_layout; + } ++#endif + + const unsigned i_order_max = sizeof(pi_channels_map)/sizeof(*pi_channels_map); + uint32_t pi_order_src[i_order_max]; + + int i_channels_src = 0; +- uint64_t channel_layout = ++#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100) ++ uint64_t channel_layout_mask = p_sys->p_context->ch_layout.u.mask; ++ int channel_count = p_sys->p_context->ch_layout.nb_channels; ++#else ++ uint64_t channel_layout_mask = + p_sys->p_context->channel_layout ? p_sys->p_context->channel_layout : + (uint64_t)av_get_default_channel_layout( p_sys->p_context->channels ); ++ int channel_count = p_sys->p_context->channels; ++#endif + +- if( channel_layout ) ++ if( channel_layout_mask ) + { + for( unsigned i = 0; i < i_order_max +- && i_channels_src < p_dec->fmt_out.audio.i_channels; i++ ) ++ && i_channels_src < channel_count; i++ ) + { +- if( channel_layout & pi_channels_map[i][0] ) ++ if( channel_layout_mask & pi_channels_map[i][0] ) + pi_order_src[i_channels_src++] = pi_channels_map[i][1]; + } + +- if( i_channels_src != p_dec->fmt_out.audio.i_channels && b_trust ) ++ if( i_channels_src != channel_count && b_trust ) + msg_Err( p_dec, "Channel layout not understood" ); + + /* Detect special dual mono case */ +@@ -638,7 +664,7 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust ) + { + msg_Warn( p_dec, "no channel layout found"); + p_dec->fmt_out.audio.i_physical_channels = 0; +- p_dec->fmt_out.audio.i_channels = p_sys->p_context->channels; ++ p_dec->fmt_out.audio.i_channels = channel_count; + } + + aout_FormatPrepare( &p_dec->fmt_out.audio ); +-- +GitLab + + +From 1fbf3f028cffed87cb257a45668760370db267cf Mon Sep 17 00:00:00 2001 +From: Ilkka Ollakka +Date: Tue, 4 Jul 2023 16:52:38 +0300 +Subject: [PATCH 04/11] avcodec: use p_enc audio channels instead of context + channels in encoder + +Allows to have less conditions in code when adding new ch_layout use + +(cherry-picked from commit 29747a8abb98ba53a64aa6761983891eeed2e0e4) +--- + modules/codec/avcodec/encoder.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c +index 4919ccf0e0e4..52848de06587 100644 +--- a/modules/codec/avcodec/encoder.c ++++ b/modules/codec/avcodec/encoder.c +@@ -790,7 +790,7 @@ int InitVideoEnc( vlc_object_t *p_this ) + } + } + } +- if( i_channels_src != p_context->channels ) ++ if( i_channels_src != p_enc->fmt_out.audio.i_channels ) + msg_Err( p_enc, "Channel layout not understood" ); + + p_sys->i_channels_to_reorder = +@@ -897,7 +897,7 @@ int InitVideoEnc( vlc_object_t *p_this ) + if( ret ) + { + if( p_enc->fmt_in.i_cat != AUDIO_ES || +- (p_context->channels <= 2 && i_codec_id != AV_CODEC_ID_MP2 ++ (p_enc->fmt_out.audio.i_channels <= 2 && i_codec_id != AV_CODEC_ID_MP2 + && i_codec_id != AV_CODEC_ID_MP3) ) + errmsg: + { +@@ -922,7 +922,7 @@ errmsg: + goto error; + } + +- if( p_context->channels > 2 ) ++ if( p_enc->fmt_out.audio.i_channels > 2 ) + { + p_context->channels = 2; + p_context->channel_layout = channel_mask[p_context->channels][1]; +@@ -1028,7 +1028,7 @@ errmsg: + p_context->frame_size : + AV_INPUT_BUFFER_MIN_SIZE; + p_sys->i_buffer_out = av_samples_get_buffer_size(NULL, +- p_sys->p_context->channels, p_sys->i_frame_size, ++ p_enc->fmt_out.audio.i_channels, p_sys->i_frame_size, + p_sys->p_context->sample_fmt, DEFAULT_ALIGN); + p_sys->p_buffer = av_malloc( p_sys->i_buffer_out ); + if ( unlikely( p_sys->p_buffer == NULL ) ) +@@ -1278,7 +1278,7 @@ static block_t *handle_delay_buffer( encoder_t *p_enc, encoder_sys_t *p_sys, uns + { + block_t *p_block = NULL; + //How much we need to copy from new packet +- const size_t leftover = leftover_samples * p_sys->p_context->channels * p_sys->i_sample_bytes; ++ const size_t leftover = leftover_samples * p_enc->fmt_out.audio.i_channels * p_sys->i_sample_bytes; + + av_frame_unref( p_sys->frame ); + p_sys->frame->format = p_sys->p_context->sample_fmt; +@@ -1301,7 +1301,7 @@ static block_t *handle_delay_buffer( encoder_t *p_enc, encoder_sys_t *p_sys, uns + // We need to deinterleave from p_aout_buf to p_buffer the leftover bytes + if( p_sys->b_planar ) + aout_Deinterleave( p_sys->p_interleave_buf, p_sys->p_buffer, +- p_sys->i_frame_size, p_sys->p_context->channels, p_enc->fmt_in.i_codec ); ++ p_sys->i_frame_size, p_enc->fmt_out.audio.i_channels, p_enc->fmt_in.i_codec ); + else + memcpy( p_sys->p_buffer + buffer_delay, p_aout_buf->p_buffer, leftover); + +@@ -1319,7 +1319,7 @@ static block_t *handle_delay_buffer( encoder_t *p_enc, encoder_sys_t *p_sys, uns + memset( p_sys->p_buffer + (leftover+buffer_delay), 0, padding_size ); + buffer_delay += padding_size; + } +- if( avcodec_fill_audio_frame( p_sys->frame, p_sys->p_context->channels, ++ if( avcodec_fill_audio_frame( p_sys->frame, p_enc->fmt_out.audio.i_channels, + p_sys->p_context->sample_fmt, p_sys->b_planar ? p_sys->p_interleave_buf : p_sys->p_buffer, + p_sys->i_buffer_out, + DEFAULT_ALIGN) < 0 ) +@@ -1349,7 +1349,7 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf ) + + //i_bytes_left is amount of bytes we get + i_samples_left = p_aout_buf ? p_aout_buf->i_nb_samples : 0; +- buffer_delay = p_sys->i_samples_delay * p_sys->i_sample_bytes * p_sys->p_context->channels; ++ buffer_delay = p_sys->i_samples_delay * p_sys->i_sample_bytes * p_enc->fmt_out.audio.i_channels; + + //p_sys->i_buffer_out = p_sys->i_frame_size * chan * p_sys->i_sample_bytes + //Calculate how many bytes we would need from current buffer to fill frame +@@ -1418,12 +1418,12 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf ) + p_sys->frame->channels = p_sys->p_context->channels; + + const int in_bytes = p_sys->frame->nb_samples * +- p_sys->p_context->channels * p_sys->i_sample_bytes; ++ p_enc->fmt_out.audio.i_channels* p_sys->i_sample_bytes; + + if( p_sys->b_planar ) + { + aout_Deinterleave( p_sys->p_buffer, p_aout_buf->p_buffer, +- p_sys->frame->nb_samples, p_sys->p_context->channels, p_enc->fmt_in.i_codec ); ++ p_sys->frame->nb_samples, p_enc->fmt_out.audio.i_channels, p_enc->fmt_in.i_codec ); + + } + else +@@ -1431,7 +1431,7 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf ) + memcpy(p_sys->p_buffer, p_aout_buf->p_buffer, in_bytes); + } + +- if( avcodec_fill_audio_frame( p_sys->frame, p_sys->p_context->channels, ++ if( avcodec_fill_audio_frame( p_sys->frame, p_enc->fmt_out.audio.i_channels, + p_sys->p_context->sample_fmt, + p_sys->p_buffer, + p_sys->i_buffer_out, +@@ -1457,7 +1457,7 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf ) + if( p_aout_buf->i_nb_samples > 0 ) + { + memcpy( p_sys->p_buffer + buffer_delay, p_aout_buf->p_buffer, +- p_aout_buf->i_nb_samples * p_sys->i_sample_bytes * p_sys->p_context->channels); ++ p_aout_buf->i_nb_samples * p_sys->i_sample_bytes * p_enc->fmt_out.audio.i_channels); + p_sys->i_samples_delay += p_aout_buf->i_nb_samples; + } + +-- +GitLab + + +From a1a3edd4eacc813e5b4c3a6f353b92f4069fbc1a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fran=C3=A7ois=20Cartegnie?= +Date: Tue, 23 Apr 2024 13:13:30 +0700 +Subject: [PATCH 05/11] codec: avcodec: map AYUV as RAWVIDEO with ffmpeg 6.0 + +(cherry picked from commit 955ef939467a628eb8da08e0d5eaefc9a3484cba) +--- + modules/codec/avcodec/fourcc.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/modules/codec/avcodec/fourcc.c b/modules/codec/avcodec/fourcc.c +index 33c6cae09abc..97f3188211d3 100644 +--- a/modules/codec/avcodec/fourcc.c ++++ b/modules/codec/avcodec/fourcc.c +@@ -182,8 +182,12 @@ static const struct vlc_avcodec_fourcc video_codecs[] = + /* AV_CODEC_ID_V210X */ + { VLC_CODEC_TMV, AV_CODEC_ID_TMV }, + { VLC_CODEC_V210, AV_CODEC_ID_V210 }, +-#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 54, 50, 100 ) && LIBAVCODEC_VERSION_MICRO >= 100 ++#if LIBAVCODEC_VERSION_MICRO >= 100 ++# if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 42, 102 ) ++ { VLC_CODEC_VUYA, AV_CODEC_ID_RAWVIDEO }, ++# elif LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 54, 50, 100 ) + { VLC_CODEC_VUYA, AV_CODEC_ID_AYUV }, ++# endif + #endif + /* AV_CODEC_ID_DPX */ + { VLC_CODEC_MAD, AV_CODEC_ID_MAD }, +-- +GitLab + + +From da6f67588dacf60c7563fd720cc75e1912215a45 Mon Sep 17 00:00:00 2001 +From: Francois Cartegnie +Date: Thu, 13 Jun 2024 12:21:58 +0700 +Subject: [PATCH 06/11] avcodec: encoder: fix channel_layout conditionals + +--- + modules/codec/avcodec/encoder.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c +index 52848de06587..6bd58f5071d2 100644 +--- a/modules/codec/avcodec/encoder.c ++++ b/modules/codec/avcodec/encoder.c +@@ -43,12 +43,13 @@ + #include + + #include +-#include + + #include "avcodec.h" + #include "avcommon.h" + +-#if LIBAVUTIL_VERSION_CHECK( 52,2,6,0,0 ) ++#define API_CHANNEL_LAYOUT (LIBAVUTIL_VERSION_CHECK( 52, 2, 6, 0, 100)) ++ ++#if API_CHANNEL_LAYOUT + # include + #endif + +@@ -157,6 +158,7 @@ struct encoder_sys_t + + + /* Taken from audio.c*/ ++#if API_CHANNEL_LAYOUT + static const uint64_t pi_channels_map[][2] = + { + { AV_CH_FRONT_LEFT, AOUT_CHAN_LEFT }, +@@ -193,6 +195,7 @@ static const uint32_t channel_mask[][2] = { + {AOUT_CHANS_7_1, AV_CH_LAYOUT_7POINT1}, + {AOUT_CHANS_8_1, AV_CH_LAYOUT_OCTAGONAL}, + }; ++#endif + + static const char *const ppsz_enc_options[] = { + "keyint", "bframes", "vt", "qmin", "qmax", "codec", "hq", +@@ -746,7 +749,7 @@ int InitVideoEnc( vlc_object_t *p_this ) + p_context->time_base.num = 1; + p_context->time_base.den = p_context->sample_rate; + p_context->channels = p_enc->fmt_out.audio.i_channels; +-#if LIBAVUTIL_VERSION_CHECK( 52, 2, 6, 0, 0) ++#if API_CHANNEL_LAYOUT + p_context->channel_layout = channel_mask[p_context->channels][1]; + + /* Setup Channel ordering for multichannel audio +@@ -925,7 +928,9 @@ errmsg: + if( p_enc->fmt_out.audio.i_channels > 2 ) + { + p_context->channels = 2; ++#if API_CHANNEL_LAYOUT + p_context->channel_layout = channel_mask[p_context->channels][1]; ++#endif + + /* Change fmt_in in order to ask for a channels conversion */ + p_enc->fmt_in.audio.i_channels = +-- +GitLab + + +From 8e2d209d0897138ba13372ab49c0ee7cef7c316c Mon Sep 17 00:00:00 2001 +From: Francois Cartegnie +Date: Sat, 17 Aug 2024 11:22:33 +0700 +Subject: [PATCH 07/11] codec: avcodec: fix audio channel_layout conditionals + +--- + modules/codec/avcodec/audio.c | 23 +++++++++++++++-------- + 1 file changed, 15 insertions(+), 8 deletions(-) + +diff --git a/modules/codec/avcodec/audio.c b/modules/codec/avcodec/audio.c +index ad8a40ab4ed6..c74757c76ae5 100644 +--- a/modules/codec/avcodec/audio.c ++++ b/modules/codec/avcodec/audio.c +@@ -41,8 +41,11 @@ + #include + #include + +-#include ++#define API_CHANNEL_LAYOUT (LIBAVUTIL_VERSION_CHECK( 52, 2, 6, 0, 100)) + ++#if API_CHANNEL_LAYOUT ++# include ++#endif + + /***************************************************************************** + * decoder_sys_t : decoder descriptor +@@ -598,7 +601,7 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust ) + p_sys->i_previous_channels = p_sys->p_context->ch_layout.nb_channels; + p_sys->i_previous_layout = p_sys->p_context->ch_layout.u.mask; + } +-#else ++#elif API_CHANNEL_LAYOUT + if( p_sys->i_previous_channels == p_sys->p_context->channels && + p_sys->i_previous_layout == p_sys->p_context->channel_layout ) + return; +@@ -612,15 +615,19 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust ) + const unsigned i_order_max = sizeof(pi_channels_map)/sizeof(*pi_channels_map); + uint32_t pi_order_src[i_order_max]; + +- int i_channels_src = 0; ++ int i_channels_src = 0, channel_count; ++ uint64_t channel_layout_mask; + #if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100) +- uint64_t channel_layout_mask = p_sys->p_context->ch_layout.u.mask; +- int channel_count = p_sys->p_context->ch_layout.nb_channels; +-#else +- uint64_t channel_layout_mask = ++ channel_layout_mask = p_sys->p_context->ch_layout.u.mask; ++ channel_count = p_sys->p_context->ch_layout.nb_channels; ++#elif API_CHANNEL_LAYOUT ++ channel_layout_mask = + p_sys->p_context->channel_layout ? p_sys->p_context->channel_layout : + (uint64_t)av_get_default_channel_layout( p_sys->p_context->channels ); +- int channel_count = p_sys->p_context->channels; ++ channel_count = p_sys->p_context->channels; ++#else ++ channel_layout_mask = NULL; ++ channel_count = p_sys->p_context->channels; + #endif + + if( channel_layout_mask ) +-- +GitLab + + +From cc5306f9b4eaac1b684747d65c04901008423f61 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fran=C3=A7ois=20Cartegnie?= +Date: Tue, 23 Apr 2024 13:14:53 +0700 +Subject: [PATCH 08/11] demux/mux: avformat: use ch_layout from ffmpeg 5.1 + +merger pick from commit a55ec32ab3760d9edb6f05481cd3a981aa42878d +and fixup 195f0c98599b55950c49a62f98d9d3495be310df +--- + modules/demux/avformat/demux.c | 4 ++++ + modules/demux/avformat/mux.c | 4 ++++ + 2 files changed, 8 insertions(+) + +diff --git a/modules/demux/avformat/demux.c b/modules/demux/avformat/demux.c +index 3b355bb3faec..830dc0157e2b 100644 +--- a/modules/demux/avformat/demux.c ++++ b/modules/demux/avformat/demux.c +@@ -401,7 +401,11 @@ int avformat_OpenDemux( vlc_object_t *p_this ) + es_format_Init( &es_fmt, AUDIO_ES, fcc ); + es_fmt.i_original_fourcc = CodecTagToFourcc( cp->codec_tag ); + es_fmt.i_bitrate = cp->bit_rate; ++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 24, 100 ) && LIBAVCODEC_VERSION_MICRO >= 100 ++ es_fmt.audio.i_channels = cp->ch_layout.nb_channels; ++#else + es_fmt.audio.i_channels = cp->channels; ++#endif + es_fmt.audio.i_rate = cp->sample_rate; + es_fmt.audio.i_bitspersample = cp->bits_per_coded_sample; + es_fmt.audio.i_blockalign = cp->block_align; +diff --git a/modules/demux/avformat/mux.c b/modules/demux/avformat/mux.c +index c708276954ce..8bf8735885f5 100644 +--- a/modules/demux/avformat/mux.c ++++ b/modules/demux/avformat/mux.c +@@ -267,7 +267,11 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input ) + { + case AUDIO_ES: + codecpar->codec_type = AVMEDIA_TYPE_AUDIO; ++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 24, 100 ) && LIBAVCODEC_VERSION_MICRO >= 100 ++ av_channel_layout_default( &codecpar->ch_layout, fmt->audio.i_channels ); ++#else + codecpar->channels = fmt->audio.i_channels; ++#endif + codecpar->sample_rate = fmt->audio.i_rate; + stream->time_base = (AVRational){1, codecpar->sample_rate}; + if (fmt->i_bitrate == 0) { +-- +GitLab + + +From ad413ab9c0d8522cb79f7df3640249998902b6ca Mon Sep 17 00:00:00 2001 +From: Ilkka Ollakka +Date: Tue, 4 Jul 2023 16:53:43 +0300 +Subject: [PATCH 09/11] avcodec: add handling of new ch_layout in audio encoder + +conditioned to avcodec version where is it added + +(cherry picked from commit c4302ca59dd79efd7208a45a3fcdc44388fd03a8) +--- + modules/codec/avcodec/encoder.c | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c +index 6bd58f5071d2..757f93b46845 100644 +--- a/modules/codec/avcodec/encoder.c ++++ b/modules/codec/avcodec/encoder.c +@@ -927,11 +927,14 @@ errmsg: + + if( p_enc->fmt_out.audio.i_channels > 2 ) + { ++#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100) ++ av_channel_layout_default( &p_context->ch_layout, 2 ); ++#else + p_context->channels = 2; +-#if API_CHANNEL_LAYOUT ++# if API_CHANNEL_LAYOUT + p_context->channel_layout = channel_mask[p_context->channels][1]; ++# endif + #endif +- + /* Change fmt_in in order to ask for a channels conversion */ + p_enc->fmt_in.audio.i_channels = + p_enc->fmt_out.audio.i_channels = 2; +@@ -1288,8 +1291,12 @@ static block_t *handle_delay_buffer( encoder_t *p_enc, encoder_sys_t *p_sys, uns + av_frame_unref( p_sys->frame ); + p_sys->frame->format = p_sys->p_context->sample_fmt; + p_sys->frame->nb_samples = leftover_samples + p_sys->i_samples_delay; ++#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100) ++ av_channel_layout_copy(&p_sys->frame->ch_layout, &p_sys->p_context->ch_layout); ++#else + p_sys->frame->channel_layout = p_sys->p_context->channel_layout; + p_sys->frame->channels = p_sys->p_context->channels; ++#endif + + p_sys->frame->pts = date_Get( &p_sys->buffer_date ) * p_sys->p_context->time_base.den / + CLOCK_FREQ / p_sys->p_context->time_base.num; +@@ -1419,8 +1426,12 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf ) + p_sys->frame->pts = date_Get( &p_sys->buffer_date ) * p_sys->p_context->time_base.den / + CLOCK_FREQ / p_sys->p_context->time_base.num; + ++#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100) ++ av_channel_layout_copy(&p_sys->frame->ch_layout, &p_sys->p_context->ch_layout); ++#else + p_sys->frame->channel_layout = p_sys->p_context->channel_layout; + p_sys->frame->channels = p_sys->p_context->channels; ++#endif + + const int in_bytes = p_sys->frame->nb_samples * + p_enc->fmt_out.audio.i_channels* p_sys->i_sample_bytes; +-- +GitLab + + +From 416eeca68bfb67b244827a45a4392bddb8cc0ce8 Mon Sep 17 00:00:00 2001 +From: Ilkka Ollakka +Date: Tue, 4 Jul 2023 16:55:28 +0300 +Subject: [PATCH 10/11] avcodec: use ch_layout for channel layout in audio + encoder + +channels and channel_layout has been deprecated in FFMPEG 5.1 and will be removed eventually + +also always create the mapping, as ch_layout is always there + +(cherry picked from commit b73dc8841d999c6be9de718cd2cd3aeb13279792) +--- + modules/codec/avcodec/encoder.c | 53 ++++++++++++++------------------- + 1 file changed, 22 insertions(+), 31 deletions(-) + +diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c +index 757f93b46845..ae746c99fc89 100644 +--- a/modules/codec/avcodec/encoder.c ++++ b/modules/codec/avcodec/encoder.c +@@ -183,6 +183,7 @@ static const uint64_t pi_channels_map[][2] = + { AV_CH_STEREO_RIGHT, 0 }, + }; + ++# if !LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100) + static const uint32_t channel_mask[][2] = { + {0,0}, + {AOUT_CHAN_CENTER, AV_CH_LAYOUT_MONO}, +@@ -195,6 +196,7 @@ static const uint32_t channel_mask[][2] = { + {AOUT_CHANS_7_1, AV_CH_LAYOUT_7POINT1}, + {AOUT_CHANS_8_1, AV_CH_LAYOUT_OCTAGONAL}, + }; ++# endif + #endif + + static const char *const ppsz_enc_options[] = { +@@ -748,49 +750,36 @@ int InitVideoEnc( vlc_object_t *p_this ) + date_Set( &p_sys->buffer_date, AV_NOPTS_VALUE ); + p_context->time_base.num = 1; + p_context->time_base.den = p_context->sample_rate; +- p_context->channels = p_enc->fmt_out.audio.i_channels; +-#if API_CHANNEL_LAYOUT +- p_context->channel_layout = channel_mask[p_context->channels][1]; + +- /* Setup Channel ordering for multichannel audio ++ /* Setup Channel ordering for audio + * as VLC channel order isn't same as libavcodec expects + */ + + p_sys->i_channels_to_reorder = 0; + +- /* Specified order ++ /* Create channel layout for avcodec + * Copied from audio.c + */ +- const unsigned i_order_max = 8 * sizeof(p_context->channel_layout); +- uint32_t pi_order_dst[AOUT_CHAN_MAX] = { }; ++#if API_CHANNEL_LAYOUT ++ uint32_t pi_order_dst[AOUT_CHAN_MAX] = { 0 }; + uint32_t order_mask = 0; + int i_channels_src = 0; +- +- if( p_context->channel_layout ) +- { +- msg_Dbg( p_enc, "Creating channel order for reordering"); +- for( unsigned i = 0; i < sizeof(pi_channels_map)/sizeof(*pi_channels_map); i++ ) +- { +- if( p_context->channel_layout & pi_channels_map[i][0] ) +- { +- msg_Dbg( p_enc, "%d %"PRIx64" mapped to %"PRIx64"", i_channels_src, pi_channels_map[i][0], pi_channels_map[i][1]); +- pi_order_dst[i_channels_src++] = pi_channels_map[i][1]; +- order_mask |= pi_channels_map[i][1]; +- } +- } +- } +- else ++ msg_Dbg( p_enc, "Creating channel order for reordering"); ++# if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100) ++ av_channel_layout_default( &p_context->ch_layout, p_enc->fmt_out.audio.i_channels ); ++ uint64_t channel_mask = p_context->ch_layout.u.mask; ++# else ++ p_context->channels = p_enc->fmt_out.audio.i_channels; ++ p_context->channel_layout = channel_mask[p_context->channels][1]; ++ uint64_t channel_mask = p_context->channel_layout; ++# endif ++ for( unsigned i = 0; i < sizeof(pi_channels_map)/sizeof(*pi_channels_map); i++ ) + { +- msg_Dbg( p_enc, "Creating default channel order for reordering"); +- /* Create default order */ +- for( unsigned int i = 0; i < __MIN( i_order_max, (unsigned)p_sys->p_context->channels ); i++ ) ++ if( channel_mask & pi_channels_map[i][0] ) + { +- if( i < sizeof(pi_channels_map)/sizeof(*pi_channels_map) ) +- { +- msg_Dbg( p_enc, "%d channel is %"PRIx64"", i_channels_src, pi_channels_map[i][1]); +- pi_order_dst[i_channels_src++] = pi_channels_map[i][1]; +- order_mask |= pi_channels_map[i][1]; +- } ++ msg_Dbg( p_enc, "%d %"PRIx64" mapped to %"PRIx64"", i_channels_src, pi_channels_map[i][0], pi_channels_map[i][1]); ++ pi_order_dst[i_channels_src++] = pi_channels_map[i][1]; ++ order_mask |= pi_channels_map[i][1]; + } + } + if( i_channels_src != p_enc->fmt_out.audio.i_channels ) +@@ -799,6 +788,8 @@ int InitVideoEnc( vlc_object_t *p_this ) + p_sys->i_channels_to_reorder = + aout_CheckChannelReorder( NULL, pi_order_dst, order_mask, + p_sys->pi_reorder_layout ); ++#else ++ p_context->channels = p_enc->fmt_out.audio.i_channels; + #endif + + if ( p_enc->fmt_out.i_codec == VLC_CODEC_MP4A ) +-- +GitLab + + +From c493ec18c5f3d10ba5a967e81b80d03e79f2d8b7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fran=C3=A7ois=20Cartegnie?= +Date: Mon, 12 Aug 2024 19:32:42 +0700 +Subject: [PATCH 11/11] codec: avcodec: bypass removed define for Intel + workarounds + +adapted from cherry picked commit 1280728ad305f00ceba3491ce11bf66107017a6c +--- + modules/codec/avcodec/d3d11va.c | 4 ++++ + modules/codec/avcodec/dxva2.c | 4 ++++ + 2 files changed, 8 insertions(+) + +diff --git a/modules/codec/avcodec/d3d11va.c b/modules/codec/avcodec/d3d11va.c +index e1560a9312cc..5260628364f0 100644 +--- a/modules/codec/avcodec/d3d11va.c ++++ b/modules/codec/avcodec/d3d11va.c +@@ -55,6 +55,10 @@ + #define D3D_DecoderSurface ID3D11VideoDecoderOutputView + #include "directx_va.h" + ++#ifndef FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO ++# define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 // moved to libavcodec/dxva2_internal.h :/ ++#endif ++ + static int Open(vlc_va_t *, AVCodecContext *, const AVPixFmtDescriptor *, enum PixelFormat, + const es_format_t *, picture_sys_t *p_sys); + static void Close(vlc_va_t *, void **); +diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c +index 2e6809a05410..037ad7d44887 100644 +--- a/modules/codec/avcodec/dxva2.c ++++ b/modules/codec/avcodec/dxva2.c +@@ -43,6 +43,10 @@ + #define D3D_DecoderSurface IDirect3DSurface9 + #include "directx_va.h" + ++#ifndef FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO ++# define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 // moved to libavcodec/dxva2_internal.h :/ ++#endif ++ + static int Open(vlc_va_t *, AVCodecContext *, const AVPixFmtDescriptor *, enum PixelFormat, + const es_format_t *, picture_sys_t *p_sys); + static void Close(vlc_va_t *, void **); +-- +GitLab + + +From: =?utf-8?q?Fran=C3=A7ois_Cartegnie?= +Date: Thu, 15 Aug 2024 12:09:56 +0200 +Subject: mux: avformat: fix avio callbacks signature with ffmpeg 6.1 + +API signature changes introduced depending on a positive define, +then removed later, making it break prior or post removal... +--- + modules/codec/avcodec/avcommon_compat.h | 3 +++ + modules/demux/avformat/mux.c | 19 +++++++++++++++++-- + 2 files changed, 20 insertions(+), 2 deletions(-) + +diff --git a/modules/codec/avcodec/avcommon_compat.h b/modules/codec/avcodec/avcommon_compat.h +index 9d16b3d..561ad83 100644 +--- a/modules/codec/avcodec/avcommon_compat.h ++++ b/modules/codec/avcodec/avcommon_compat.h +@@ -77,6 +77,9 @@ + #ifndef FF_MAX_B_FRAMES + # define FF_MAX_B_FRAMES 16 // FIXME: remove this + #endif ++#ifndef FF_API_AVIO_WRITE_NONCONST // removed in ffmpeg 7 ++# define FF_API_AVIO_WRITE_NONCONST (LIBAVFORMAT_VERSION_MAJOR < 61) ++#endif + + #endif /* HAVE_LIBAVCODEC_AVCODEC_H */ + +diff --git a/modules/demux/avformat/mux.c b/modules/demux/avformat/mux.c +index 8bf8735..4994647 100644 +--- a/modules/demux/avformat/mux.c ++++ b/modules/demux/avformat/mux.c +@@ -74,12 +74,18 @@ static int AddStream( sout_mux_t *, sout_input_t * ); + static void DelStream( sout_mux_t *, sout_input_t * ); + static int Mux ( sout_mux_t * ); + ++#if FF_API_AVIO_WRITE_NONCONST + static int IOWrite( void *opaque, uint8_t *buf, int buf_size ); +-static int64_t IOSeek( void *opaque, int64_t offset, int whence ); + #if LIBAVFORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 ) + static int IOWriteTyped(void *opaque, uint8_t *buf, int buf_size, +- enum AVIODataMarkerType type, int64_t time); ++ enum AVIODataMarkerType type, int64_t time); ++#endif ++#else ++static int IOWrite( void *opaque, const uint8_t *buf, int buf_size ); ++int IOWriteTyped(void *opaque, const uint8_t *buf, int buf_size, ++ enum AVIODataMarkerType type, int64_t time); + #endif ++static int64_t IOSeek( void *opaque, int64_t offset, int whence ); + + /***************************************************************************** + * Open +@@ -411,8 +417,13 @@ static int MuxBlock( sout_mux_t *p_mux, sout_input_t *p_input ) + } + + #if LIBAVFORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 ) ++#if FF_API_AVIO_WRITE_NONCONST + int IOWriteTyped(void *opaque, uint8_t *buf, int buf_size, + enum AVIODataMarkerType type, int64_t time) ++#else ++int IOWriteTyped(void *opaque, const uint8_t *buf, int buf_size, ++ enum AVIODataMarkerType type, int64_t time) ++#endif + { + VLC_UNUSED(time); + +@@ -512,7 +523,11 @@ static int Control( sout_mux_t *p_mux, int i_query, va_list args ) + /***************************************************************************** + * I/O wrappers for libavformat + *****************************************************************************/ ++#if FF_API_AVIO_WRITE_NONCONST + static int IOWrite( void *opaque, uint8_t *buf, int buf_size ) ++#else ++static int IOWrite( void *opaque, const uint8_t *buf, int buf_size ) ++#endif + { + sout_mux_t *p_mux = opaque; + sout_mux_sys_t *p_sys = p_mux->p_sys; + diff --git a/SOURCES/5590.patch b/SOURCES/5590.patch new file mode 100644 index 0000000..38ec3cc --- /dev/null +++ b/SOURCES/5590.patch @@ -0,0 +1,28 @@ +From a761e1c202b632e7865d18fcf11a2b9e285ea9ae Mon Sep 17 00:00:00 2001 +From: Tristan Matthews +Date: Wed, 1 Feb 2023 23:39:36 -0500 +Subject: [PATCH] opus_header: fix channel mapping family 1 parsing + +Fixes #27808 + +(cherry picked from commit 79fa6af0a98921f9d34933761f4fe20ef6c35309) +--- + modules/codec/opus_header.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules/codec/opus_header.c b/modules/codec/opus_header.c +index 4069a5cf4613..b134b20b625b 100644 +--- a/modules/codec/opus_header.c ++++ b/modules/codec/opus_header.c +@@ -205,7 +205,7 @@ int opus_header_parse(const unsigned char *packet, int len, OpusHeader *h) + h->nb_coupled = ch; + + /* Multi-stream support */ +- if(h->channel_mapping == 2) ++ if(h->channel_mapping <= 2) + { + if (h->nb_coupled + h->nb_streams > 255) + return 0; +-- +GitLab + diff --git a/SOURCES/freerdp2.patch b/SOURCES/freerdp2.patch new file mode 100644 index 0000000..0aa2942 --- /dev/null +++ b/SOURCES/freerdp2.patch @@ -0,0 +1,239 @@ +From 1c27f57498b7e0f52acc7b4520c4172a2462632d Mon Sep 17 00:00:00 2001 +From: Juliane de Sartiges +Date: Wed, 27 Jul 2022 09:32:25 +0200 +Subject: [PATCH] freerdp: update to freerdp2 api + +--- + configure.ac | 2 +- + modules/access/rdp.c | 85 ++++++++++++++++++++------------------------ + 2 files changed, 40 insertions(+), 47 deletions(-) + +diff --git a/configure.ac b/configure.ac +index b454198157..cb23a9b2ab 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2094,7 +2094,7 @@ PKG_ENABLE_MODULES_VLC([VNC], [vnc], [libvncclient >= 0.9.9], (VNC/rfb client su + + dnl RDP/Remote Desktop access module + dnl +-PKG_ENABLE_MODULES_VLC([FREERDP], [rdp], [freerdp >= 1.0.1], (RDP/Remote Desktop client support) ) ++PKG_ENABLE_MODULES_VLC([FREERDP], [rdp], [freerdp2 >= 2.0.0], (RDP/Remote Desktop client support) ) + + dnl + dnl Real RTSP plugin +diff --git a/modules/access/rdp.c b/modules/access/rdp.c +index 0c39663c64..04ae005938 100644 +--- a/modules/access/rdp.c ++++ b/modules/access/rdp.c +@@ -45,18 +45,6 @@ + # include + #endif + +-#if !defined(FREERDP_VERSION_MAJOR) || \ +- (defined(FREERDP_VERSION_MAJOR) && !(FREERDP_VERSION_MAJOR > 1 || (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 1))) +-# define SoftwareGdi sw_gdi +-# define Fullscreen fullscreen +-# define ServerHostname hostname +-# define Username username +-# define Password password +-# define ServerPort port +-# define EncryptionMethods encryption +-# define ContextSize context_size +-#endif +- + #include + #ifdef HAVE_POLL + # include +@@ -75,6 +63,8 @@ + + #define CFG_PREFIX "rdp-" + ++#define FREERDP_PIXEL_BPP(_format) (_format >> 24) ++ + /***************************************************************************** + * Module descriptor + *****************************************************************************/ +@@ -139,11 +129,12 @@ typedef struct vlcrdp_context_t vlcrdp_context_t; + + /* updates handlers */ + +-static void desktopResizeHandler( rdpContext *p_context ) ++static BOOL desktopResizeHandler( rdpContext *p_context ) + { + vlcrdp_context_t * p_vlccontext = (vlcrdp_context_t *) p_context; + demux_sys_t *p_sys = p_vlccontext->p_demux->p_sys; + rdpGdi *p_gdi = p_context->gdi; ++ int i_colordepth = FREERDP_PIXEL_BPP( p_gdi->dstFormat ); + + if ( p_sys->es ) + { +@@ -151,11 +142,13 @@ static void desktopResizeHandler( rdpContext *p_context ) + p_sys->es = NULL; + } + +- /* Now init and fill es format */ + vlc_fourcc_t i_chroma; +- switch( p_gdi->bytesPerPixel ) ++ /* Now init and fill es format */ ++ switch ( i_colordepth ) + { + default: ++ msg_Dbg( p_vlccontext->p_demux, "invalid color depth %d", i_colordepth); ++ /* fallthrough */ + case 16: + i_chroma = VLC_CODEC_RGB16; + break; +@@ -163,7 +156,7 @@ static void desktopResizeHandler( rdpContext *p_context ) + i_chroma = VLC_CODEC_RGB24; + break; + case 32: +- i_chroma = VLC_CODEC_RGB32; ++ i_chroma = VLC_CODEC_ARGB; + break; + } + es_format_t fmt; +@@ -176,7 +169,7 @@ static void desktopResizeHandler( rdpContext *p_context ) + fmt.video.i_height = p_gdi->height; + fmt.video.i_frame_rate_base = 1000; + fmt.video.i_frame_rate = 1000 * p_sys->f_fps; +- p_sys->i_framebuffersize = p_gdi->width * p_gdi->height * p_gdi->bytesPerPixel; ++ p_sys->i_framebuffersize = p_gdi->width * p_gdi->height * (i_colordepth >> 3); + + if ( p_sys->p_block ) + p_sys->p_block = block_Realloc( p_sys->p_block, 0, p_sys->i_framebuffersize ); +@@ -184,20 +177,21 @@ static void desktopResizeHandler( rdpContext *p_context ) + p_sys->p_block = block_Alloc( p_sys->i_framebuffersize ); + + p_sys->es = es_out_Add( p_vlccontext->p_demux->out, &fmt ); ++ return TRUE; + } + +-static void beginPaintHandler( rdpContext *p_context ) ++static BOOL beginPaintHandler( rdpContext *p_context ) + { + vlcrdp_context_t * p_vlccontext = (vlcrdp_context_t *) p_context; + demux_sys_t *p_sys = p_vlccontext->p_demux->p_sys; + rdpGdi *p_gdi = p_context->gdi; +- p_gdi->primary->hdc->hwnd->invalid->null = 1; +- p_gdi->primary->hdc->hwnd->ninvalid = 0; ++ p_gdi->primary->hdc->hwnd->invalid->null = TRUE; + if ( ! p_sys->p_block && p_sys->i_framebuffersize ) + p_sys->p_block = block_Alloc( p_sys->i_framebuffersize ); ++ return TRUE; + } + +-static void endPaintHandler( rdpContext *p_context ) ++static BOOL endPaintHandler( rdpContext *p_context ) + { + vlcrdp_context_t * p_vlccontext = (vlcrdp_context_t *) p_context; + demux_sys_t *p_sys = p_vlccontext->p_demux->p_sys; +@@ -208,11 +202,12 @@ static void endPaintHandler( rdpContext *p_context ) + p_sys->p_block->i_buffer = p_sys->i_framebuffersize; + memcpy( p_sys->p_block->p_buffer, p_gdi->primary_buffer, p_sys->p_block->i_buffer ); + } ++ return TRUE; + } + + /* instance handlers */ + +-static bool preConnectHandler( freerdp *p_instance ) ++static BOOL preConnectHandler( freerdp *p_instance ) + { + vlcrdp_context_t * p_vlccontext = (vlcrdp_context_t *) p_instance->context; + demux_sys_t *p_sys = p_vlccontext->p_demux->p_sys; +@@ -229,49 +224,54 @@ static bool preConnectHandler( freerdp *p_instance ) + p_instance->settings->EncryptionMethods = + var_InheritBool( p_vlccontext->p_demux, CFG_PREFIX "encrypt" ); + +- return true; ++ return TRUE; + } + +-static bool postConnectHandler( freerdp *p_instance ) ++static BOOL postConnectHandler( freerdp *p_instance ) + { + vlcrdp_context_t * p_vlccontext = (vlcrdp_context_t *) p_instance->context; + + msg_Dbg( p_vlccontext->p_demux, "connected to desktop %dx%d (%d bpp)", +-#if defined(FREERDP_VERSION_MAJOR) && (FREERDP_VERSION_MAJOR > 1 || (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 1)) + p_instance->settings->DesktopWidth, + p_instance->settings->DesktopHeight, + p_instance->settings->ColorDepth +-#else +- p_instance->settings->width, +- p_instance->settings->height, +- p_instance->settings->color_depth +-#endif + ); + + p_instance->update->DesktopResize = desktopResizeHandler; + p_instance->update->BeginPaint = beginPaintHandler; + p_instance->update->EndPaint = endPaintHandler; ++ UINT32 format; ++ switch ( p_instance->settings->ColorDepth ) ++ { ++ default: ++ msg_Dbg( p_vlccontext->p_demux, "no valid pixel format found for color depth %d bpp", p_instance->settings->ColorDepth); ++ /* fallthrough */ ++ case 16: ++ format = PIXEL_FORMAT_RGB16; ++ break; ++ case 24: ++ format = PIXEL_FORMAT_RGB24; ++ break; ++ case 32: ++ format = PIXEL_FORMAT_ARGB32; ++ break; ++ } + + gdi_init( p_instance, +- CLRBUF_16BPP | +-#if defined(FREERDP_VERSION_MAJOR) && defined(FREERDP_VERSION_MINOR) && \ +- !(FREERDP_VERSION_MAJOR > 1 || (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 2)) +- CLRBUF_24BPP | +-#endif +- CLRBUF_32BPP, NULL ); ++ format ); + + desktopResizeHandler( p_instance->context ); +- return true; ++ return TRUE; + } + +-static bool authenticateHandler( freerdp *p_instance, char** ppsz_username, ++static BOOL authenticateHandler( freerdp *p_instance, char** ppsz_username, + char** ppsz_password, char** ppsz_domain ) + { + VLC_UNUSED(ppsz_domain); + vlcrdp_context_t * p_vlccontext = (vlcrdp_context_t *) p_instance->context; + *ppsz_username = var_InheritString( p_vlccontext->p_demux, CFG_PREFIX "user" ); + *ppsz_password = var_InheritString( p_vlccontext->p_demux, CFG_PREFIX "password" ); +- return true; ++ return TRUE; + } + + /***************************************************************************** +@@ -432,10 +432,6 @@ static int Open( vlc_object_t *p_this ) + if ( p_sys->f_fps <= 0 ) p_sys->f_fps = 1.0; + p_sys->i_frame_interval = 1000000 / p_sys->f_fps; + +-#if FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR < 2 +- freerdp_channels_global_init(); +-#endif +- + p_sys->p_instance = freerdp_new(); + if ( !p_sys->p_instance ) + { +@@ -512,9 +508,6 @@ static void Close( vlc_object_t *p_this ) + + freerdp_disconnect( p_sys->p_instance ); + freerdp_free( p_sys->p_instance ); +-#if FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR < 2 +- freerdp_channels_global_uninit(); +-#endif + + if ( p_sys->p_block ) + block_Release( p_sys->p_block ); +-- +2.45.2 + diff --git a/SOURCES/libidn2.patch b/SOURCES/libidn2.patch new file mode 100644 index 0000000..0a98497 --- /dev/null +++ b/SOURCES/libidn2.patch @@ -0,0 +1,49 @@ +diff --git a/configure.ac b/configure.ac +index 78b9ce2..b9c1563 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -910,9 +910,9 @@ AM_CONDITIONAL(HAVE_MINIZIP, [ test "${have_minizip}" = "yes" ]) + + + dnl +-dnl Domain name i18n support via GNU libidn ++dnl Domain name i18n support via GNU libidn2 + dnl +-PKG_CHECK_MODULES([IDN], [libidn], [ ++PKG_CHECK_MODULES([IDN], [libidn2], [ + have_libidn="yes" + AC_DEFINE([HAVE_IDN], 1, [Define to 1 if you have GNU libidn.]) + ], [ +diff --git a/src/text/url.c b/src/text/url.c +index 2eb4b8d..467b7f3 100644 +--- a/src/text/url.c ++++ b/src/text/url.c +@@ -873,7 +873,7 @@ char *vlc_uri_fixup(const char *str) + } + + #if defined (HAVE_IDN) +-# include ++# include + #elif defined (_WIN32) + # include + # include +@@ -914,16 +914,13 @@ static char *vlc_idna_to_ascii (const char *idn) + #if defined (HAVE_IDN) + char *adn; + +- switch (idna_to_ascii_8z(idn, &adn, IDNA_ALLOW_UNASSIGNED)) ++ switch (idn2_to_ascii_8z(idn, &adn, IDN2_ALLOW_UNASSIGNED|IDN2_NFC_INPUT|IDN2_NONTRANSITIONAL)) + { +- case IDNA_SUCCESS: ++ case IDN2_OK: + return adn; +- case IDNA_MALLOC_ERROR: ++ case IDN2_MALLOC: + errno = ENOMEM; + return NULL; +- case IDNA_DLOPEN_ERROR: +- errno = ENOSYS; +- return NULL; + default: + errno = EINVAL; + return NULL; diff --git a/SOURCES/lua-math.patch b/SOURCES/lua-math.patch new file mode 100644 index 0000000..3972717 --- /dev/null +++ b/SOURCES/lua-math.patch @@ -0,0 +1,11 @@ +--- ./share/lua/intf/modules/httprequests.lua.Orig 2023-08-05 06:03:51.000000000 -0400 ++++ ./share/lua/intf/modules/httprequests.lua 2024-05-28 14:02:41.569002601 -0400 +@@ -34,7 +34,7 @@ + what = common.us_tonumber(what) + end + if type(what) == "number" then +- return math.floor(what*math.pow(10,precision)+0.5) / math.pow(10,precision) ++ return math.floor(what*(10^precision)+0.5) / (10^precision) + end + return nil + end diff --git a/SPECS/vlc.spec b/SPECS/vlc.spec index 700c8eb..4da6846 100644 --- a/SPECS/vlc.spec +++ b/SPECS/vlc.spec @@ -1,8 +1,8 @@ ## START: Set by rpmautospec -## (rpmautospec version 0.6.0) +## (rpmautospec version 0.7.2) ## RPMAUTOSPEC: autorelease, autochangelog %define autorelease(e:s:pb:n) %{?-p:0.}%{lua: - release_number = 10; + release_number = 11; base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); print(release_number + base_release_number - 1); }%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} @@ -36,13 +36,23 @@ Name: vlc Epoch: 1 -Version: 3.0.20 -Release: %autorelease -b 3 +Version: 3.0.21 +Release: %autorelease Summary: The cross-platform open-source multimedia framework, player and server License: GPL-2.0-or-later AND LGPL-2.1-or-later AND BSD-2-Clause AND BSD-3-Clause URL: https://www.videolan.org Source: https://get.videolan.org/vlc/%{version}/vlc-%{version}.tar.xz -Source: macros.vlc +Source: macros.vlc + +## upstream patches +# opus_header: fix channel mapping family 1 parsing (rhbz#2307919) +Patch: https://code.videolan.org/videolan/vlc/-/merge_requests/5590.patch + +## upstreamable patches +# add support for ffmpeg 7.0 +Patch: https://code.videolan.org/videolan/vlc/-/merge_requests/5574.patch + +## downstream patches # https://fedoraproject.org/wiki/Changes/CryptoPolicy Patch: 0001-Use-SYSTEM-wide-ciphers-for-gnutls.patch # Fix building with fdk-aac-2.0; backport for 3.0 from flathub @@ -53,9 +63,12 @@ Patch: vaapi-without-ffmepg4.patch Patch: oneVPL.patch # fix appstreamcli validate to show in Software (rhbz#2258611) Patch: appdata.patch -# GCC 14 fixes from upstream -Patch: https://code.videolan.org/videolan/vlc/-/merge_requests/4645.patch -Patch: https://code.videolan.org/videolan/vlc/-/merge_requests/4665.patch +# port from libidn to libidn2 +Patch: libidn2.patch +# fix deprecated lua math functions (rhbz#2280091) +Patch: lua-math.patch +# update to freerdp2 api; backport from master +Patch: freerdp2.patch %{load:%{S:1}} %global __provides_exclude_from ^%{vlc_plugindir}/.*$ @@ -88,8 +101,8 @@ BuildRequires: live555-devel BuildRequires: lua-devel BuildRequires: pkgconfig(alsa) >= 1.0.24 BuildRequires: pkgconfig(aom) -#BuildRequires: pkgconfig(aribb24) -#BuildRequires: pkgconfig(aribb25) +BuildRequires: pkgconfig(aribb24) +BuildRequires: pkgconfig(aribb25) %if %{with asdcp} BuildRequires: pkgconfig(asdcplib) %endif @@ -109,7 +122,7 @@ BuildRequires: pkgconfig(flac) #BuildRequires: pkgconfig(fluidlite) BuildRequires: pkgconfig(fluidsynth) >= 1.1.2 BuildRequires: pkgconfig(fontconfig) >= 2.11 -#BuildRequires: pkgconfig(freerdp) +BuildRequires: pkgconfig(freerdp2) BuildRequires: pkgconfig(freetype2) BuildRequires: pkgconfig(fribidi) BuildRequires: pkgconfig(gl) @@ -137,7 +150,7 @@ BuildRequires: pkgconfig(libdvbpsi) BuildRequires: pkgconfig(libebml) >= 1.3.6 BuildRequires: pkgconfig(libgme) #BuildRequires: pkgconfig(libgoom2) -BuildRequires: pkgconfig(libidn) +BuildRequires: pkgconfig(libidn2) BuildRequires: pkgconfig(libmatroska) BuildRequires: pkgconfig(libmodplug) >= 0.8.9.0 BuildRequires: pkgconfig(libmpeg2) >= 0.3.2 @@ -146,7 +159,7 @@ BuildRequires: pkgconfig(libmtp) >= 1.0.0 BuildRequires: pkgconfig(libnfs) >= 1.10.0 BuildRequires: pkgconfig(libnotify) pkgconfig(gtk+-3.0) %if %{with placebo} -BuildRequires: pkgconfig(libplacebo) >= 0.2.1 +BuildRequires: pkgconfig(libplacebo) < 6 %endif BuildRequires: pkgconfig(libpostproc) %if %{with projectm} @@ -239,12 +252,14 @@ Requires: %{name}-gui-qt%{?_isa} = %{epoch}:%{version}-%{release} Recommends: %{name}-gui-skins2%{?_isa} = %{epoch}:%{version}-%{release} Recommends: %{name}-plugin-ffmpeg%{?_isa} = %{epoch}:%{version}-%{release} -Requires: hicolor-icon-theme -%if %{undefined flatpak} -Requires: kf5-filesystem +Requires: hicolor-icon-theme +%if 0%{?fedora} >= 40 || 0%{?rhel} >= 10 +Requires: kde-filesystem +%else +Requires: kf5-filesystem %endif # For xdg-screensaver (libxdg_screensaver_plugin) -Recommends: xdg-utils +Recommends: xdg-utils xset %description @@ -287,13 +302,15 @@ Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} Requires: %{name}-plugins-base%{?_isa} = %{epoch}:%{version}-%{release} Requires: %{name}-plugins-video-out%{?_isa} = %{epoch}:%{version}-%{release} Requires: %{name}-plugin-lua%{?_isa} = %{epoch}:%{version}-%{release} +Requires: (%{name}-plugin-pipewire%{?_isa} if pipewire) +Requires: (%{name}-plugin-pulseaudio%{?_isa} = %{epoch}:%{version}-%{release} if (pipewire-pulseaudio or pulseaudio)) Requires: (qt5-qtwayland%{?_isa} if libwayland-client%{?_isa}) +Recommends: %{name}-plugins-extra%{?_isa} = %{epoch}:%{version}-%{release} Recommends: %{name}-plugin-ffmpeg%{?_isa} = %{epoch}:%{version}-%{release} Recommends: %{name}-plugin-visualization%{?_isa} = %{epoch}:%{version}-%{release} Recommends: (%{name}-plugin-gnome%{?_isa} = %{epoch}:%{version}-%{release} if gnome-keyring) -Recommends: (%{name}-plugin-kde%{?_isa} = %{epoch}:%{version}-%{release} if kf5-kwallet) +Recommends: (%{name}-plugin-kde%{?_isa} = %{epoch}:%{version}-%{release} if (kf6-kwallet or kf5-wallet)) Recommends: (%{name}-plugin-notify%{?_isa} = %{epoch}:%{version}-%{release} if gtk3) -Recommends: (%{name}-plugin-pulseaudio%{?_isa} = %{epoch}:%{version}-%{release} or vlc-plugin-pipewire%{?_isa}) %description gui-qt VLC media player Qt graphical interface @@ -302,10 +319,45 @@ Summary: VLC media player Skins2 GUI Requires: %{name}-cli%{?_isa} = %{epoch}:%{version}-%{release} Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} Requires: %{name}-gui-qt%{?_isa} = %{epoch}:%{version}-%{release} -Requires: gnu-free-sans-fonts +Requires: gnu-free-sans-fonts %description gui-skins2 VLC media player skinnable graphical interface +%package plugins-all +Summary: VLC media player - all plugins +Requires: %{name}-plugins-base%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-plugins-extra%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-plugins-video-out%{?_isa} = %{epoch}:%{version}-%{release} +%if %{with crystalhd} +Requires: %{name}-plugin-crystalhd%{?_isa} = %{epoch}:%{version}-%{release} +%endif +Requires: %{name}-plugin-ffmpeg%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-plugin-fluidsynth%{?_isa} = %{epoch}:%{version}-%{release} +Requires: (%{name}-plugin-gnome%{?_isa} = %{epoch}:%{version}-%{release} if gnome-keyring) +Requires: %{name}-plugin-gstreamer%{?_isa} = %{epoch}:%{version}-%{release} +%if %{with ieee1394} +Requires: %{name}-plugin-ieee1394%{?_isa} = %{epoch}:%{version}-%{release} +%endif +Requires: (%{name}-plugin-jack%{?_isa} = %{epoch}:%{version}-%{release} if (jack-audio-connection-kit or pipewire-jack-audio-connection-kit)) +Requires: (%{name}-plugin-kde%{?_isa} = %{epoch}:%{version}-%{release} if (kf6-kwallet or kf5-wallet)) +Requires: %{name}-plugin-lua%{?_isa} = %{epoch}:%{version}-%{release} +Requires: (%{name}-plugin-notify%{?_isa} = %{epoch}:%{version}-%{release} if gtk3) +%if %{with opencv} +Requires: %{name}-plugin-opencv%{?_isa} = %{epoch}:%{version}-%{release} +%endif +Requires: (%{name}-plugin-pulseaudio%{?_isa} = %{epoch}:%{version}-%{release} if (pipewire-pulseaudio or pulseaudio)) +Requires: %{name}-plugin-rdp%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-plugin-samba%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-plugin-svg%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-plugin-visualization%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-plugin-vnc%{?_isa} = %{epoch}:%{version}-%{release} +# separate plugins +Requires: %{name}-plugin-bittorrent%{?_isa} +Requires: %{name}-plugin-pause-click%{?_isa} +Requires: (%{name}-plugin-pipewire%{?_isa} if pipewire) +%description plugins-all +Installs all available plugins for VLC media player + %package plugins-base Summary: VLC media player core Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} @@ -321,6 +373,13 @@ Conflicts: %{name}-core < %{epoch}:%{version}-%{release} %description plugins-base VLC media player core components +%package plugins-extra +Summary: VLC media player extra plugins +Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} +Conflicts: %{name}-plugins-base < %{epoch}:%{version}-%{release} +%description plugins-extra +VLC media player additional components + # libcrystalhd requires crystalhd-firmware, is for specific hardware %if %{with crystalhd} %package plugin-crystalhd @@ -346,7 +405,7 @@ FFmpeg support plugins for VLC media player Summary: VLC media player MIDI playback plugin Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} Requires: %{name}-plugins-base%{?_isa} = %{epoch}:%{version}-%{release} -Recommends: fluid-soundfont-gm +Recommends: fluid-soundfont-gm %description plugin-fluidsynth MIDI playback support plugin for VLC media player @@ -385,7 +444,7 @@ IEEE 1394 (FireWire) plugins for VLC media player Summary: VLC media player JACK plugins Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} Requires: %{name}-plugins-base%{?_isa} = %{epoch}:%{version}-%{release} -Suggests: pipewire-jack-audio-connection-kit +Suggests: pipewire-jack-audio-connection-kit %description plugin-jack PulseAudio plugins for VLC media player @@ -433,6 +492,14 @@ Requires: %{name}-plugins-base%{?_isa} = %{epoch}:%{version}-%{release} %description plugin-pulseaudio PulseAudio plugins for VLC media player +# requires freerdp2, for RDP remote desktop support +%package plugin-rdp +Summary: VLC media player RDP plugin +Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-plugins-base%{?_isa} = %{epoch}:%{version}-%{release} +%description plugin-rdp +RDP access plugin for VLC media player + # requires libsmbclient, for SMB protocol support %package plugin-samba Summary: VLC media player SMB plugin @@ -539,7 +606,7 @@ export LIVE555_PREFIX=%{_prefix} --enable-libcddb \ --enable-screen \ --enable-vnc \ - --disable-freerdp \ + --enable-freerdp \ --enable-realrtsp \ --enable-asdcp%{!?with_asdcp:=no} \ \ @@ -595,8 +662,8 @@ export LIVE555_PREFIX=%{_prefix} --enable-zvbi \ --disable-telx \ --enable-libass \ - --disable-aribsub \ - --disable-aribb25 \ + --enable-aribsub \ + --enable-aribb25 \ --enable-kate \ --enable-tiger \ --enable-css \ @@ -754,74 +821,332 @@ make check %{vlc_plugindir}/gui/libskins2_plugin.so %{_datadir}/vlc/skins2/ +%files plugins-all + %files plugins-base %license COPYING COPYING.LIB -%exclude %{vlc_plugindir}/access/libaccess_jack_plugin.so -%exclude %{vlc_plugindir}/access/libavio_plugin.so -%if %{with ieee1394} -%exclude %{vlc_plugindir}/access/libdc1394_plugin.so -%exclude %{vlc_plugindir}/access/libdv1394_plugin.so -%endif -%exclude %{vlc_plugindir}/access/libpulsesrc_plugin.so -%exclude %{vlc_plugindir}/access/libsmb_plugin.so -%exclude %{vlc_plugindir}/access/libvnc_plugin.so -%{vlc_plugindir}/access/ -%{vlc_plugindir}/access_output/ -%{vlc_plugindir}/audio_filter/ -%{vlc_plugindir}/audio_mixer/ -%exclude %{vlc_plugindir}/audio_output/libjack_plugin.so -%exclude %{vlc_plugindir}/audio_output/libpulse_plugin.so -%{vlc_plugindir}/audio_output/ -%exclude %{vlc_plugindir}/codec/libavcodec_plugin.so -%if %{with crystalhd} -%exclude %{vlc_plugindir}/codec/libcrystalhd_plugin.so -%endif -%exclude %{vlc_plugindir}/codec/libfluidsynth_plugin.so -%exclude %{vlc_plugindir}/codec/libgstdecode_plugin.so -%exclude %{vlc_plugindir}/codec/libsvgdec_plugin.so -%{vlc_plugindir}/codec/ -%exclude %{vlc_plugindir}/control/libxcb_hotkeys_plugin.so -%{vlc_plugindir}/control/ -%exclude %{vlc_plugindir}/demux/libavformat_plugin.so -%{vlc_plugindir}/demux/ +%dir %{vlc_plugindir}/access/ +%dir %{vlc_plugindir}/access_output/ +%dir %{vlc_plugindir}/audio_filter/ +%dir %{vlc_plugindir}/audio_mixer/ +%dir %{vlc_plugindir}/audio_output/ +%dir %{vlc_plugindir}/codec/ +%dir %{vlc_plugindir}/control/ +%dir %{vlc_plugindir}/demux/ %dir %{vlc_plugindir}/gui/ -%exclude %{vlc_plugindir}/keystore/libkwallet_plugin.so -%exclude %{vlc_plugindir}/keystore/libsecret_plugin.so -%{vlc_plugindir}/keystore/ -%{vlc_plugindir}/logger/ -%{vlc_plugindir}/meta_engine/ -%{vlc_plugindir}/misc/ -%{vlc_plugindir}/mux/ +%dir %{vlc_plugindir}/keystore/ +%dir %{vlc_plugindir}/logger/ +%dir %{vlc_plugindir}/meta_engine/ +%dir %{vlc_plugindir}/misc/ +%dir %{vlc_plugindir}/mux/ %dir %{vlc_plugindir}/notify/ -%exclude %{vlc_plugindir}/packetizer/libpacketizer_avparser_plugin.so -%{vlc_plugindir}/packetizer/ -%exclude %{vlc_plugindir}/services_discovery/libpulselist_plugin.so -%exclude %{vlc_plugindir}/services_discovery/libxcb_apps_plugin.so -%{vlc_plugindir}/services_discovery/ -%{vlc_plugindir}/spu/ -%{vlc_plugindir}/stream_extractor/ -%{vlc_plugindir}/stream_filter/ -%exclude %{vlc_plugindir}/stream_out/libstream_out_chromaprint_plugin.so -%{vlc_plugindir}/stream_out/ -%exclude %{vlc_plugindir}/text_renderer/libsvg_plugin.so -%{vlc_plugindir}/text_renderer/ +%dir %{vlc_plugindir}/packetizer/ +%dir %{vlc_plugindir}/services_discovery/ +%dir %{vlc_plugindir}/spu/ +%dir %{vlc_plugindir}/stream_extractor/ +%dir %{vlc_plugindir}/stream_filter/ +%dir %{vlc_plugindir}/stream_out/ +%dir %{vlc_plugindir}/text_renderer/ %dir %{vlc_plugindir}/vaapi/ %dir %{vlc_plugindir}/vdpau/ +%dir %{vlc_plugindir}/video_chroma/ +%dir %{vlc_plugindir}/video_filter/ +%dir %{vlc_plugindir}/video_output/ +%dir %{vlc_plugindir}/video_splitter/ +%dir %{vlc_plugindir}/visualization/ +%dir %{_datadir}/vlc/ +%{vlc_plugindir}/access/libaccess_alsa_plugin.so +%{vlc_plugindir}/access/libaccess_concat_plugin.so +%{vlc_plugindir}/access/libaccess_imem_plugin.so +%{vlc_plugindir}/access/libaccess_mms_plugin.so +%{vlc_plugindir}/access/libaccess_realrtsp_plugin.so +%{vlc_plugindir}/access/libattachment_plugin.so +%{vlc_plugindir}/access/libdtv_plugin.so +%{vlc_plugindir}/access/libfilesystem_plugin.so +%{vlc_plugindir}/access/libftp_plugin.so +%{vlc_plugindir}/access/libhttp_plugin.so +%{vlc_plugindir}/access/libhttps_plugin.so +%{vlc_plugindir}/access/libidummy_plugin.so +%{vlc_plugindir}/access/libimem_plugin.so +%{vlc_plugindir}/access/librist_plugin.so +%{vlc_plugindir}/access/librtp_plugin.so +%{vlc_plugindir}/access/libsatip_plugin.so +%{vlc_plugindir}/access/libsdp_plugin.so +%{vlc_plugindir}/access/libshm_plugin.so +%{vlc_plugindir}/access/libtcp_plugin.so +%{vlc_plugindir}/access/libtimecode_plugin.so +%{vlc_plugindir}/access/libudp_plugin.so +%{vlc_plugindir}/access/libvcd_plugin.so +%{vlc_plugindir}/access/libvdr_plugin.so +%{vlc_plugindir}/access_output/libaccess_output_dummy_plugin.so +%{vlc_plugindir}/access_output/libaccess_output_file_plugin.so +%{vlc_plugindir}/access_output/libaccess_output_http_plugin.so +%{vlc_plugindir}/access_output/libaccess_output_livehttp_plugin.so +%{vlc_plugindir}/access_output/libaccess_output_rist_plugin.so +%{vlc_plugindir}/access_output/libaccess_output_shout_plugin.so +%{vlc_plugindir}/access_output/libaccess_output_udp_plugin.so +%{vlc_plugindir}/audio_filter/libaudio_format_plugin.so +%{vlc_plugindir}/audio_filter/libaudiobargraph_a_plugin.so +%{vlc_plugindir}/audio_filter/libchorus_flanger_plugin.so +%{vlc_plugindir}/audio_filter/libcompressor_plugin.so +%{vlc_plugindir}/audio_filter/libdolby_surround_decoder_plugin.so +%{vlc_plugindir}/audio_filter/libequalizer_plugin.so +%{vlc_plugindir}/audio_filter/libgain_plugin.so +%{vlc_plugindir}/audio_filter/libheadphone_channel_mixer_plugin.so +%{vlc_plugindir}/audio_filter/libkaraoke_plugin.so +%{vlc_plugindir}/audio_filter/libmono_plugin.so +%{vlc_plugindir}/audio_filter/libnormvol_plugin.so +%{vlc_plugindir}/audio_filter/libparam_eq_plugin.so +%{vlc_plugindir}/audio_filter/libremap_plugin.so +%{vlc_plugindir}/audio_filter/libscaletempo_pitch_plugin.so +%{vlc_plugindir}/audio_filter/libscaletempo_plugin.so +%{vlc_plugindir}/audio_filter/libsimple_channel_mixer_plugin.so +%{vlc_plugindir}/audio_filter/libspatializer_plugin.so +%{vlc_plugindir}/audio_filter/libstereo_widen_plugin.so +%{vlc_plugindir}/audio_filter/libtospdif_plugin.so +%{vlc_plugindir}/audio_filter/libtrivial_channel_mixer_plugin.so +%{vlc_plugindir}/audio_filter/libugly_resampler_plugin.so +%{vlc_plugindir}/audio_mixer/libfloat_mixer_plugin.so +%{vlc_plugindir}/audio_mixer/libinteger_mixer_plugin.so +%{vlc_plugindir}/audio_output/libadummy_plugin.so +%{vlc_plugindir}/audio_output/libafile_plugin.so +%{vlc_plugindir}/audio_output/libalsa_plugin.so +%{vlc_plugindir}/audio_output/libamem_plugin.so +%{vlc_plugindir}/codec/liba52_plugin.so +%{vlc_plugindir}/codec/libadpcm_plugin.so +%{vlc_plugindir}/codec/libaes3_plugin.so +%{vlc_plugindir}/codec/libaraw_plugin.so +%{vlc_plugindir}/codec/libcc_plugin.so +%{vlc_plugindir}/codec/libcdg_plugin.so +%{vlc_plugindir}/codec/libcvdsub_plugin.so +%{vlc_plugindir}/codec/libdav1d_plugin.so +%{vlc_plugindir}/codec/libddummy_plugin.so +%{vlc_plugindir}/codec/libdvbsub_plugin.so +%{vlc_plugindir}/codec/libedummy_plugin.so +%{vlc_plugindir}/codec/libfdkaac_plugin.so +%{vlc_plugindir}/codec/libflac_plugin.so +%{vlc_plugindir}/codec/libg711_plugin.so +%{vlc_plugindir}/codec/libjpeg_plugin.so +%{vlc_plugindir}/codec/liblpcm_plugin.so +%{vlc_plugindir}/codec/libmpg123_plugin.so +%{vlc_plugindir}/codec/liboggspots_plugin.so +%{vlc_plugindir}/codec/libopus_plugin.so +%{vlc_plugindir}/codec/libpng_plugin.so +%{vlc_plugindir}/codec/librawvideo_plugin.so +%{vlc_plugindir}/codec/librtpvideo_plugin.so +%{vlc_plugindir}/codec/libscte18_plugin.so +%{vlc_plugindir}/codec/libscte27_plugin.so +%{vlc_plugindir}/codec/libspdif_plugin.so +%{vlc_plugindir}/codec/libspeex_plugin.so +%{vlc_plugindir}/codec/libspudec_plugin.so +%{vlc_plugindir}/codec/libstl_plugin.so +%{vlc_plugindir}/codec/libsubsdec_plugin.so +%{vlc_plugindir}/codec/libsubstx3g_plugin.so +%{vlc_plugindir}/codec/libsubsusf_plugin.so +%{vlc_plugindir}/codec/libsvcdsub_plugin.so +%{vlc_plugindir}/codec/libt140_plugin.so +%{vlc_plugindir}/codec/libtextst_plugin.so +%{vlc_plugindir}/codec/libtheora_plugin.so +%{vlc_plugindir}/codec/libttml_plugin.so +%{vlc_plugindir}/codec/libtwolame_plugin.so +%{vlc_plugindir}/codec/libuleaddvaudio_plugin.so +%{vlc_plugindir}/codec/libvorbis_plugin.so +%{vlc_plugindir}/codec/libvpx_plugin.so +%{vlc_plugindir}/codec/libwebvtt_plugin.so +%{vlc_plugindir}/codec/libxwd_plugin.so +%{vlc_plugindir}/control/libdbus_plugin.so +%{vlc_plugindir}/control/libdummy_plugin.so +%{vlc_plugindir}/control/libgestures_plugin.so +%{vlc_plugindir}/control/libhotkeys_plugin.so +%{vlc_plugindir}/control/libmotion_plugin.so +%{vlc_plugindir}/control/libnetsync_plugin.so +%{vlc_plugindir}/control/liboldrc_plugin.so +%{vlc_plugindir}/demux/libadaptive_plugin.so +%{vlc_plugindir}/demux/libaiff_plugin.so +%{vlc_plugindir}/demux/libasf_plugin.so +%{vlc_plugindir}/demux/libau_plugin.so +%{vlc_plugindir}/demux/libavi_plugin.so +%{vlc_plugindir}/demux/libcaf_plugin.so +%{vlc_plugindir}/demux/libdemux_cdg_plugin.so +%{vlc_plugindir}/demux/libdemux_chromecast_plugin.so +%{vlc_plugindir}/demux/libdemux_stl_plugin.so +%{vlc_plugindir}/demux/libdemuxdump_plugin.so +%{vlc_plugindir}/demux/libdiracsys_plugin.so +%{vlc_plugindir}/demux/libdirectory_demux_plugin.so +%{vlc_plugindir}/demux/libes_plugin.so +%{vlc_plugindir}/demux/libflacsys_plugin.so +%{vlc_plugindir}/demux/libh26x_plugin.so +%{vlc_plugindir}/demux/libimage_plugin.so +%{vlc_plugindir}/demux/libmjpeg_plugin.so +%{vlc_plugindir}/demux/libmp4_plugin.so +%{vlc_plugindir}/demux/libmpgv_plugin.so +%{vlc_plugindir}/demux/libnoseek_plugin.so +%{vlc_plugindir}/demux/libnsc_plugin.so +%{vlc_plugindir}/demux/libnsv_plugin.so +%{vlc_plugindir}/demux/libnuv_plugin.so +%{vlc_plugindir}/demux/libogg_plugin.so +%{vlc_plugindir}/demux/libplaylist_plugin.so +%{vlc_plugindir}/demux/libps_plugin.so +%{vlc_plugindir}/demux/libpva_plugin.so +%{vlc_plugindir}/demux/librawaud_plugin.so +%{vlc_plugindir}/demux/librawdv_plugin.so +%{vlc_plugindir}/demux/librawvid_plugin.so +%{vlc_plugindir}/demux/libreal_plugin.so +%{vlc_plugindir}/demux/libsmf_plugin.so +%{vlc_plugindir}/demux/libsubtitle_plugin.so +%{vlc_plugindir}/demux/libtta_plugin.so +%{vlc_plugindir}/demux/libty_plugin.so +%{vlc_plugindir}/demux/libvc1_plugin.so +%{vlc_plugindir}/demux/libvobsub_plugin.so +%{vlc_plugindir}/demux/libvoc_plugin.so +%{vlc_plugindir}/demux/libwav_plugin.so +%{vlc_plugindir}/demux/libxa_plugin.so +%{vlc_plugindir}/keystore/libfile_keystore_plugin.so +%{vlc_plugindir}/keystore/libmemory_keystore_plugin.so +%{vlc_plugindir}/logger/libconsole_logger_plugin.so +%{vlc_plugindir}/logger/libfile_logger_plugin.so +%{vlc_plugindir}/logger/libsd_journal_plugin.so +%{vlc_plugindir}/logger/libsyslog_plugin.so +%{vlc_plugindir}/meta_engine/libfolder_plugin.so +%{vlc_plugindir}/meta_engine/libtaglib_plugin.so +%{vlc_plugindir}/misc/libaddonsfsstorage_plugin.so +%{vlc_plugindir}/misc/libaddonsvorepository_plugin.so +%{vlc_plugindir}/misc/libaudioscrobbler_plugin.so +%{vlc_plugindir}/misc/libdbus_screensaver_plugin.so +%{vlc_plugindir}/misc/libexport_plugin.so +%{vlc_plugindir}/misc/libfingerprinter_plugin.so +%{vlc_plugindir}/misc/libgnutls_plugin.so +%{vlc_plugindir}/misc/liblogger_plugin.so +%{vlc_plugindir}/misc/libstats_plugin.so +%{vlc_plugindir}/misc/libvod_rtsp_plugin.so +%{vlc_plugindir}/misc/libxdg_screensaver_plugin.so +%{vlc_plugindir}/misc/libxml_plugin.so +%{vlc_plugindir}/mux/libmux_asf_plugin.so +%{vlc_plugindir}/mux/libmux_avi_plugin.so +%{vlc_plugindir}/mux/libmux_dummy_plugin.so +%{vlc_plugindir}/mux/libmux_mp4_plugin.so +%{vlc_plugindir}/mux/libmux_mpjpeg_plugin.so +%{vlc_plugindir}/mux/libmux_ogg_plugin.so +%{vlc_plugindir}/mux/libmux_ps_plugin.so +%{vlc_plugindir}/mux/libmux_wav_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_a52_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_av1_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_copy_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_dirac_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_dts_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_flac_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_h264_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_hevc_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_mlp_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_mpeg4audio_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_mpeg4video_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_mpegaudio_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_mpegvideo_plugin.so +%{vlc_plugindir}/packetizer/libpacketizer_vc1_plugin.so +%{vlc_plugindir}/services_discovery/libmediadirs_plugin.so +%{vlc_plugindir}/services_discovery/libpodcast_plugin.so +%{vlc_plugindir}/services_discovery/libsap_plugin.so +%{vlc_plugindir}/spu/libaudiobargraph_v_plugin.so +%{vlc_plugindir}/spu/libdynamicoverlay_plugin.so +%{vlc_plugindir}/spu/liblogo_plugin.so +%{vlc_plugindir}/spu/libmarq_plugin.so +%{vlc_plugindir}/spu/libmosaic_plugin.so +%{vlc_plugindir}/spu/libremoteosd_plugin.so +%{vlc_plugindir}/spu/librss_plugin.so +%{vlc_plugindir}/spu/libsubsdelay_plugin.so +%{vlc_plugindir}/stream_filter/libadf_plugin.so +%{vlc_plugindir}/stream_filter/libcache_block_plugin.so +%{vlc_plugindir}/stream_filter/libcache_read_plugin.so +%{vlc_plugindir}/stream_filter/libdecomp_plugin.so +%{vlc_plugindir}/stream_filter/libhds_plugin.so +%{vlc_plugindir}/stream_filter/libinflate_plugin.so +%{vlc_plugindir}/stream_filter/libprefetch_plugin.so +%{vlc_plugindir}/stream_filter/librecord_plugin.so +%{vlc_plugindir}/stream_filter/libskiptags_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_autodel_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_bridge_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_cycle_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_delay_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_description_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_display_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_dummy_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_duplicate_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_es_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_gather_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_mosaic_bridge_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_record_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_rtp_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_setid_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_smem_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_standard_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_stats_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_transcode_plugin.so +%{vlc_plugindir}/text_renderer/libtdummy_plugin.so %exclude %{vlc_plugindir}/video_chroma/libswscale_plugin.so -%{vlc_plugindir}/video_chroma/ -%if %{with opencv} -%exclude %{vlc_plugindir}/video_filter/libopencv_*.so -%endif +%{vlc_plugindir}/video_chroma/*.so %exclude %{vlc_plugindir}/video_filter/libpostproc_plugin.so -%{vlc_plugindir}/video_filter/ -%dir %{vlc_plugindir}/video_output/ +%exclude %{vlc_plugindir}/video_filter/libopencv_*.so +%{vlc_plugindir}/video_filter/*.so %{vlc_plugindir}/video_output/libfb_plugin.so %{vlc_plugindir}/video_output/libvdummy_plugin.so %{vlc_plugindir}/video_output/libvmem_plugin.so %{vlc_plugindir}/video_output/libyuv_plugin.so -%dir %{vlc_plugindir}/video_splitter/ -%dir %{vlc_plugindir}/visualization/ -%dir %{_datadir}/vlc/ + +%files plugins-extra +%{vlc_plugindir}/access/libaccess_mtp_plugin.so +%{vlc_plugindir}/access/libaccess_srt_plugin.so +%{vlc_plugindir}/access/libcdda_plugin.so +%if %{with asdcp} +%{vlc_plugindir}/access/libdcp_plugin.so +%endif +%{vlc_plugindir}/access/libdvb_plugin.so +%{vlc_plugindir}/access/libdvdnav_plugin.so +%{vlc_plugindir}/access/libdvdread_plugin.so +%{vlc_plugindir}/access/liblibbluray_plugin.so +%{vlc_plugindir}/access/liblive555_plugin.so +%{vlc_plugindir}/access/libnfs_plugin.so +%{vlc_plugindir}/access/libsftp_plugin.so +%{vlc_plugindir}/access/liblinsys_hdsdi_plugin.so +%{vlc_plugindir}/access/liblinsys_sdi_plugin.so +%{vlc_plugindir}/access/libv4l2_plugin.so +%{vlc_plugindir}/access/libxcb_screen_plugin.so +%{vlc_plugindir}/access_output/libaccess_output_srt_plugin.so +%{vlc_plugindir}/audio_filter/libmad_plugin.so +%{vlc_plugindir}/audio_filter/libsamplerate_plugin.so +%{vlc_plugindir}/audio_filter/libsoxr_plugin.so +%{vlc_plugindir}/audio_filter/libspatialaudio_plugin.so +%{vlc_plugindir}/audio_filter/libspeex_resampler_plugin.so +%{vlc_plugindir}/codec/libaom_plugin.so +%{vlc_plugindir}/codec/libaribsub_plugin.so +%{vlc_plugindir}/codec/libdaala_plugin.so +%{vlc_plugindir}/codec/libdca_plugin.so +%{vlc_plugindir}/codec/libkate_plugin.so +%{vlc_plugindir}/codec/liblibass_plugin.so +%{vlc_plugindir}/codec/liblibmpeg2_plugin.so +%if %{with vpl} +%{vlc_plugindir}/codec/libqsv_plugin.so +%endif +%{vlc_plugindir}/codec/libschroedinger_plugin.so +%{vlc_plugindir}/codec/libsdl_image_plugin.so +%{vlc_plugindir}/codec/libzvbi_plugin.so +%{vlc_plugindir}/control/liblirc_plugin.so +%{vlc_plugindir}/demux/libgme_plugin.so +%{vlc_plugindir}/demux/libmpc_plugin.so +%{vlc_plugindir}/demux/libmkv_plugin.so +%{vlc_plugindir}/demux/libmod_plugin.so +%{vlc_plugindir}/demux/libts_plugin.so +%{vlc_plugindir}/mux/libmux_ts_plugin.so +%{vlc_plugindir}/services_discovery/libavahi_plugin.so +%{vlc_plugindir}/services_discovery/libmicrodns_plugin.so +%{vlc_plugindir}/services_discovery/libmtp_plugin.so +%{vlc_plugindir}/services_discovery/libupnp_plugin.so +%{vlc_plugindir}/services_discovery/libudev_plugin.so +%{vlc_plugindir}/stream_extractor/libarchive_plugin.so +%{vlc_plugindir}/stream_filter/libaribcam_plugin.so +%{vlc_plugindir}/stream_out/libstream_out_chromecast_plugin.so +%{vlc_plugindir}/text_renderer/libfreetype_plugin.so +%{vlc_plugindir}/video_output/libaa_plugin.so +%{vlc_plugindir}/video_output/libcaca_plugin.so %if %{with crystalhd} %files plugin-crystalhd @@ -880,6 +1205,9 @@ make check %{vlc_plugindir}/audio_output/libpulse_plugin.so %{vlc_plugindir}/services_discovery/libpulselist_plugin.so +%files plugin-rdp +%{vlc_plugindir}/access/librdp_plugin.so + %files plugin-samba %{vlc_plugindir}/access/libsmb_plugin.so @@ -895,11 +1223,22 @@ make check %{vlc_plugindir}/vaapi/*.so %exclude %{vlc_plugindir}/vdpau/libvdpau_avcodec_plugin.so %{vlc_plugindir}/vdpau/*.so -%exclude %{vlc_plugindir}/video_output/libfb_plugin.so -%exclude %{vlc_plugindir}/video_output/libvdummy_plugin.so -%exclude %{vlc_plugindir}/video_output/libvmem_plugin.so -%exclude %{vlc_plugindir}/video_output/libyuv_plugin.so -%{vlc_plugindir}/video_output/*.so +%{vlc_plugindir}/video_output/libegl_wl_plugin.so +%{vlc_plugindir}/video_output/libegl_x11_plugin.so +%{vlc_plugindir}/video_output/libflaschen_plugin.so +%{vlc_plugindir}/video_output/libgl_plugin.so +%{vlc_plugindir}/video_output/libglconv_vaapi_drm_plugin.so +%{vlc_plugindir}/video_output/libglconv_vaapi_wl_plugin.so +%{vlc_plugindir}/video_output/libglconv_vaapi_x11_plugin.so +%{vlc_plugindir}/video_output/libglconv_vdpau_plugin.so +%{vlc_plugindir}/video_output/libgles2_plugin.so +%{vlc_plugindir}/video_output/libglx_plugin.so +%{vlc_plugindir}/video_output/libwl_shell_plugin.so +%{vlc_plugindir}/video_output/libwl_shm_plugin.so +%{vlc_plugindir}/video_output/libxcb_window_plugin.so +%{vlc_plugindir}/video_output/libxcb_x11_plugin.so +%{vlc_plugindir}/video_output/libxcb_xv_plugin.so +%{vlc_plugindir}/video_output/libxdg_shell_plugin.so %{vlc_plugindir}/video_splitter/*.so %files plugin-visualization @@ -920,10 +1259,55 @@ make check %changelog -* Thu Dec 26 2024 Dmitriy Samoylik - 3.0.20-12 -- Rebuilt for MSVSphere 10 +* Sun Dec 29 2024 Dmitriy Samoylik - 3.0.21-11 +- Update to 3.0.21-11 ## START: Generated by rpmautospec +* Sun Oct 06 2024 Yaakov Selkowitz - 1:3.0.21-11 +- Enable aribcam + +* Fri Oct 04 2024 Neal Gompa - 1:3.0.21-10 +- Rebuild for live555 update + +* Sun Sep 29 2024 Yaakov Selkowitz - 1:3.0.21-9 +- Port to ffmpeg 7.0 + +* Wed Sep 25 2024 Yaakov Selkowitz - 1:3.0.21-8 +- Fix file listing for EPEL 9 + +* Mon Sep 16 2024 Yaakov Selkowitz - 1:3.0.21-7 +- Enable aribsub + +* Fri Sep 06 2024 Yaakov Selkowitz - 1:3.0.21-6 +- Fix opus channel mapping family one parsing + +* Fri Sep 06 2024 Yaakov Selkowitz - 1:3.0.21-5 +- Add plugins-all, separate plugins-extra + +* Sat Jul 20 2024 Fedora Release Engineering - 1:3.0.21-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Sun Jul 14 2024 Yaakov Selkowitz - 1:3.0.21-3 +- Enable RDP access plugin + +* Thu Jun 06 2024 Yaakov Selkowitz - 1:3.0.21-2 +- Adjust libplacebo dependency for EPEL 9 + +* Thu Jun 06 2024 Yaakov Selkowitz - 1:3.0.21-1 +- Update to 3.0.21 + +* Mon Jun 03 2024 Yaakov Selkowitz - 1:3.0.20-15 +- Fix lua web interface + +* Mon Jun 03 2024 Yaakov Selkowitz - 1:3.0.20-15 +- Port to libidn2 + +* Fri May 17 2024 Yaakov Selkowitz - 1:3.0.20-14 +- Update kde-filesystem dependency for F40 + +* Tue Apr 09 2024 Dominik 'Rathann' Mierzejewski - 1:3.0.20-13 +- rebuild for live555 2024.03.08 + * Thu Feb 08 2024 Pete Walter - 1:3.0.20-12 - Rebuild for libvpx 1.14.x