[trunk] WIP: enhance the event management into the new API
[openjpeg.git] / libopenjpeg / event.c
index 77cec8931b0addeb51adc53ca7f48569ccb91595..2a7006559c9e5bde82df70715158182f340ef1bc 100644 (file)
@@ -60,8 +60,8 @@ _itoa(int i, char *a, int r) {
 
 #endif /* !_WIN32 */
 #endif
-/* ----------------------------------------------------------------------- */
 
+/* ----------------------------------------------------------------------- */
 opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) {
        if(cinfo) {
                opj_event_mgr_t *previous = cinfo->event_mgr;
@@ -73,6 +73,7 @@ opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_
        return NULL;
 }
 
+/* ----------------------------------------------------------------------- */
 opj_bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) {
 #define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
        opj_msg_callback msg_handler = NULL;
@@ -120,6 +121,7 @@ opj_bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ..
        return OPJ_TRUE;
 }
 
+/* ----------------------------------------------------------------------- */
 opj_bool opj_event_msg_v2(opj_event_mgr_t* event_mgr, int event_type, const char *fmt, ...) {
 #define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
        opj_msg_callback msg_handler = NULL;
@@ -165,3 +167,67 @@ opj_bool opj_event_msg_v2(opj_event_mgr_t* event_mgr, int event_type, const char
 
        return OPJ_TRUE;
 }
+
+/* ----------------------------------------------------------------------- */
+void OPJ_CALLCONV opj_initialize_default_event_handler(opj_event_mgr_t * p_event, opj_bool verbose)
+{
+       if (! p_event){
+               fprintf(stderr, "[ERROR] Event structure provided to the opj_set_default_event_handler is equal to null pointer.\n");
+               return;
+       }
+
+       p_event->client_data = NULL;
+       p_event->error_handler = opj_error_default_callback;
+
+       if (verbose) {
+               p_event->info_handler = opj_info_default_callback;
+               p_event->warning_handler = opj_warning_default_callback;
+       }
+       else {
+               /* FIXME (MSD) This message should be remove when the documentation will be updated */
+               fprintf(stdout, "[INFO] Verbose mode = OFF => no other info/warning output.\n");
+               p_event->info_handler = opj_default_callback ;
+               p_event->warning_handler = opj_default_callback ;
+       }
+}
+
+/* ---------------------------------------------------------------------- */
+/* Default callback functions                                             */
+
+/**
+ * Default callback function.
+ * Do nothing.
+ */
+void opj_default_callback (const char *msg, void *client_data)
+{
+}
+
+/**
+ * Default info callback function.
+ * Output = stdout.
+ */
+void opj_info_default_callback (const char *msg, void *client_data)
+{
+       (void)client_data;
+       fprintf(stdout, "[INFO] %s", msg);
+}
+
+/**
+ * Default warning callback function.
+ * Output = stderr.
+ */
+void opj_warning_default_callback (const char *msg, void *client_data)
+{
+       (void)client_data;
+       fprintf(stderr, "[WARNING] %s", msg);
+}
+
+/**
+ * Default error callback function.
+ * Output = stderr.
+ */
+void opj_error_default_callback (const char *msg, void *client_data)
+{
+       (void)client_data;
+       fprintf(stderr, "[ERROR] %s", msg);
+}