[vlc-devel] [RFC 8/8] libvlc: return an false if setting the callback fails

Steve Lhomme robux4 at ycbcr.xyz
Tue Nov 20 16:42:42 CET 2018


The engine provide may have a wrong value or may not be supported on the
given platform/build.
---
 include/vlc/libvlc_media_player.h | 6 ++++--
 lib/media_player.c                | 7 +++++--
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h
index dca339315a..d44d31d7cd 100644
--- a/include/vlc/libvlc_media_player.h
+++ b/include/vlc/libvlc_media_player.h
@@ -569,11 +569,13 @@ void libvlc_video_engine_callbacks_release( libvlc_video_engine_callbacks_t *cb
  *
  * \param mp the media player
  * \param callbacks the callbacks to use for the given engine.
+ * \return 1 if the callbacks were set, 0 otherwise.
+ * \libvlc_return_bool
  * \version LibVLC 4.0.0 or later
  */
 LIBVLC_API
-void libvlc_video_set_output_callbacks( libvlc_media_player_t *mp,
-                                        libvlc_video_engine_callbacks_t *callbacks );
+int libvlc_video_set_output_callbacks( libvlc_media_player_t *mp,
+                                       libvlc_video_engine_callbacks_t *callbacks );
 
 /**
  * Set decoded video chroma and dimensions.
diff --git a/lib/media_player.c b/lib/media_player.c
index 6da4887941..55c94bc1d1 100644
--- a/lib/media_player.c
+++ b/lib/media_player.c
@@ -1164,7 +1164,7 @@ void libvlc_video_set_format( libvlc_media_player_t *mp, const char *chroma,
     var_SetInteger( mp, "vmem-pitch", pitch );
 }
 
-void libvlc_video_set_output_callbacks( libvlc_media_player_t *mp,
+int libvlc_video_set_output_callbacks( libvlc_media_player_t *mp,
                                         libvlc_video_engine_callbacks_t *callbacks )
 {
 #ifdef __ANDROID__
@@ -1179,11 +1179,13 @@ void libvlc_video_set_output_callbacks( libvlc_media_player_t *mp,
         var_SetString ( mp, "vout", "gles2" );
         var_SetString ( mp, "gles2", "vgl" );
     }
-    else
+    else if( callbacks->engine == libvlc_video_engine_opengl )
     {
         var_SetString ( mp, "vout", "gl" );
         var_SetString ( mp, "gl", "vgl");
     }
+    else
+        return 0;
 
     var_SetAddress( mp, "vout-cb-opaque", callbacks->opaque );
     var_SetAddress( mp, "vout-cb-setup", callbacks->setup_cb );
@@ -1196,6 +1198,7 @@ void libvlc_video_set_output_callbacks( libvlc_media_player_t *mp,
     var_SetAddress( mp, "vout-cb-end-render", callbacks->endRender_cb );
 
     var_SetAddress( mp, "vout-engine-ctx", callbacks->engine_context );
+    return 1;
 }
 
 libvlc_video_engine_callbacks_t *libvlc_video_engine_callbacks_get( libvlc_video_engine_t engine )
-- 
2.17.1



More information about the vlc-devel mailing list