It is often useful or necessary to pass custom data to a callback.
Add an argument to the callback registering function to pass a void
pointer object to the callback each time it is called.
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
#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;
* 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;
+ }
}
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 */
{
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);
}
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;
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) {