Changes of Revision 169

_service:obs_scm:vlc-beta-20220122.32b3f47bf0.obscpio/contrib/src/ffmpeg/rules.mak -> _service:obs_scm:vlc-beta-20220123.99f3721426.obscpio/contrib/src/ffmpeg/rules.mak Changed
x
 
1
@@ -101,6 +101,11 @@
2
 FFMPEGCONF += --arch=mips64
3
 endif
4
 
5
+# RISC-V stuff
6
+ifneq ($(findstring $(ARCH),riscv32 riscv64),)
7
+FFMPEGCONF += --arch=riscv
8
+endif
9
+
10
 # x86 stuff
11
 ifeq ($(ARCH),i386)
12
 ifndef HAVE_DARWIN_OS
13
_service:obs_scm:vlc-beta-20220122.32b3f47bf0.obscpio/contrib/src/gnutls/rules.mak -> _service:obs_scm:vlc-beta-20220123.99f3721426.obscpio/contrib/src/gnutls/rules.mak Changed
17
 
1
@@ -37,7 +37,6 @@
2
    # fix i686 UWP builds as they were using CertEnumCRLsInStore via invalid LoadLibrary
3
    $(APPLY) $(SRC)/gnutls/0001-fix-mingw64-detection.patch
4
 
5
-   $(call pkg_static,"lib/gnutls.pc.in")
6
    $(UPDATE_AUTOCONFIG)
7
    $(MOVE)
8
 
9
@@ -80,6 +79,7 @@
10
 
11
 .gnutls: gnutls
12
    cd $< && $(GNUTLS_ENV) ./configure $(GNUTLS_CONF)
13
+   $(call pkg_static,"lib/gnutls.pc")
14
    cd $< && $(MAKE) -C gl install
15
    cd $< && $(MAKE) -C lib install
16
    touch $@
17
_service:obs_scm:vlc-beta-20220122.32b3f47bf0.obscpio/contrib/src/main-rust.mak -> _service:obs_scm:vlc-beta-20220123.99f3721426.obscpio/contrib/src/main-rust.mak Changed
14
 
1
@@ -33,8 +33,12 @@
2
 ifeq ($(HOST),arm-linux-gnueabihf)
3
 RUST_TARGET = arm-unknown-linux-gnueabihf #add eabihf
4
 else
5
+ifeq ($(HOST),riscv64-linux-gnu)
6
+RUST_TARGET = riscv64gc-unknown-linux-gnu
7
+else
8
 RUST_TARGET = $(ARCH)-unknown-linux-gnu
9
 endif
10
+endif
11
 else ifdef HAVE_BSD
12
 RUST_TARGET = $(HOST)
13
 endif
14
_service:obs_scm:vlc-beta-20220122.32b3f47bf0.obscpio/contrib/src/postproc/rules.mak -> _service:obs_scm:vlc-beta-20220123.99f3721426.obscpio/contrib/src/postproc/rules.mak Changed
13
 
1
@@ -52,6 +52,11 @@
2
 POSTPROCCONF += --arch=mips64
3
 endif
4
 
5
+# RISC-V stuff
6
+ifneq ($(findstring $(ARCH),riscv32 riscv64),)
7
+POSTPROCCONF += --arch=riscv
8
+endif
9
+
10
 # x86 stuff
11
 ifeq ($(ARCH),i386)
12
 POSTPROCCONF += --arch=x86
13
_service:obs_scm:vlc-beta-20220122.32b3f47bf0.obscpio/modules/codec/vorbis.c -> _service:obs_scm:vlc-beta-20220123.99f3721426.obscpio/modules/codec/vorbis.c Changed
16
 
1
@@ -476,10 +476,11 @@
2
     }
3
 
4
     /* Date management */
5
-    if( p_block->i_pts != VLC_TICK_INVALID &&
6
-        p_block->i_pts != date_Get( &p_sys->end_date ) )
7
+    vlc_tick_t pts = p_block->i_pts != VLC_TICK_INVALID ? p_block->i_pts : p_block->i_dts;
8
+    if( pts != VLC_TICK_INVALID &&
9
+        pts != date_Get( &p_sys->end_date ) )
10
     {
11
-        date_Set( &p_sys->end_date, p_block->i_pts );
12
+        date_Set( &p_sys->end_date, pts );
13
     }
