diff options
-rw-r--r-- | libass/ass.h | 3 | ||||
-rw-r--r-- | libass/ass_library.c | 12 | ||||
-rw-r--r-- | libass/ass_library.h | 3 | ||||
-rw-r--r-- | libass/ass_utils.c | 2 | ||||
-rw-r--r-- | test/test.c | 4 |
5 files changed, 16 insertions, 8 deletions
diff --git a/libass/ass.h b/libass/ass.h index e0160d62..0a03ec2a 100644 --- a/libass/ass.h +++ b/libass/ass.h @@ -71,7 +71,8 @@ void ass_set_style_overrides(ass_library_t *priv, char **list); void ass_process_force_style(ass_track_t *track); void ass_set_message_cb(ass_library_t *priv, - void (*msg_cb)(int, char *, va_list *)); + void (*msg_cb)(int, char *, va_list *, void *), + void *data); /** * \brief initialize the renderer diff --git a/libass/ass_library.c b/libass/ass_library.c index 2a8f5b25..9b6da02c 100644 --- a/libass/ass_library.c +++ b/libass/ass_library.c @@ -28,7 +28,7 @@ #include "ass_library.h" #include "ass_utils.h" -static void ass_msg_handler(int level, char *fmt, va_list *va) +static void ass_msg_handler(int level, char *fmt, va_list *va, void *data) { if (level > MSGL_INFO) return; @@ -132,11 +132,17 @@ void ass_clear_fonts(ass_library_t *priv) * Register a message callback function with libass. Without setting one, * a default handler is used which prints everything with MSGL_INFO or * higher to the standard output. + * + * \param msg_cb the callback function + * \param data additional data that will be passed to the callback */ void ass_set_message_cb(ass_library_t *priv, - void (*msg_cb)(int, char *, va_list *)) + void (*msg_cb)(int, char *, va_list *, void *), + void *data) { - if (msg_cb) + if (msg_cb) { priv->msg_callback = msg_cb; + priv->msg_callback_data = data; + } } diff --git a/libass/ass_library.h b/libass/ass_library.h index a73dd6c0..85b0842d 100644 --- a/libass/ass_library.h +++ b/libass/ass_library.h @@ -36,7 +36,8 @@ struct ass_library_s { ass_fontdata_t *fontdata; int num_fontdata; - void (*msg_callback)(int, char *, va_list *); + void (*msg_callback)(int, char *, va_list *, void *); + void *msg_callback_data; }; #endif /* LIBASS_LIBRARY_H */ diff --git a/libass/ass_utils.c b/libass/ass_utils.c index 0592d33e..56ca0ef6 100644 --- a/libass/ass_utils.c +++ b/libass/ass_utils.c @@ -126,7 +126,7 @@ void ass_msg(ass_library_t *priv, int lvl, char *fmt, ...) { va_list va; va_start(va, fmt); - priv->msg_callback(lvl, fmt, &va); + priv->msg_callback(lvl, fmt, &va, priv->msg_callback_data); va_end(va); } diff --git a/test/test.c b/test/test.c index 47b7f292..8c7b6021 100644 --- a/test/test.c +++ b/test/test.c @@ -12,7 +12,7 @@ typedef struct image_s { ass_library_t *ass_library; ass_renderer_t *ass_renderer; -void msg_callback(int level, char *fmt, va_list * va) +void msg_callback(int level, char *fmt, va_list * va, void *data) { if (level > 6) return; @@ -81,7 +81,7 @@ static void init(int frame_w, int frame_h) ass_set_fonts_dir(ass_library, ""); ass_set_extract_fonts(ass_library, 0); ass_set_style_overrides(ass_library, NULL); - ass_set_message_cb(ass_library, msg_callback); + ass_set_message_cb(ass_library, msg_callback, NULL); ass_renderer = ass_renderer_init(ass_library); if (!ass_renderer) { |