[vlc-commits] [Git][videolan/vlc][master] vout_subpictures: fix bad index in spu_UnregisterChannel
    Steve Lhomme (@robUx4) 
    gitlab at videolan.org
       
    Thu Jan 11 09:38:31 UTC 2024
    
    
  
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
e3bcd78b by Pierre Lamot at 2024-01-11T09:22:21+00:00
vout_subpictures: fix bad index in spu_UnregisterChannel
channel_id is not the position in the list
- - - - -
1 changed file:
- src/video_output/vout_subpictures.c
Changes:
=====================================
src/video_output/vout_subpictures.c
=====================================
@@ -217,14 +217,19 @@ static void spu_channel_EarlyRemoveLate(spu_private_t *sys,
     }
 }
 
-static struct spu_channel *spu_GetChannel(spu_t *spu, size_t channel_id)
+static struct spu_channel *spu_GetChannel(spu_t *spu, size_t channel_id, size_t *index)
 {
     spu_private_t *sys = spu->p;
 
     for (size_t i = 0; i < sys->channels.size; ++i)
+    {
         if (sys->channels.data[i].id == channel_id)
+        {
+            if (index)
+                *index = i;
             return &sys->channels.data[i];
-
+        }
+    }
     vlc_assert_unreachable();
 }
 
@@ -1859,7 +1864,7 @@ void spu_SetClockDelay(spu_t *spu, size_t channel_id, vlc_tick_t delay)
     spu_private_t *sys = spu->p;
 
     vlc_mutex_lock(&sys->lock);
-    struct spu_channel *channel = spu_GetChannel(spu, channel_id);
+    struct spu_channel *channel = spu_GetChannel(spu, channel_id, NULL);
     assert(channel->clock);
     vlc_clock_SetDelay(channel->clock, delay);
     channel->delay = delay;
@@ -1871,7 +1876,7 @@ void spu_SetClockRate(spu_t *spu, size_t channel_id, float rate)
     spu_private_t *sys = spu->p;
 
     vlc_mutex_lock(&sys->lock);
-    struct spu_channel *channel = spu_GetChannel(spu, channel_id);
+    struct spu_channel *channel = spu_GetChannel(spu, channel_id, NULL);
     assert(channel->clock);
     channel->rate = rate;
     vlc_mutex_unlock(&sys->lock);
@@ -1966,7 +1971,7 @@ void spu_PutSubpicture(spu_t *spu, subpicture_t *subpic)
 
     /* */
     vlc_mutex_lock(&sys->lock);
-    struct spu_channel *channel = spu_GetChannel(spu, subpic->i_channel);
+    struct spu_channel *channel = spu_GetChannel(spu, subpic->i_channel, NULL);
 
 
     /* Convert all spu ts */
@@ -2184,7 +2189,7 @@ void spu_ClearChannel(spu_t *spu, size_t channel_id)
 {
     spu_private_t *sys = spu->p;
     vlc_mutex_lock(&sys->lock);
-    struct spu_channel *channel = spu_GetChannel(spu, channel_id);
+    struct spu_channel *channel = spu_GetChannel(spu, channel_id, NULL);
     spu_channel_Clean(sys, channel);
     if (channel->clock)
     {
@@ -2199,9 +2204,10 @@ void spu_UnregisterChannel(spu_t *spu, size_t channel_id)
     spu_private_t *sys = spu->p;
 
     vlc_mutex_lock(&sys->lock);
-    struct spu_channel *channel = spu_GetChannel(spu, channel_id);
+    size_t channel_index = 0;
+    struct spu_channel *channel = spu_GetChannel(spu, channel_id, &channel_index);
     spu_channel_Clean(sys, channel);
-    vlc_vector_remove(&sys->channels, channel_id);
+    vlc_vector_remove(&sys->channels, channel_index);
     vlc_mutex_unlock(&sys->lock);
 }
 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/e3bcd78b3d6c7eb024863357440b325add0c9ebf
-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/e3bcd78b3d6c7eb024863357440b325add0c9ebf
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
    
    
More information about the vlc-commits
mailing list