ref: 090229f8a195f5f503f0e71b663c2578554e2b2c
parent: dc91e0958b8d19461bb61151fd777a4b7c389e41
author: Martin Storsjö <[email protected]>
date: Tue Jun 10 11:09:30 EDT 2014
Add public options for setting a log callback
--- a/codec/api/svc/codec_app_def.h
+++ b/codec/api/svc/codec_app_def.h
@@ -93,7 +93,9 @@
ENCODER_OPTION_CURRENT_PATH,
ENCODER_OPTION_DUMP_FILE,
- ENCODER_OPTION_TRACE_LEVEL
+ ENCODER_OPTION_TRACE_LEVEL,
+ ENCODER_OPTION_TRACE_CALLBACK, // a void (*)(void* context, int level, const char* message) function which receives log messages
+ ENCODER_OPTION_TRACE_CALLBACK_CONTEXT,
} ENCODER_OPTION;
/* Option types introduced in decoder application */
@@ -108,6 +110,8 @@
DECODER_OPTION_LTR_MARKED_FRAME_NUM, // feedback frame num marked by current Frame
DECODER_OPTION_ERROR_CON_IDC, //not finished yet, indicate decoder error concealment status, in progress
DECODER_OPTION_TRACE_LEVEL,
+ DECODER_OPTION_TRACE_CALLBACK, // a void (*)(void* context, int level, const char* message) function which receives log messages
+ DECODER_OPTION_TRACE_CALLBACK_CONTEXT,
} DECODER_OPTION;
--- a/codec/decoder/plus/src/welsDecoderExt.cpp
+++ b/codec/decoder/plus/src/welsDecoderExt.cpp
@@ -242,7 +242,8 @@
long CWelsDecoder::SetOption (DECODER_OPTION eOptID, void* pOption) {
int iVal = 0;
- if (m_pDecContext == NULL && eOptID != DECODER_OPTION_TRACE_LEVEL)
+ if (m_pDecContext == NULL && eOptID != DECODER_OPTION_TRACE_LEVEL &&
+ eOptID != DECODER_OPTION_TRACE_CALLBACK && eOptID != DECODER_OPTION_TRACE_CALLBACK_CONTEXT)
return dsInitialOptExpected;
if (eOptID == DECODER_OPTION_DATAFORMAT) { // Set color space of decoding output frame
@@ -272,6 +273,18 @@
if (m_pWelsTrace) {
uint32_t level = * ((uint32_t*)pOption);
m_pWelsTrace->SetTraceLevel (level);
+ }
+ return cmResultSuccess;
+ } else if (eOptID == DECODER_OPTION_TRACE_CALLBACK) {
+ if (m_pWelsTrace) {
+ CM_WELS_TRACE callback = * ((CM_WELS_TRACE*)pOption);
+ m_pWelsTrace->SetTraceCallback (callback);
+ }
+ return cmResultSuccess;
+ } else if (eOptID == DECODER_OPTION_TRACE_CALLBACK_CONTEXT) {
+ if (m_pWelsTrace) {
+ void* ctx = * ((void**)pOption);
+ m_pWelsTrace->SetTraceCallbackContext (ctx);
}
return cmResultSuccess;
}
--- a/codec/encoder/plus/src/welsEncoderExt.cpp
+++ b/codec/encoder/plus/src/welsEncoderExt.cpp
@@ -563,7 +563,8 @@
return cmInitParaError;
}
- if ((NULL == m_pEncContext || false == m_bInitialFlag) && eOptionId != ENCODER_OPTION_TRACE_LEVEL) {
+ if ((NULL == m_pEncContext || false == m_bInitialFlag) && eOptionId != ENCODER_OPTION_TRACE_LEVEL
+ && eOptionId != ENCODER_OPTION_TRACE_CALLBACK && eOptionId != ENCODER_OPTION_TRACE_CALLBACK_CONTEXT) {
return cmInitExpected;
}
@@ -868,6 +869,20 @@
if (m_pWelsTrace) {
uint32_t level = * ((uint32_t*)pOption);
m_pWelsTrace->SetTraceLevel (level);
+ }
+ }
+ break;
+ case ENCODER_OPTION_TRACE_CALLBACK: {
+ if (m_pWelsTrace) {
+ CM_WELS_TRACE callback = * ((CM_WELS_TRACE*)pOption);
+ m_pWelsTrace->SetTraceCallback (callback);
+ }
+ }
+ break;
+ case ENCODER_OPTION_TRACE_CALLBACK_CONTEXT: {
+ if (m_pWelsTrace) {
+ void* ctx = * ((void**)pOption);
+ m_pWelsTrace->SetTraceCallbackContext (ctx);
}
}
break;