[vlc-commits] videotoolbox: implement drain

Thomas Guillem git at videolan.org
Fri Jan 20 11:22:10 CET 2017


vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Thu Jan 19 18:57:29 2017 +0100| [c642b422a17c6f996d1447bf31e7494e958e5721] | committer: Thomas Guillem

videotoolbox: implement drain

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c642b422a17c6f996d1447bf31e7494e958e5721
---

 modules/codec/videotoolbox.m | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/modules/codec/videotoolbox.m b/modules/codec/videotoolbox.m
index 43b2c04..f71c50b 100644
--- a/modules/codec/videotoolbox.m
+++ b/modules/codec/videotoolbox.m
@@ -752,8 +752,6 @@ static void CloseDecoder(vlc_object_t *p_this)
     decoder_t *p_dec = (decoder_t *)p_this;
     decoder_sys_t *p_sys = p_dec->p_sys;
 
-    if (p_sys->session)
-        VTDecompressionSessionWaitForAsynchronousFrames(p_sys->session);
     StopVideoToolbox(p_dec);
 
     vlc_mutex_destroy(&p_sys->lock);
@@ -1031,7 +1029,15 @@ static picture_t *DecodeBlock(decoder_t *p_dec, block_t **pp_block)
     int i_ret = 0;
 
     if (!pp_block)
-        return NULL;
+    {
+        /* draining: return last pictures of the reordered queue */
+        if (p_sys->session)
+            VTDecompressionSessionWaitForAsynchronousFrames(p_sys->session);
+        vlc_mutex_lock(&p_sys->lock);
+        picture_t *p_pic = PicReorder_pop(p_dec, true);
+        vlc_mutex_unlock(&p_sys->lock);
+        return p_pic;
+    }
 
     p_block = *pp_block;
 



More information about the vlc-commits mailing list