[vlc-commits] video_output: don't let the display module deal with subpicture release

Steve Lhomme git at videolan.org
Sat Oct 27 10:14:56 CEST 2018


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Sat Oct 27 08:25:25 2018 +0200| [88bc523488c49cf856abe597bfb98b1e860d9c88] | committer: Thomas Guillem

video_output: don't let the display module deal with subpicture release

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

 modules/hw/mmal/vout.c                  | 3 ---
 modules/hw/vdpau/display.c              | 8 ++------
 modules/video_output/android/display.c  | 4 +---
 modules/video_output/caopengllayer.m    | 4 +---
 modules/video_output/ios.m              | 4 +---
 modules/video_output/macosx.m           | 4 +---
 modules/video_output/opengl/display.c   | 4 +---
 modules/video_output/win32/direct3d11.c | 3 +--
 modules/video_output/win32/direct3d9.c  | 7 +------
 modules/video_output/win32/glwin32.c    | 3 +--
 src/video_output/vout_wrapper.h         | 2 ++
 11 files changed, 12 insertions(+), 34 deletions(-)

diff --git a/modules/hw/mmal/vout.c b/modules/hw/mmal/vout.c
index b9ca560eeb..2a83045522 100644
--- a/modules/hw/mmal/vout.c
+++ b/modules/hw/mmal/vout.c
@@ -595,9 +595,6 @@ static void vd_display(vout_display_t *vd, picture_t *picture,
 
     display_subpicture(vd, subpicture);
 
-    if (subpicture)
-        subpicture_Delete(subpicture);
-
     if (sys->next_phase_check == 0 && sys->adjust_refresh_rate)
         maintain_phase_sync(vd);
     sys->next_phase_check = (sys->next_phase_check + 1) % PHASE_CHECK_INTERVAL;
diff --git a/modules/hw/vdpau/display.c b/modules/hw/vdpau/display.c
index f470c47b40..f98a16fa94 100644
--- a/modules/hw/vdpau/display.c
+++ b/modules/hw/vdpau/display.c
@@ -294,6 +294,8 @@ static void Queue(vout_display_t *vd, picture_t *pic, subpicture_t *subpic,
 static void Wait(vout_display_t *vd, picture_t *pic, subpicture_t *subpicture)
 {
     vout_display_sys_t *sys = vd->sys;
+    xcb_generic_event_t *ev;
+    VLC_UNUSED(subpicture);
 
     picture_t *current = sys->current;
     if (current != NULL)
@@ -315,13 +317,7 @@ static void Wait(vout_display_t *vd, picture_t *pic, subpicture_t *subpicture)
 
     sys->current = picture_Hold(pic);
 out:
-    /* We already dealt with the subpicture in the Queue phase, so it's safe to
-       delete at this point */
-    if (subpicture)
-        subpicture_Delete(subpicture);
-
     /* Drain the event queue. TODO: remove sys->conn completely */
-    xcb_generic_event_t *ev;
 
     while ((ev = xcb_poll_for_event(sys->conn)) != NULL)
         free(ev);
diff --git a/modules/video_output/android/display.c b/modules/video_output/android/display.c
index 9c5e51ffc3..521ed4e333 100644
--- a/modules/video_output/android/display.c
+++ b/modules/video_output/android/display.c
@@ -1005,6 +1005,7 @@ static void Display(vout_display_t *vd, picture_t *picture,
 {
     vout_display_sys_t *sys = vd->sys;
     VLC_UNUSED(picture);
+    VLC_UNUSED(subpicture);
 
     if (sys->p_window->b_opaque)
         AndroidOpaquePicture_Release(picture->p_sys, true);
@@ -1014,9 +1015,6 @@ static void Display(vout_display_t *vd, picture_t *picture,
     if (sys->p_sub_pic)
         AndroidWindow_UnlockPicture(sys, sys->p_sub_window, sys->p_sub_pic);
 
-    if (subpicture)
-        subpicture_Delete(subpicture);
-
     sys->b_displayed = true;
 }
 
diff --git a/modules/video_output/caopengllayer.m b/modules/video_output/caopengllayer.m
index c49f967264..09632c3911 100644
--- a/modules/video_output/caopengllayer.m
+++ b/modules/video_output/caopengllayer.m
@@ -299,6 +299,7 @@ static void PictureDisplay (vout_display_t *vd, picture_t *pic, subpicture_t *su
 {
     vout_display_sys_t *sys = vd->sys;
     VLC_UNUSED(pic);
+    VLC_UNUSED(subpicture);
 
     @synchronized (sys->cgLayer) {
         sys->b_frame_available = YES;
@@ -309,9 +310,6 @@ static void PictureDisplay (vout_display_t *vd, picture_t *pic, subpicture_t *su
         [sys->cgLayer display];
         [CATransaction flush];
     }
-
-    if (subpicture)
-        subpicture_Delete(subpicture);
 }
 
 static int Control (vout_display_t *vd, int query, va_list ap)
diff --git a/modules/video_output/ios.m b/modules/video_output/ios.m
index d7aa392a04..975db62043 100644
--- a/modules/video_output/ios.m
+++ b/modules/video_output/ios.m
@@ -302,15 +302,13 @@ static void PictureDisplay(vout_display_t *vd, picture_t *pic, subpicture_t *sub
     vout_display_sys_t *sys = vd->sys;
     struct gl_sys *glsys = sys->gl->sys;
     VLC_UNUSED(pic);
+    VLC_UNUSED(subpicture);
 
     if (vlc_gl_MakeCurrent(sys->gl) == VLC_SUCCESS)
     {
         vout_display_opengl_Display(glsys->vgl, &vd->source);
         vlc_gl_ReleaseCurrent(sys->gl);
     }
-
-    if (subpicture)
-        subpicture_Delete(subpicture);
 }
 
 static void PictureRender(vout_display_t *vd, picture_t *pic, subpicture_t *subpicture,
diff --git a/modules/video_output/macosx.m b/modules/video_output/macosx.m
index 93172ac95c..767d9dd660 100644
--- a/modules/video_output/macosx.m
+++ b/modules/video_output/macosx.m
@@ -335,6 +335,7 @@ static void PictureDisplay (vout_display_t *vd, picture_t *pic, subpicture_t *su
 {
     vout_display_sys_t *sys = vd->sys;
     VLC_UNUSED(pic);
+    VLC_UNUSED(subpicture);
     [sys->glView setVoutFlushing:YES];
     if (vlc_gl_MakeCurrent(sys->gl) == VLC_SUCCESS)
     {
@@ -343,9 +344,6 @@ static void PictureDisplay (vout_display_t *vd, picture_t *pic, subpicture_t *su
     }
     [sys->glView setVoutFlushing:NO];
     sys->has_first_frame = true;
-
-    if (subpicture)
-        subpicture_Delete(subpicture);
 }
 
 static int Control (vout_display_t *vd, int query, va_list ap)
diff --git a/modules/video_output/opengl/display.c b/modules/video_output/opengl/display.c
index a0dd3f74c3..eb53105c55 100644
--- a/modules/video_output/opengl/display.c
+++ b/modules/video_output/opengl/display.c
@@ -209,15 +209,13 @@ static void PictureDisplay (vout_display_t *vd, picture_t *pic, subpicture_t *su
 {
     vout_display_sys_t *sys = vd->sys;
     VLC_UNUSED(pic);
+    VLC_UNUSED(subpicture);
 
     if (vlc_gl_MakeCurrent (sys->gl) == VLC_SUCCESS)
     {
         vout_display_opengl_Display (sys->vgl, &vd->source);
         vlc_gl_ReleaseCurrent (sys->gl);
     }
-
-    if (subpicture)
-        subpicture_Delete(subpicture);
 }
 
 static int Control (vout_display_t *vd, int query, va_list ap)
diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index d4e0fcc24c..d2ce80a22e 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -972,6 +972,7 @@ static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpic
 {
     vout_display_sys_t *sys = vd->sys;
     VLC_UNUSED(picture);
+    VLC_UNUSED(subpicture);
 
     DXGI_PRESENT_PARAMETERS presentParams;
     memset(&presentParams, 0, sizeof(presentParams));
@@ -983,8 +984,6 @@ static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpic
         msg_Err(vd, "SwapChain Present failed. (hr=0x%lX)", hr);
     }
     d3d11_device_unlock( &sys->d3d_dev );
-    if (subpicture)
-        subpicture_Delete(subpicture);
 
     CommonDisplay(vd);
 }
diff --git a/modules/video_output/win32/direct3d9.c b/modules/video_output/win32/direct3d9.c
index 43f9a10601..2705df0074 100644
--- a/modules/video_output/win32/direct3d9.c
+++ b/modules/video_output/win32/direct3d9.c
@@ -584,11 +584,8 @@ static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpic
     const d3d9_device_t *p_d3d9_dev = &sys->d3d_dev;
     VLC_UNUSED(subpicture);
 
-    if (sys->lost_not_ready) {
-        if (subpicture)
-            subpicture_Delete(subpicture);
+    if (sys->lost_not_ready)
         return;
-    }
 
     // Present the back buffer contents to the display
     // No stretching should happen here !
@@ -608,8 +605,6 @@ static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpic
     /* XXX See Prepare() */
     if ( !is_d3d9_opaque(picture->format.i_chroma) )
         Direct3D9LockSurface(picture);
-    if (subpicture)
-        subpicture_Delete(subpicture);
 
     CommonDisplay(vd);
 }
diff --git a/modules/video_output/win32/glwin32.c b/modules/video_output/win32/glwin32.c
index 2740debf5f..681232667d 100644
--- a/modules/video_output/win32/glwin32.c
+++ b/modules/video_output/win32/glwin32.c
@@ -232,14 +232,13 @@ static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpic
 {
     vout_display_sys_t *sys = vd->sys;
     VLC_UNUSED(picture);
+    VLC_UNUSED(subpicture);
 
     if (vlc_gl_MakeCurrent (sys->gl) == VLC_SUCCESS)
     {
         vout_display_opengl_Display (sys->vgl, &vd->source);
         vlc_gl_ReleaseCurrent (sys->gl);
     }
-    if (subpicture)
-        subpicture_Delete(subpicture);
 
     CommonDisplay(vd);
 }
diff --git a/src/video_output/vout_wrapper.h b/src/video_output/vout_wrapper.h
index d560549efc..2cb0681d8f 100644
--- a/src/video_output/vout_wrapper.h
+++ b/src/video_output/vout_wrapper.h
@@ -57,6 +57,8 @@ static inline void vout_display_Display(vout_display_t *vd,
 {
     vd->display(vd, picture, subpicture);
     picture_Release(picture);
+    if (subpicture)
+        subpicture_Delete(subpicture);
 }
 
 /**



More information about the vlc-commits mailing list