14
 
15
     if( date_Get( &p_sys->end_date ) == VLC_TICK_INVALID )
16
_service:obs_scm:vlc-beta-20220122.32b3f47bf0.obscpio/modules/demux/ogg.c -> _service:obs_scm:vlc-beta-20220123.99f3721426.obscpio/modules/demux/ogg.c Changed
193
 
1
@@ -131,9 +131,9 @@
2
 
3
 /* Bitstream manipulation */
4
 static int  Ogg_ReadPage     ( demux_t *, ogg_page * );
5
-static void Ogg_DecodePacket ( demux_t *, logical_stream_t *, ogg_packet * );
6
+static void Ogg_DecodePacket ( demux_t *, logical_stream_t *, ogg_packet *, bool );
7
 static unsigned Ogg_OpusPacketDuration( ogg_packet * );
8
-static void Ogg_QueueBlocks( demux_t *, logical_stream_t *, block_t * );
9
+static void Ogg_QueueBlocks( demux_t *, logical_stream_t *, block_t *, vlc_tick_t, bool );
10
 static void Ogg_SendQueuedBlock( demux_t *, logical_stream_t * );
11
 
12
 static inline bool Ogg_HasQueuedBlocks( const logical_stream_t *p_stream )
13
@@ -576,7 +576,7 @@
14
                 }
15
             }
16
 
17
-            Ogg_DecodePacket( p_demux, p_stream, &oggpacket );
18
+            Ogg_DecodePacket( p_demux, p_stream, &oggpacket, ogg_page_eos( &p_sys->current_page ) );
19
         }
20
 
21
 
22
@@ -999,31 +999,19 @@
23
     }
24
 }
25
 
