Changes of Revision 386

vlc-beta.patch Changed
x
 
1
@@ -73,17 +73,29 @@
2
  #else // _WIN32
3
 --- a/modules/gui/qt/maininterface/compositor.cpp
4
 +++ b/modules/gui/qt/maininterface/compositor.cpp
5
-@@ -215,8 +215,10 @@ void CompositorVideo::windowDestroy()
6
+@@ -212,11 +212,11 @@ void CompositorVideo::commonSetupVoutWindow(vlc_window_t* p_wnd, VoutDestroyCb d
7
+ 
8
+ void CompositorVideo::windowDestroy()
9
+ {
10
++disconnect(m_videoSurfaceProvider.get(), &VideoSurfaceProvider::surfacePositionChanged, this, &CompositorVideo::onSurfacePositionChanged);
11
++disconnect(m_videoSurfaceProvider.get(), &VideoSurfaceProvider::surfaceSizeChanged, this, &CompositorVideo::onSurfaceSizeChanged);
12
      if (m_destroyCb)
13
          m_destroyCb(m_wnd);
14
  
15
-+QMetaObject::invokeMethod(this, this() {
16
-     m_videoSurfaceProvider.reset();
17
-     m_videoWindowHandler.reset();
18
-+}, Qt::QueuedConnection);
19
+-    m_videoSurfaceProvider.reset();
20
+-    m_videoWindowHandler.reset();
21
  }
22
  
23
  void CompositorVideo::windowResize(unsigned width, unsigned height)
24
+@@ -323,6 +323,8 @@ void CompositorVideo::commonGUIDestroy()
25
+ 
26
+ void CompositorVideo::commonIntfDestroy()
27
+ {
28
++    m_videoSurfaceProvider.reset();
29
++    m_videoWindowHandler.reset();
30
+     unloadGUI();
31
+ }
32
+ 
33
 --- a/src/Makefile.am
34
 +++ b/src/Makefile.am
35
 @@ -568,7 +568,7 @@ libvlccore_la_LDFLAGS = \
36
_service:obs_scm:vlc-beta-20240812.9b737741e3.obscpio/contrib/src/gcrypt/rules.mak -> _service:obs_scm:vlc-beta-20240815.0362563244.obscpio/contrib/src/gcrypt/rules.mak Changed
21
 
1
@@ -48,19 +48,8 @@
2
 endif
3
 endif
4
 ifdef HAVE_DARWIN_OS
5
-ifeq ($(ARCH),x86_64)
6
 GCRYPT_CONF += ac_cv_sys_symbol_underscore=yes
7
 endif
8
-endif
9
-ifdef HAVE_MACOSX
10
-GCRYPT_CONF += --disable-aesni-support
11
-ifeq ($(ARCH),aarch64)
12
-GCRYPT_CONF += --disable-asm --disable-arm-crypto-support
13
-endif
14
-endif
15
-ifdef HAVE_BSD
16
-GCRYPT_CONF += --disable-asm --disable-aesni-support
17
-endif
18
 ifdef HAVE_ANDROID
19
 ifeq ($(ANDROID_ABI), x86)
20
 GCRYPT_CONF += ac_cv_sys_symbol_underscore=no
21
_service:obs_scm:vlc-beta-20240812.9b737741e3.obscpio/include/vlc_meta.h -> _service:obs_scm:vlc-beta-20240815.0362563244.obscpio/include/vlc_meta.h Changed
9
 
1
@@ -124,6 +124,7 @@
2
 VLC_API int input_item_WriteMeta(vlc_object_t *, input_item_t *);
3
 
4
 #define vlc_meta_Set( meta, meta_type, b )             vlc_meta_SetWithPriority( meta, meta_type, b, VLC_META_PRIORITY_BASIC )
5
+#define vlc_meta_SetWithPlaylistPriority( meta, meta_type, b ) vlc_meta_SetWithPriority( meta, meta_type, b, VLC_META_PRIORITY_PLAYLIST )
6
 #define vlc_meta_SetExtra( meta, psz_name, psz_value ) vlc_meta_SetExtraWithPriority( meta, psz_name, psz_value, VLC_META_PRIORITY_BASIC )
7
 
8
 /* Setters for meta.
9
_service:obs_scm:vlc-beta-20240812.9b737741e3.obscpio/modules/audio_output/apple/avsamplebuffer.m -> _service:obs_scm:vlc-beta-20240815.0362563244.obscpio/modules/audio_output/apple/avsamplebuffer.m Changed
181
 
1
@@ -74,8 +74,10 @@
2
 
3
     int64_t _ptsSamples;
4
     vlc_tick_t _firstPts;
5
+    vlc_tick_t _lastDate;
6
     unsigned _sampleRate;
7
     BOOL _stopped;
8
+    BOOL _dateReached;
9
 }
10
 @end
11
 
12
@@ -98,6 +100,26 @@
13
     _outChain = NULL;
14
     _outChainLast = &_outChain;
15
 
16
+    /* The first call to CMAudioFormatDescriptionCreate() might take some time
17
+     * (between 200 and 600ms) as it is initializing some static context/libs.
18
+     * Therefore, call it from the Open() callback with dummy params. Indeed,
19
+     * the playback is not yet started and a longer Open() call won't mess with
20
+     * playback timings. */
21
+    static const AudioStreamBasicDescription dummyDesc = {
22
+        .mSampleRate = 48000,
23
+        .mFormatID = kAudioFormatLinearPCM,
24
+        .mFormatFlags = kAudioFormatFlagsNativeFloatPacked,
25
+        .mChannelsPerFrame = 2,
26
+        .mFramesPerPacket = 1,
27
+        .mBitsPerChannel = 32,
28
+    };
29
+    CMAudioFormatDescriptionRef dummyFmtDesc;
30
+    OSStatus status =
31
+        CMAudioFormatDescriptionCreate(kCFAllocatorDefault, &dummyDesc, 0, nil,
32
+                                       0, nil, nil, &dummyFmtDesc);
33
+    if (status == noErr)
34
+        CFRelease(dummyFmtDesc);
35
+
36
     self = super init;
37
     if (self == nil)
38
         return nil;
39
@@ -209,7 +231,9 @@
40
         self stopSyncRenderer;
41
 
42
     _ptsSamples = -1;
43
+    _dateReached = NO;
44
     _firstPts = VLC_TICK_INVALID;
45
+    _lastDate = VLC_TICK_INVALID;
46
 }
