]> git.sesse.net Git - vlc/commitdiff
vout: destroy the private pool while resetting the decoder pool
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 1 Nov 2014 11:25:36 +0000 (13:25 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 1 Nov 2014 12:30:07 +0000 (14:30 +0200)
Otherwise picture references from the private pool get clobbered.

src/video_output/video_output.c

index 2fc8f65219f815e22b0a7115c56beba864286c77..16054d63a013f7ef02271c736235e835737bb9fb 100644 (file)
@@ -1199,8 +1199,21 @@ static void ThreadFlush(vout_thread_t *vout, bool below, mtime_t date)
 static void ThreadReset(vout_thread_t *vout)
 {
     ThreadFlush(vout, true, INT64_MAX);
-    if (vout->p->decoder_pool)
+    if (vout->p->decoder_pool) {
+        unsigned count;
+
+        if (vout->p->private_pool != NULL) {
+            count = picture_pool_GetSize(vout->p->private_pool);
+            picture_pool_Delete(vout->p->private_pool);
+        }
         picture_pool_Reset(vout->p->decoder_pool);
+        if (vout->p->private_pool != NULL) {
+            vout->p->private_pool = picture_pool_Reserve(vout->p->decoder_pool,
+                                                         count);
+            if (vout->p->private_pool == NULL)
+                abort();
+        }
+    }
     vout->p->pause.is_on = false;
     vout->p->pause.date  = mdate();
 }