[vlc-devel] [PATCH 12/21] libvlc: let the OpenGL host app change the opaque data used for the session

Steve Lhomme robux4 at ycbcr.xyz
Wed Feb 5 16:13:20 CET 2020


The host may only allocate the opaque structure and the related resources when
a session happens.
---
 doc/libvlc/QtGL/qtvlcwidget.cpp   |  8 ++++----
 doc/libvlc/sdl_opengl_player.cpp  |  8 ++++----
 include/vlc/libvlc_media_player.h | 24 ++++++++++++++----------
 modules/video_output/vgl.c        |  2 +-
 4 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/doc/libvlc/QtGL/qtvlcwidget.cpp b/doc/libvlc/QtGL/qtvlcwidget.cpp
index 22483efc7c5..3c85075f6b2 100644
--- a/doc/libvlc/QtGL/qtvlcwidget.cpp
+++ b/doc/libvlc/QtGL/qtvlcwidget.cpp
@@ -64,14 +64,14 @@ public:
     }
 
     // This callback is called during initialisation.
-    static bool setup(void* data)
+    static bool setup(void** data)
     {
         if (!QOpenGLContext::supportsThreadedOpenGL())
             return false;
 
-        VLCVideo* that = static_cast<VLCVideo*>(data);
-        that->m_width = 0;
-        that->m_height = 0;
+        VLCVideo** that = static_cast<VLCVideo**>(data);
+        (*that)->m_width = 0;
+        (*that)->m_height = 0;
         return true;
     }
 
diff --git a/doc/libvlc/sdl_opengl_player.cpp b/doc/libvlc/sdl_opengl_player.cpp
index 6e067ccba00..acf7053a507 100644
--- a/doc/libvlc/sdl_opengl_player.cpp
+++ b/doc/libvlc/sdl_opengl_player.cpp
@@ -160,11 +160,11 @@ public:
     }
 
     // This callback is called during initialisation.
-    static bool setup(void* data)
+    static bool setup(void** data)
     {
-        VLCVideo* that = static_cast<VLCVideo*>(data);
-        that->m_width = 0;
-        that->m_height = 0;
+        VLCVideo** that = static_cast<VLCVideo**>(data);
+        (*that)->m_width = 0;
+        (*that)->m_height = 0;
         return true;
     }
 
diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h
index 1f89340a81c..10a4ed75f0e 100644
--- a/include/vlc/libvlc_media_player.h
+++ b/include/vlc/libvlc_media_player.h
@@ -506,17 +506,19 @@ void libvlc_video_set_format_callbacks( libvlc_media_player_t *mp,
 /**
  * Callback prototype called to initialize user data.
  *
- * \param opaque private pointer passed to the @a libvlc_video_set_output_callbacks() [IN]
+ * \param opaque private pointer passed to the @a libvlc_video_set_output_callbacks()
+ *               on input. The callback can change this value on output to be
+ *               passed to all the other callbacks set on @a libvlc_video_set_output_callbacks(). [IN/OUT]
  * \return true on success
  * \version LibVLC 4.0.0 or later
  */
-typedef bool (*libvlc_video_setup_cb)(void* opaque);
+typedef bool (*libvlc_video_setup_cb)(void** opaque);
 
 
 /**
  * Callback prototype called to release user data
  *
- * \param opaque private pointer passed to the @a libvlc_video_set_output_callbacks() [IN]
+ * \param opaque private pointer set on the opaque parameter of @a libvlc_video_setup_cb() [IN]
  * \version LibVLC 4.0.0 or later
  */
 typedef void (*libvlc_video_output_cleanup_cb)(void* opaque);
@@ -549,8 +551,8 @@ typedef struct
  * Callback prototype called on video size changes.
  * Update the rendering output setup.
  *
- * \param opaque private pointer passed to the @a libvlc_video_set_output_callbacks() or
- *         @a libvlc_video_direct3d_device_setup_cb() [IN]
+ * \param opaque private pointer set on the opaque parameter of @a libvlc_video_setup_cb()
+ *        or @a libvlc_video_direct3d_device_setup_cb() [IN]
  * \param cfg configuration of the video that will be rendered [IN]
  * \param output configuration describing with how the rendering is setup [OUT]
  * \version LibVLC 4.0.0 or later
@@ -570,7 +572,8 @@ typedef bool (*libvlc_video_update_output_cb)(void* opaque, const libvlc_video_r
 /**
  * Callback prototype called after performing drawing calls.
  *
- * \param opaque private pointer passed to the @a libvlc_video_set_output_callbacks() [IN]
+ * \param opaque private pointer set on the opaque parameter of @a libvlc_video_setup_cb()
+ *        or @a libvlc_video_direct3d_device_setup_cb() [IN]
  * \version LibVLC 4.0.0 or later
  */
 typedef void (*libvlc_video_swap_cb)(void* opaque);
@@ -579,8 +582,8 @@ typedef void (*libvlc_video_swap_cb)(void* opaque);
  * Callback prototype to set up the OpenGL context for rendering.
  * Tell the host the rendering is about to start/has finished.
  *
- * \param opaque private pointer passed to the @a libvlc_video_set_output_callbacks() or
- *          @a libvlc_video_direct3d_device_setup_cb() [IN]
+ * \param opaque private pointer set on the opaque parameter of @a libvlc_video_setup_cb()
+ *        or @a libvlc_video_direct3d_device_setup_cb() [IN]
  * \param enter true to set the context as current, false to unset it [IN]
  * \return true on success
  * \version LibVLC 4.0.0 or later
@@ -605,7 +608,7 @@ typedef bool (*libvlc_video_makeCurrent_cb)(void* opaque, bool enter);
 /**
  * Callback prototype to load opengl functions
  *
- * \param opaque private pointer passed to the @a libvlc_video_set_output_callbacks() [IN]
+ * \param opaque private pointer set on the opaque parameter of @a libvlc_video_setup_cb() [IN]
  * \param fct_name name of the opengl function to load
  * \return a pointer to the named OpenGL function the NULL otherwise
  * \version LibVLC 4.0.0 or later
@@ -754,7 +757,8 @@ typedef void( *libvlc_video_direct3d_set_resize_cb )( void *opaque,
 
 /** Tell the host the rendering for the given plane is about to start
  *
- * \param opaque private pointer set on the opaque parameter of @a libvlc_video_direct3d_device_setup_cb() [IN]
+ * \param opaque private pointer set on the opaque parameter of @a libvlc_video_setup_cb()
+ *        or @a libvlc_video_direct3d_device_setup_cb() [IN]
  * \param plane number of the rendering plane to select
  * \return true on success
  * \version LibVLC 4.0.0 or later
diff --git a/modules/video_output/vgl.c b/modules/video_output/vgl.c
index 2f17ac3e79d..75dc75a79d9 100644
--- a/modules/video_output/vgl.c
+++ b/modules/video_output/vgl.c
@@ -141,7 +141,7 @@ static int Open(vlc_gl_t *gl, unsigned width, unsigned height)
     gl->destroy = Close;
 
     if( sys->setupCb )
-        if( !sys->setupCb(sys->opaque) )
+        if( !sys->setupCb(&sys->opaque) )
         {
             msg_Err( gl, "user setup failed" );
             return VLC_EGENERIC;
-- 
2.17.1



More information about the vlc-devel mailing list