[vlc-devel] [RFC PATCH 2/3] vout: add vout_Cancel

Thomas Guillem thomas at gllm.fr
Wed Nov 18 14:32:00 CET 2015


This function will cancel the decoder picture pool.
---
 src/video_output/control.h      |  1 +
 src/video_output/video_output.c | 14 ++++++++++++++
 src/video_output/vout_control.h |  5 +++++
 3 files changed, 20 insertions(+)

diff --git a/src/video_output/control.h b/src/video_output/control.h
index 159e5f8..eff9aa1 100644
--- a/src/video_output/control.h
+++ b/src/video_output/control.h
@@ -29,6 +29,7 @@ enum {
     VOUT_CONTROL_INIT,
     VOUT_CONTROL_CLEAN,
     VOUT_CONTROL_REINIT,                /* cfg */
+    VOUT_CONTROL_CANCEL,
 
 #if 0
     /* */
diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
index 8a70ce7..1c62d9b 100644
--- a/src/video_output/video_output.c
+++ b/src/video_output/video_output.c
@@ -303,6 +303,12 @@ static void VoutDestructor(vlc_object_t *object)
 }
 
 /* */
+void vout_Cancel(vout_thread_t *vout)
+{
+    vout_control_PushVoid(&vout->p->control, VOUT_CONTROL_CANCEL);
+    vout_control_WaitEmpty(&vout->p->control);
+}
+
 void vout_ChangePause(vout_thread_t *vout, bool is_paused, mtime_t date)
 {
     vout_control_cmd_t cmd;
@@ -1447,6 +1453,11 @@ static int ThreadReinit(vout_thread_t *vout,
     return VLC_SUCCESS;
 }
 
+static void ThreadCancel(vout_thread_t *vout)
+{
+    picture_pool_Cancel(vout->p->decoder_pool);
+}
+
 static int ThreadControl(vout_thread_t *vout, vout_control_cmd_t cmd)
 {
     switch(cmd.type) {
@@ -1466,6 +1477,9 @@ static int ThreadControl(vout_thread_t *vout, vout_control_cmd_t cmd)
         if (ThreadReinit(vout, cmd.u.cfg))
             return 1;
         break;
+    case VOUT_CONTROL_CANCEL:
+        ThreadCancel(vout);
+        break;
     case VOUT_CONTROL_SUBPICTURE:
         ThreadDisplaySubpicture(vout, cmd.u.subpicture);
         cmd.u.subpicture = NULL;
diff --git a/src/video_output/vout_control.h b/src/video_output/vout_control.h
index 2cbb9f9..2c73c9a 100644
--- a/src/video_output/vout_control.h
+++ b/src/video_output/vout_control.h
@@ -52,6 +52,11 @@ void vout_Flush( vout_thread_t *p_vout, mtime_t i_date );
  */
 void vout_Reset( vout_thread_t *p_vout );
 
+/*
+ * Cancel the vout, it won't return any pictures after this call.
+ */
+void vout_Cancel( vout_thread_t *p_vout );
+
 /**
  * This function will force to display the next picture while paused
  */
-- 
2.1.4



More information about the vlc-devel mailing list