26
-static vlc_tick_t Ogg_FixupOutputQueue( demux_t *p_demux, logical_stream_t *p_stream )
27
+static vlc_tick_t Ogg_FixupOutputQueue( demux_t *p_demux, logical_stream_t *p_stream,
28
+                                        vlc_tick_t i_enddts, bool b_eos )
29
 {
30
-    vlc_tick_t i_enddts = VLC_TICK_INVALID;
31
+    demux_sys_t *p_sys = p_demux->p_sys;
32
 
33
-#ifdef HAVE_LIBVORBIS
34
-    long i_prev_blocksize = 0;
35
-#else
36
-    VLC_UNUSED(p_demux);
37
-#endif
38
     // PASS 1, set number of samples
39
     unsigned i_total_samples = 0;
40
     for( block_t *p_block = p_stream->queue.p_blocks; p_block; p_block = p_block->p_next )
41
     {
42
-        if( p_block->i_dts != VLC_TICK_INVALID )
43
-        {
44
-            i_enddts = p_block->i_dts;
45
-            break;
46
-        }
47
-
48
         if( p_block->i_flags & BLOCK_FLAG_HEADER )
49
             continue;
50
 
51
         ogg_packet dumb_packet;
52
-        dumb_packet.bytes = p_block->i_buffer;
53
-        dumb_packet.packet = p_block->p_buffer;
54
 
55
         switch( p_stream->fmt.i_codec )
56
         {
57
@@ -1032,6 +1020,10 @@
58
                                         p_stream->special.speex.i_framesperpacket;
59
                 break;
60
             case VLC_CODEC_OPUS:
61
+                dumb_packet.bytes = p_block->i_buffer;
62
+                dumb_packet.packet = p_block->p_buffer;
63
+                /* Less complicated than Vorbis case below as packets samples count
64
+                 * is known for every packet */
65
                 p_block->i_nb_samples = Ogg_OpusPacketDuration( &dumb_packet );
66
                 break;
67
 #ifdef HAVE_LIBVORBIS
68
@@ -1042,13 +1034,30 @@
69
                     msg_Err( p_demux, "missing vorbis headers, can't compute block size" );
70
                     break;
71
                 }
72
+
73
+                if( p_block->p_next == NULL )
74
+                    break;
75
+
76
+                /* Vorbis Hell
77
+                   Samples are computed from N..N+1 window
78
+                   We can set samples for packets up to N-1
79
+                   Last packet is granule pos - total... but
80
+                   that would be too easy without truncation
81
+                   and beginning of stream cases.
82
+                   If that's BOS, we need to truncate on start (negative samples)
83
+                   If that's EOS, we need to truncate the end to match granule.
84
+                   If that's both single page and not starting zero.. we're ***** */
85
+                dumb_packet.bytes = p_block->i_buffer;
86
+                dumb_packet.packet = p_block->p_buffer;
87
                 long i_blocksize = vorbis_packet_blocksize( p_stream->special.vorbis.p_info,
88
                                                             &dumb_packet );
89
-                if ( i_prev_blocksize )
90
-                    p_block->i_nb_samples = ( i_blocksize + i_prev_blocksize ) / 4;
91
-                else
92
-                    p_block->i_nb_samples = i_blocksize / 2;
93
-                i_prev_blocksize = i_blocksize;
94
+                dumb_packet.bytes = p_block->p_next->i_buffer;
95
+                dumb_packet.packet = p_block->p_next->p_buffer;
96
+                long i_nextblocksize = vorbis_packet_blocksize( p_stream->special.vorbis.p_info,
97
+                                                                &dumb_packet );
98
+                /* The spec has 3 specific cases depending on long/short prev/next blocksizes
99
+                   ranging weights from 1/4 to 3/4... but everyone does A/4 + B/4 */
100
+                p_block->i_nb_samples = (i_blocksize + i_nextblocksize) / 4;
101
                 break;
102
             }
103
 #endif
104
@@ -1065,24 +1074,41 @@
105
     {
106
         date_t d = p_stream->dts;
107
         date_Set( &d, i_enddts );
108
-        i_enddts = date_Decrement( &d, i_total_samples );
109
+        date_Decrement( &d, i_total_samples );
110
+
111
+        /* truncate end */
112
+        if( b_eos && date_Get( &d ) < VLC_TICK_0 )
113
+            date_Set( &d, VLC_TICK_0 );
114
+
115
         for( block_t *p_block = p_stream->queue.p_blocks; p_block; p_block = p_block->p_next )
116
         {
117
-            if( p_block->i_dts != VLC_TICK_INVALID )
118
-                break;
119
             if( p_block->i_flags & BLOCK_FLAG_HEADER )
120
                 continue;
121
             p_block->i_dts = date_Get( &d );
122
-            if( p_block->i_dts < VLC_TICK_0 )
123
+
124
+            /* truncate start */
125
+            if( !b_eos && p_block->i_dts < VLC_TICK_0 )
126
                 p_block->i_dts = VLC_TICK_0;
127
+
128
+            /* Last page in the stream case, truncate end */
129
+            if( b_eos && p_block->p_next == NULL )
130
+                p_block->i_dts = __MIN(p_block->i_dts, i_enddts);
131
+
132
+            if( p_sys->i_nzpcr_offset )
133
+                p_block->i_dts += p_sys->i_nzpcr_offset;
134
+
135
+            if( p_stream->fmt.i_cat == AUDIO_ES )
136
+                p_block->i_pts = p_block->i_dts;
137
             date_Increment( &d, p_block->i_nb_samples );
138
         }
139
+
140
     } /* else can't do anything, no timestamped blocks in stream */
141
 
142
     return i_enddts;
143
 }
144
 
