From 2843974d284cb2046318d2da5fcedc95104e88d9 Mon Sep 17 00:00:00 2001 From: Tuomas Virtanen Date: Mon, 26 Mar 2018 15:15:19 +0300 Subject: Allow runtime loading of libass library. Previously libass could only be statically linked. Now we allow runtime loading of the library on request (just like other SDL libraries do). --- src/kitlib.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'src/kitlib.c') diff --git a/src/kitlib.c b/src/kitlib.c index 2a2307b..2daf44d 100644 --- a/src/kitlib.c +++ b/src/kitlib.c @@ -1,16 +1,23 @@ #include +#include #include +#include "kitchensink/internal/utils/kitlog.h" #include "kitchensink/kitchensink.h" #include "kitchensink/internal/kitlibstate.h" -#ifdef USE_ASS -#include - static void _libass_msg_callback(int level, const char *fmt, va_list va, void *data) {} int Kit_InitASS(Kit_LibraryState *state) { +#ifdef USE_DYNAMIC_LIBASS + state->ass_so_handle = SDL_LoadObject(DYNAMIC_LIBASS_NAME); + if(state->ass_so_handle == NULL) { + Kit_SetError("Unable to load ASS library"); + return 1; + } + load_libass(state->ass_so_handle); +#endif state->libass_handle = ass_library_init(); ass_set_message_cb(state->libass_handle, _libass_msg_callback, NULL); return 0; @@ -19,35 +26,38 @@ int Kit_InitASS(Kit_LibraryState *state) { void Kit_CloseASS(Kit_LibraryState *state) { ass_library_done(state->libass_handle); state->libass_handle = NULL; -} - -#else - -int Kit_InitASS(Kit_LibraryState *state) { return 1; } -void Kit_CloseASS(Kit_LibraryState *state) {} - +#ifdef USE_DYNAMIC_LIBASS + SDL_UnloadObject(state->ass_so_handle); + state->ass_so_handle = NULL; #endif - +} int Kit_Init(unsigned int flags) { Kit_LibraryState *state = Kit_GetLibraryState(); if(state->init_flags != 0) { Kit_SetError("Kitchensink is already initialized."); - return 1; + goto exit_0; } av_register_all(); if(flags & KIT_INIT_NETWORK) { avformat_network_init(); - state->init_flags |= KIT_INIT_NETWORK; } if(flags & KIT_INIT_ASS) { - if(Kit_InitASS(state) == 0) { - state->init_flags |= KIT_INIT_ASS; + if(Kit_InitASS(state) != 0) { + goto exit_1; } } + + state->init_flags = flags; return 0; + +exit_1: + avformat_network_deinit(); + +exit_0: + return 1; } void Kit_Quit() { -- cgit v1.2.3