47
 
48
 - (void)pause:(BOOL)pause date:(vlc_tick_t)date
49
@@ -232,12 +256,65 @@
50
     aout_TimingReport(_aout, system_now, pos_ticks);
51
 }
52
 
53
+- (void)startNow:(vlc_tick_t)delta
54
+{
55
+    assert(!_dateReached);
56
+
57
+    _dateReached = YES;
58
+    CMTime time = CMTimeMake(0, _sampleRate);
59
+    _sync setRate:1.0f time:time;
60
+
61
+    const CMTime interval = CMTimeMake(CLOCK_FREQ, CLOCK_FREQ);
62
+    __weak typeof(self) weakSelf = self;
63
+    _observer = _sync addPeriodicTimeObserverForInterval:interval
64
+                                                    queue:_timeQueue
65
+                                               usingBlock:^ (CMTime time){
66
+        weakSelf whenTimeObserved:time;
67
+    };
68
+}
69
+
70
 - (void)whenDataReady
71
 {
72
     vlc_mutex_lock(&_bufferLock);
73
 
74
-    while (_renderer.readyForMoreMediaData)
75
+    while (_renderer.readyForMoreMediaData || !_dateReached)
76
     {
77
+        if (!_dateReached)
78
+        {
79
+            /* Start playback at the requested date */
80
+
81
+            CMTime writtenTime = CMTimeMake(_ptsSamples, _sampleRate);
82
+            vlc_tick_t writtenTicks = VLCAVSample CMTimeTotick:writtenTime;
83
+            vlc_tick_t now = vlc_tick_now();
84
+            vlc_tick_t deadline = _lastDate - writtenTicks;
85
+            vlc_tick_t delta = deadline - now;
86
+
87
+            if (delta <= 0)
88
+            {
89
+                msg_Dbg(_aout, "starting late (%"PRId64" us)", delta);
90
+                self startNow:delta;
91
+            }
92
+            else
93
+            {
94
+                msg_Dbg(_aout, "deferring start (%"PRId64" us)", delta);
95
+
96
+                int timeout = 0;
97
+                /* Wait for the start date if there are no buffers to enqueue */
98
+                while (!_stopped && _outChain == NULL && timeout == 0)
99
+                {
100
+                    timeout = vlc_cond_timedwait(&_bufferWait, &_bufferLock,
101
+                                                 deadline);
102
+                    deadline = _lastDate - writtenTicks;
103
+                }
104
+
105
+                if (timeout != 0)
106
+                {
107
+                    msg_Dbg(_aout, "started");
108
+                    self startNow:0;
109
+                }
110
+            }
111
+        }
112
+
113
         while (!_stopped && _outChain == NULL)
114
             vlc_cond_wait(&_bufferWait, &_bufferLock);
115
 
116
@@ -276,29 +353,15 @@
117
     if (_ptsSamples == -1)
118
     {
119
         _stopped = NO;
120
+        _firstPts = block->i_pts;
121
+        _ptsSamples = 0;
122
 
123
         __weak typeof(self) weakSelf = self;
124
         _renderer requestMediaDataWhenReadyOnQueue:_dataQueue usingBlock:^{
125
             weakSelf whenDataReady;
126
         };
127
-
128
-        _firstPts = block->i_pts;
129
-        const CMTime interval = CMTimeMake(CLOCK_FREQ, CLOCK_FREQ);
130
-        _observer = _sync addPeriodicTimeObserverForInterval:interval
131
-                                                        queue:_timeQueue
132
-                                                   usingBlock:^ (CMTime time){
133
-            weakSelf whenTimeObserved:time;
134
-        };
135
-
136
-        _ptsSamples = 0;
137
-        vlc_tick_t delta = date - vlc_tick_now();
138
-        CMTime hostTime = CMTimeAdd(CMClockGetTime(CMClockGetHostTimeClock()),
139
-                                    CMTimeMake(delta, CLOCK_FREQ));
140
-        CMTime time = CMTimeMake(_ptsSamples, _sampleRate);
141
-
142
-        _sync.delaysRateChangeUntilHasSufficientMediaData = NO;
143
-        _sync setRate:1.0f time:time atHostTime:hostTime;
144
     }
145
+    _lastDate = date;
146
 
147
     block_ChainLastAppend(&_outChainLast, block);
148
 
149
@@ -316,12 +379,13 @@
150
 {
151
     _sync.rate = 0.0f;
152
 
153
-    _sync removeTimeObserver:_observer;
154
-
155
     _renderer stopRequestingMediaData;
156
     _renderer flush;
157
 
158
     vlc_mutex_lock(&_bufferLock);
159
+    if (_dateReached)
160
+        _sync removeTimeObserver:_observer;
161
+
162
     _stopped = YES;
163
 
164
     block_ChainRelease(_outChain);
165
@@ -445,10 +509,15 @@
166
         goto error;
167
     }
168
 
169
+    _sync.delaysRateChangeUntilHasSufficientMediaData = NO;
170
     _sync addRenderer:_renderer;
171
 
172
+    _stopped = NO;
173
+    _dateReached = NO;
174
+
175
     _ptsSamples = -1;
176
     _firstPts = VLC_TICK_INVALID;
177
+    _lastDate = VLC_TICK_INVALID;
178
     _sampleRate = fmt->i_rate;
179
     _bytesPerFrame = desc.mBytesPerFrame;
180
 
181
_service:obs_scm:vlc-beta-20240812.9b737741e3.obscpio/modules/codec/avcodec/directx_va.c -> _service:obs_scm:vlc-beta-20240815.0362563244.obscpio/modules/codec/avcodec/directx_va.c Changed
12
 
1
@@ -43,6 +43,10 @@
2
 # error bogus libavcodec DXVA support
3
 #endif
4
 
5
+#ifndef FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO
6
+# define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 // moved to libavcodec/dxva2_internal.h :/
7
+#endif
8
+
9
 #include "directx_va.h"
10
 #include <vlc_codecs.h> // GUID_FMT/GUID_PRINT
11
 
12
_service:obs_scm:vlc-beta-20240812.9b737741e3.obscpio/modules/demux/playlist/m3u.c -> _service:obs_scm:vlc-beta-20240815.0362563244.obscpio/modules/demux/playlist/m3u.c Changed
28
 
1
@@ -231,18 +231,20 @@
2
 
3
     input_item_AddOptions( p_input, meta->i_options, meta->ppsz_options, 0 );
4
 
5
+    vlc_mutex_lock( &p_input->lock );
6
     if( meta->psz_artist )
7
-        input_item_SetArtist( p_input, meta->psz_artist );
8
+        vlc_meta_SetWithPlaylistPriority( p_input->p_meta, vlc_meta_Artist, meta->psz_artist );
9
     if( meta->psz_name )
10
-        input_item_SetTitle( p_input, meta->psz_name );
11
+        vlc_meta_SetWithPlaylistPriority( p_input->p_meta, vlc_meta_Title, meta->psz_name );
12
     if( meta->psz_album_art )
13
-        input_item_SetArtURL( p_input, meta->psz_album_art );
14
+        vlc_meta_SetWithPlaylistPriority( p_input->p_meta, vlc_meta_ArtworkURL, meta->psz_album_art );
15
     if( meta->psz_language )
16
-        input_item_SetLanguage( p_input, meta->psz_language );
17
+        vlc_meta_SetWithPlaylistPriority( p_input->p_meta, vlc_meta_Language, meta->psz_language );
18
+    if( meta->psz_grouptitle )
19
+        vlc_meta_SetWithPlaylistPriority( p_input->p_meta, vlc_meta_Publisher, meta->psz_grouptitle );
20
+    vlc_mutex_unlock( &p_input->lock );
21
     if( meta->psz_tvgid )
22
         input_item_AddInfo( p_input, "XMLTV", "tvg-id", "%s", meta->psz_tvgid );
23
-    if( meta->psz_grouptitle )
24
-        input_item_SetPublisher( p_input, meta->psz_grouptitle );
25
 
26
     input_item_node_AppendItem( p_node, p_input );
27
     input_item_Release( p_input );
28
_service:obs_scm:vlc-beta.obsinfo Changed
9
 
1
@@ -1,4 +1,4 @@
2
 name: vlc-beta
3
-version: 20240812.9b737741e3
4
-mtime: 1723476025
5
-commit: 9b737741e3afa3cd58e6804e7a33283839276fb8
6
+version: 20240815.0362563244
7
+mtime: 1723706179
8
+commit: 03625632442e029760f6ada5dde28f7a85087f03
9