145
-static void Ogg_QueueBlocks( demux_t *p_demux, logical_stream_t *p_stream, block_t *p_block )
146
+static void Ogg_QueueBlocks( demux_t *p_demux, logical_stream_t *p_stream,
147
+                             block_t *p_block, vlc_tick_t i_enddts, bool b_eos )
148
 {
149
     demux_sys_t *p_sys = p_demux->p_sys;
150
     VLC_UNUSED(p_sys);
151
@@ -1095,10 +1121,12 @@
152
 
153
     block_ChainLastAppend( &p_stream->queue.pp_append, p_block );
154
 
155
-    if( p_stream->i_pcr == VLC_TICK_INVALID && p_block->i_dts != VLC_TICK_INVALID )
156
+    /* If we can have or compute block start from granule, it is set.
157
+     * Otherwise the end dts will be used for reverse calculation */
158
+    if( p_stream->i_pcr == VLC_TICK_INVALID && i_enddts != VLC_TICK_INVALID )
159
     {
160
         /* fixup queue */
161
-        p_stream->i_pcr = Ogg_FixupOutputQueue( p_demux, p_stream );
162
+        p_stream->i_pcr = Ogg_FixupOutputQueue( p_demux, p_stream, i_enddts, b_eos );
163
     }
164
 
165
     DemuxDebug( msg_Dbg( p_demux, "%4.4s block queued > dts %"PRId64" spcr %"PRId64" pcr %"PRId64,
166
@@ -1186,7 +1214,7 @@
167
  ****************************************************************************/
168
 static void Ogg_DecodePacket( demux_t *p_demux,
169
                               logical_stream_t *p_stream,
170
-                              ogg_packet *p_oggpacket )
171
+                              ogg_packet *p_oggpacket, bool b_eos )
172
 {
173
     demux_sys_t *p_sys = p_demux->p_sys;
174
     block_t *p_block;
175
@@ -1357,6 +1385,8 @@
176
     }
177
 
178
     vlc_tick_t i_dts = Ogg_GranuleToTime( p_stream, p_oggpacket->granulepos, true, false );
179
+    vlc_tick_t i_enddts = (i_dts == VLC_TICK_INVALID) ? Ogg_GranuleToTime( p_stream, p_oggpacket->granulepos, false, false )
180
+                                                      : VLC_TICK_INVALID;
181
     vlc_tick_t i_expected_dts = p_stream->b_interpolation_failed ? VLC_TICK_INVALID :
182
                                 date_Get( &p_stream->dts ); /* Interpolated or previous end time */
183
     if( i_dts == VLC_TICK_INVALID )
184
@@ -1495,7 +1525,7 @@
185
     memcpy( p_block->p_buffer, p_oggpacket->packet + i_header_len,
186
             p_oggpacket->bytes - i_header_len );
187
 
188
-    Ogg_QueueBlocks( p_demux, p_stream, p_block );
189
+    Ogg_QueueBlocks( p_demux, p_stream, p_block, i_enddts, b_eos );
190
 }
191
 
192
 static unsigned Ogg_OpusPacketDuration( ogg_packet *p_oggpacket )
193
_service:obs_scm:vlc-beta-20220122.32b3f47bf0.obscpio/modules/gui/qt/dialogs/preferences/complete_preferences.cpp -> _service:obs_scm:vlc-beta-20220123.99f3721426.obscpio/modules/gui/qt/dialogs/preferences/complete_preferences.cpp Changed
46
 
1
@@ -71,7 +71,7 @@
2
 
3
     /* Create base cat/subcat tree from core config set */
4
     unsigned confsize;
5
-    module_t *p_module = module_get_main();
6
+    module_t *p_module = main_module;
7
     module_config_t *const p_config = module_config_get (p_module, &confsize);
8
     for( size_t i = 0; i < confsize; i++ )
9
     {
10
@@ -295,11 +295,14 @@
11
                      i_module++ )
12
             {
13
                 PrefsTreeItem *mod_item = subcat_item->child( i_module );
14
-                mod_item->panel->apply();
15
+                if( mod_item->panel )
16
+                    mod_item->panel->apply();
17
             }
18
-            subcat_item->panel->apply();
19
+            if( subcat_item->panel )
20
+                subcat_item->panel->apply();
21
         }
22
-        cat_item->panel->apply();
23
+        if( cat_item->panel )
24
+            cat_item->panel->apply();
25
     }
26
 }
27
 
28
@@ -462,16 +465,7 @@
29
 {
30
     bool is_core = this->node_type != PrefsTreeItem::PLUGIN_NODE;
31
     enum vlc_config_subcat id = this->subcat_id;
32
-
33
-    /* find our module */
34
-    module_t *p_module;
35
-    if( !is_core )
36
-        p_module = this->p_module;
37
-    else
38
-    {
39
-        p_module = module_get_main();
40
-        assert( p_module );
41
-    }
42
+    module_t *p_module = this->p_module;
43
 
44
     /* check the node itself (its name/longname/helptext) */
45
 
46
_service:obs_scm:vlc-beta-20220122.32b3f47bf0.obscpio/modules/gui/qt/maininterface/qml/BannerSources.qml -> _service:obs_scm:vlc-beta-20220123.99f3721426.obscpio/modules/gui/qt/maininterface/qml/BannerSources.qml Changed
16
 
1
@@ -80,6 +80,14 @@
2
         anchors.fill: parent
3
     }
