diff options
-rw-r--r-- | intern/clog/CLG_log.h | 1 | ||||
-rw-r--r-- | intern/clog/clog.c | 37 | ||||
-rw-r--r-- | source/blender/compositor/nodes/COM_ChannelMatteNode.cpp | 4 | ||||
-rw-r--r-- | source/blender/compositor/nodes/COM_ChromaMatteNode.cpp | 4 | ||||
-rw-r--r-- | source/blender/compositor/nodes/COM_DistanceMatteNode.cpp | 6 | ||||
-rw-r--r-- | source/blender/compositor/nodes/COM_KeyingNode.cpp | 4 | ||||
-rw-r--r-- | source/creator/creator_args.c | 13 |
7 files changed, 55 insertions, 14 deletions
diff --git a/intern/clog/CLG_log.h b/intern/clog/CLG_log.h index ff8f983b10c..61fc93be9e7 100644 --- a/intern/clog/CLG_log.h +++ b/intern/clog/CLG_log.h @@ -146,6 +146,7 @@ void CLG_exit(void); void CLG_output_set(void *file_handle); void CLG_output_use_basename_set(int value); void CLG_fatal_fn_set(void (*fatal_fn)(void *file_handle)); +void CLG_backtrace_fn_set(void (*fatal_fn)(void *file_handle)); void CLG_type_filter_include(const char *type_filter, int type_filter_len); void CLG_type_filter_exclude(const char *type_filter, int type_filter_len); diff --git a/intern/clog/clog.c b/intern/clog/clog.c index e96cbbe7f14..d26f0545117 100644 --- a/intern/clog/clog.c +++ b/intern/clog/clog.c @@ -81,6 +81,7 @@ typedef struct CLogContext { struct { void (*fatal_fn)(void *file_handle); + void (*backtrace_fn)(void *file_handle); } callbacks; } CLogContext; @@ -328,15 +329,23 @@ static CLG_LogType *clg_ctx_type_register(CLogContext *ctx, const char *identifi return ty; } -static void clg_ctx_fatal_action(CLogContext *ctx, FILE *file_handle) +static void clg_ctx_fatal_action(CLogContext *ctx) { if (ctx->callbacks.fatal_fn != NULL) { - ctx->callbacks.fatal_fn(file_handle); + ctx->callbacks.fatal_fn(ctx->output_file); } - fflush(file_handle); + fflush(ctx->output_file); abort(); } +static void clg_ctx_backtrace(CLogContext *ctx) +{ + /* Note: we avoid writing fo 'FILE', for backtrace we make an exception, + * if necessary we could have a version of the callback that writes to file descriptor all at once. */ + ctx->callbacks.backtrace_fn(ctx->output_file); + fflush(ctx->output_file); +} + /** \} */ /* -------------------------------------------------------------------- */ @@ -409,8 +418,12 @@ void CLG_log_str( clg_str_free(&cstr); + if (lg->ctx->callbacks.backtrace_fn) { + clg_ctx_backtrace(lg->ctx); + } + if (severity == CLG_SEVERITY_FATAL) { - clg_ctx_fatal_action(lg->ctx, lg->ctx->output_file); + clg_ctx_fatal_action(lg->ctx); } } @@ -441,8 +454,12 @@ void CLG_logf( clg_str_free(&cstr); + if (lg->ctx->callbacks.backtrace_fn) { + clg_ctx_backtrace(lg->ctx); + } + if (severity == CLG_SEVERITY_FATAL) { - clg_ctx_fatal_action(lg->ctx, lg->ctx->output_file); + clg_ctx_fatal_action(lg->ctx); } } @@ -472,6 +489,11 @@ static void CLG_ctx_fatal_fn_set(CLogContext *ctx, void (*fatal_fn)(void *file_h ctx->callbacks.fatal_fn = fatal_fn; } +static void CLG_ctx_backtrace_fn_set(CLogContext *ctx, void (*backtrace_fn)(void *file_handle)) +{ + ctx->callbacks.backtrace_fn = backtrace_fn; +} + static void clg_ctx_type_filter_append(CLG_IDFilter **flt_list, const char *type_match, int type_match_len) { if (type_match_len == 0) { @@ -569,6 +591,11 @@ void CLG_fatal_fn_set(void (*fatal_fn)(void *file_handle)) CLG_ctx_fatal_fn_set(g_ctx, fatal_fn); } +void CLG_backtrace_fn_set(void (*fatal_fn)(void *file_handle)) +{ + CLG_ctx_backtrace_fn_set(g_ctx, fatal_fn); +} + void CLG_type_filter_exclude(const char *type_match, int type_match_len) { CLG_ctx_type_filter_exclude(g_ctx, type_match, type_match_len); diff --git a/source/blender/compositor/nodes/COM_ChannelMatteNode.cpp b/source/blender/compositor/nodes/COM_ChannelMatteNode.cpp index cc573274c34..d1cf7b66fd0 100644 --- a/source/blender/compositor/nodes/COM_ChannelMatteNode.cpp +++ b/source/blender/compositor/nodes/COM_ChannelMatteNode.cpp @@ -53,9 +53,9 @@ void ChannelMatteNode::convertToOperations(NodeConverter &converter, const Compo break; case CMP_NODE_CHANNEL_MATTE_CS_YCC: /* YCC */ convert = new ConvertRGBToYCCOperation(); - ((ConvertRGBToYCCOperation *)convert)->setMode(0); /* BLI_YCC_ITU_BT601 */ + ((ConvertRGBToYCCOperation *)convert)->setMode(BLI_YCC_ITU_BT709); inv_convert = new ConvertYCCToRGBOperation(); - ((ConvertYCCToRGBOperation *)inv_convert)->setMode(0); /* BLI_YCC_ITU_BT601 */ + ((ConvertYCCToRGBOperation *)inv_convert)->setMode(BLI_YCC_ITU_BT709); break; default: break; diff --git a/source/blender/compositor/nodes/COM_ChromaMatteNode.cpp b/source/blender/compositor/nodes/COM_ChromaMatteNode.cpp index 6324ca9a3ca..2c985cd5bd1 100644 --- a/source/blender/compositor/nodes/COM_ChromaMatteNode.cpp +++ b/source/blender/compositor/nodes/COM_ChromaMatteNode.cpp @@ -41,8 +41,8 @@ void ChromaMatteNode::convertToOperations(NodeConverter &converter, const Compos ConvertRGBToYCCOperation *operationRGBToYCC_Image = new ConvertRGBToYCCOperation(); ConvertRGBToYCCOperation *operationRGBToYCC_Key = new ConvertRGBToYCCOperation(); - operationRGBToYCC_Image->setMode(0); /* BLI_YCC_ITU_BT601 */ - operationRGBToYCC_Key->setMode(0); /* BLI_YCC_ITU_BT601 */ + operationRGBToYCC_Image->setMode(BLI_YCC_ITU_BT709); + operationRGBToYCC_Key->setMode(BLI_YCC_ITU_BT709); converter.addOperation(operationRGBToYCC_Image); converter.addOperation(operationRGBToYCC_Key); diff --git a/source/blender/compositor/nodes/COM_DistanceMatteNode.cpp b/source/blender/compositor/nodes/COM_DistanceMatteNode.cpp index 99061cf8824..52c764f2223 100644 --- a/source/blender/compositor/nodes/COM_DistanceMatteNode.cpp +++ b/source/blender/compositor/nodes/COM_DistanceMatteNode.cpp @@ -66,8 +66,8 @@ void DistanceMatteNode::convertToOperations(NodeConverter &converter, const Comp ConvertRGBToYCCOperation *operationYCCImage = new ConvertRGBToYCCOperation(); ConvertRGBToYCCOperation *operationYCCMatte = new ConvertRGBToYCCOperation(); - operationYCCImage->setMode(0); /* BLI_YCC_ITU_BT601 */ - operationYCCMatte->setMode(0); /* BLI_YCC_ITU_BT601 */ + operationYCCImage->setMode(BLI_YCC_ITU_BT709); + operationYCCMatte->setMode(BLI_YCC_ITU_BT709); converter.addOperation(operationYCCImage); converter.addOperation(operationYCCMatte); @@ -86,7 +86,7 @@ void DistanceMatteNode::convertToOperations(NodeConverter &converter, const Comp if (storage->channel != 1) { ConvertYCCToRGBOperation *inv_convert = new ConvertYCCToRGBOperation(); - inv_convert->setMode(0); /* BLI_YCC_ITU_BT601 */ + inv_convert->setMode(BLI_YCC_ITU_BT709); converter.addOperation(inv_convert); converter.addLink(operationAlpha->getOutputSocket(0), inv_convert->getInputSocket(0)); diff --git a/source/blender/compositor/nodes/COM_KeyingNode.cpp b/source/blender/compositor/nodes/COM_KeyingNode.cpp index e896b7144e5..ddfba07d9f7 100644 --- a/source/blender/compositor/nodes/COM_KeyingNode.cpp +++ b/source/blender/compositor/nodes/COM_KeyingNode.cpp @@ -50,7 +50,7 @@ KeyingNode::KeyingNode(bNode *editorNode) : Node(editorNode) NodeOperationOutput *KeyingNode::setupPreBlur(NodeConverter &converter, NodeInput *inputImage, int size) const { ConvertRGBToYCCOperation *convertRGBToYCCOperation = new ConvertRGBToYCCOperation(); - convertRGBToYCCOperation->setMode(0); /* ITU 601 */ + convertRGBToYCCOperation->setMode(BLI_YCC_ITU_BT709); converter.addOperation(convertRGBToYCCOperation); converter.mapInputSocket(inputImage, convertRGBToYCCOperation->getInputSocket(0)); @@ -86,7 +86,7 @@ NodeOperationOutput *KeyingNode::setupPreBlur(NodeConverter &converter, NodeInpu } ConvertYCCToRGBOperation *convertYCCToRGBOperation = new ConvertYCCToRGBOperation(); - convertYCCToRGBOperation->setMode(0); /* ITU 601 */ + convertYCCToRGBOperation->setMode(BLI_YCC_ITU_BT709); converter.addOperation(convertYCCToRGBOperation); converter.addLink(combineOperation->getOutputSocket(0), convertYCCToRGBOperation->getInputSocket(0)); diff --git a/source/creator/creator_args.c b/source/creator/creator_args.c index 30513bd7986..2840252acb9 100644 --- a/source/creator/creator_args.c +++ b/source/creator/creator_args.c @@ -523,6 +523,7 @@ static int arg_handle_print_help(int UNUSED(argc), const char **UNUSED(argv), vo BLI_argsPrintArgDoc(ba, "--log"); BLI_argsPrintArgDoc(ba, "--log-level"); BLI_argsPrintArgDoc(ba, "--log-show-basename"); + BLI_argsPrintArgDoc(ba, "--log-show-backtrace"); BLI_argsPrintArgDoc(ba, "--log-file"); printf("\n"); @@ -733,6 +734,17 @@ static int arg_handle_log_show_basename_set(int UNUSED(argc), const char **UNUSE return 0; } +static const char arg_handle_log_show_backtrace_set_doc[] = +"\n\tShow a back trace for each log message (debug builds only)." +; +static int arg_handle_log_show_backtrace_set(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data)) +{ + /* Ensure types don't become incompatible. */ + void (*fn)(FILE *fp) = BLI_system_backtrace; + CLG_backtrace_fn_set((void (*)(void *))fn); + return 0; +} + static const char arg_handle_log_file_set_doc[] = "<filename>\n" "\n" @@ -1820,6 +1832,7 @@ void main_args_setup(bContext *C, bArgs *ba) BLI_argsAdd(ba, 1, NULL, "--log", CB(arg_handle_log_set), ba); BLI_argsAdd(ba, 1, NULL, "--log-level", CB(arg_handle_log_level_set), ba); BLI_argsAdd(ba, 1, NULL, "--log-show-basename", CB(arg_handle_log_show_basename_set), ba); + BLI_argsAdd(ba, 1, NULL, "--log-show-backtrace", CB(arg_handle_log_show_backtrace_set), ba); BLI_argsAdd(ba, 1, NULL, "--log-file", CB(arg_handle_log_file_set), ba); BLI_argsAdd(ba, 1, "-d", "--debug", CB(arg_handle_debug_mode_set), ba); |