4
 
5
+
6
+    MouseArea {
7
+        // don't tranfer mouse to underlying components (#26274)
8
+        anchors.fill: parent
9
+        hoverEnabled: true
10
+        preventStealing: true
11
+    }
12
+
13
     Item {
14
         id: pLBannerSources
15
 
16
_service:obs_scm:vlc-beta-20220122.32b3f47bf0.obscpio/modules/video_output/opengl/Makefile.am -> _service:obs_scm:vlc-beta-20220123.99f3721426.obscpio/modules/video_output/opengl/Makefile.am Changed
12
 
1
@@ -165,6 +165,10 @@
2
 libegl_display_gbm_plugin_la_SOURCES = video_output/opengl/egl_display_gbm.c
3
 libegl_display_gbm_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) $(EGL_FLAGS) $(GBM_CFLAGS)
4
 libegl_display_gbm_plugin_la_LIBADD = $(EGL_LIBS) $(GBM_LIBS)
5
+if HAVE_KMS
6
+# DRM headers are bringing defines useful for opening DRM devices
7
+libegl_display_gbm_plugin_la_CPPFLAGS += $(KMS_CFLAGS) -DHAVE_KMS=1
8
+endif
9
 if HAVE_EGL
10
 if HAVE_GBM
11
 vout_LTLIBRARIES += libegl_display_gbm_plugin.la
12
_service:obs_scm:vlc-beta-20220122.32b3f47bf0.obscpio/modules/video_output/opengl/egl_display_gbm.c -> _service:obs_scm:vlc-beta-20220123.99f3721426.obscpio/modules/video_output/opengl/egl_display_gbm.c Changed
38
 
1
@@ -31,8 +31,13 @@
2
 
3
 #include <EGL/egl.h>
4
 #include <EGL/eglext.h>
5
+
6
 #include <gbm.h>
7
 
8
+#ifdef HAVE_KMS
9
+#include <xf86drm.h>
10
+#endif
11
+
12
 #include "egl_display.h"
13
 
14
 struct sys
15
@@ -57,11 +62,22 @@
16
 static int
17
 OpenDeviceFd(const char **out_path)
18
 {
19
+    /* Usually, /dev/dri/renderD* or /dev/dri/card* on Linux */
20
     static const char *default_drm_device_paths[] = {
21
+#if defined(HAVE_KMS)
22
+    /* OpenBSD has moved to Linux file path for DRM. libdrm defines will
23
+     * provide the correct path, but otherwise we'll always fallback to
24
+     * the standard path for Linux. */
25
+        DRM_DIR_NAME "/" DRM_RENDER_MINOR_NAME "128",
26
+        DRM_DIR_NAME "/" DRM_PRIMARY_MINOR_NAME "0",
27
+        DRM_DIR_NAME "/" DRM_RENDER_MINOR_NAME "129",
28
+        DRM_DIR_NAME "/" DRM_PRIMARY_MINOR_NAME "1",
29
+#else
30
         "/dev/dri/renderD128",
31
         "/dev/dri/card0",
32
         "/dev/dri/renderD129",
33
         "/dev/dri/card1",
34
+#endif
35
     };
36
 
37
     for (size_t i = 0; i < ARRAY_SIZE(default_drm_device_paths); ++i)
38
_service:obs_scm:vlc-beta.obsinfo Changed
10
 
1
@@ -1,5 +1,5 @@
2
 name: vlc-beta
3
-version: 20220122.32b3f47bf0
4
-mtime: 1642839851
5
-commit: 32b3f47bf09b915d2f9f0ff9c58b71bf33834e2e
6
+version: 20220123.99f3721426
7
+mtime: 1642929893
8
+commit: 99f37214269e1737429ced10be92ec5cdf74ea64
9
 
10