X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Flibopenh264enc.c;h=9603243fe325e7348f9d9b464bd72b311d1b82dd;hb=a852db796edce2792525d88ab47cf78222e01512;hp=33b7f6c7a87cce2ed0dd4e2aec6821e99f1b18c1;hpb=ea33b1ea300bae82c25845408dd8f53371ebb11d;p=ffmpeg diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index 33b7f6c7a87..9603243fe32 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -59,29 +59,12 @@ static const AVClass class = { "libopenh264enc", av_default_item_name, options, LIBAVUTIL_VERSION_INT }; -// Convert ffmpeg log level to equivalent libopenh264 log level. Given the -// conversions below, you must set the ffmpeg log level to something greater -// than AV_LOG_DEBUG if you want to see WELS_LOG_DETAIL messages. -static int ffmpeg_to_libopenh264_log_level ( - int ffmpeg_log_level - ) -{ - if (ffmpeg_log_level > AV_LOG_DEBUG) return WELS_LOG_DETAIL; - else if (ffmpeg_log_level >= AV_LOG_DEBUG) return WELS_LOG_DEBUG; - else if (ffmpeg_log_level >= AV_LOG_INFO) return WELS_LOG_INFO; - else if (ffmpeg_log_level >= AV_LOG_WARNING) return WELS_LOG_WARNING; - else if (ffmpeg_log_level >= AV_LOG_ERROR) return WELS_LOG_ERROR; - else return WELS_LOG_QUIET; -} - // Convert libopenh264 log level to equivalent ffmpeg log level. -static int libopenh264_to_ffmpeg_log_level ( - int libopenh264_log_level - ) +static int libopenh264_to_libav_log_level(int libopenh264_log_level) { if (libopenh264_log_level >= WELS_LOG_DETAIL) return AV_LOG_TRACE; else if (libopenh264_log_level >= WELS_LOG_DEBUG) return AV_LOG_DEBUG; - else if (libopenh264_log_level >= WELS_LOG_INFO) return AV_LOG_INFO; + else if (libopenh264_log_level >= WELS_LOG_INFO) return AV_LOG_VERBOSE; else if (libopenh264_log_level >= WELS_LOG_WARNING) return AV_LOG_WARNING; else if (libopenh264_log_level >= WELS_LOG_ERROR) return AV_LOG_ERROR; else return AV_LOG_QUIET; @@ -93,20 +76,12 @@ static int libopenh264_to_ffmpeg_log_level ( // // typedef void (*WelsTraceCallback) (void* ctx, int level, const char* string); -static void libopenh264_trace_callback ( - void * ctx, - int level, - char const * msg - ) +static void libopenh264_trace_callback(void *ctx, int level, char const *msg) { // The message will be logged only if the requested EQUIVALENT ffmpeg log level is - // less than or equal to the current ffmpeg log level. Note, however, that before - // this function is called, welsCodecTrace::CodecTrace() will have already discarded - // the message (and this function will not be called) if the requested libopenh264 - // log level "level" is greater than the current libopenh264 log level. - int equiv_ffmpeg_log_level = libopenh264_to_ffmpeg_log_level(level); - if (equiv_ffmpeg_log_level <= av_log_get_level()) - av_log(ctx, equiv_ffmpeg_log_level, "%s\n", msg); + // less than or equal to the current ffmpeg log level. + int equiv_libav_log_level = libopenh264_to_libav_log_level(level); + av_log(ctx, equiv_libav_log_level, "%s\n", msg); } static av_cold int svc_encode_close(AVCodecContext *avctx) @@ -123,7 +98,7 @@ static av_cold int svc_encode_init(AVCodecContext *avctx) SVCContext *s = avctx->priv_data; SEncParamExt param = { 0 }; int err = AVERROR_UNKNOWN; - int equiv_libopenh264_log_level; + int log_level; WelsTraceCallback callback_function; // Mingw GCC < 4.7 on x86_32 uses an incorrect/buggy ABI for the WelsGetCodecVersion @@ -142,27 +117,16 @@ static av_cold int svc_encode_init(AVCodecContext *avctx) return AVERROR_UNKNOWN; } - // Set libopenh264 message logging level for this instance of the encoder using - // the current ffmpeg log level converted to the equivalent libopenh264 level. - // - // The client should have the ffmpeg level set to the desired value before creating - // the libopenh264 encoder. Once the encoder has been created, the libopenh264 - // log level is fixed for that encoder. Changing the ffmpeg log level to a LOWER - // value, in the expectation that higher level libopenh264 messages will no longer - // be logged, WILL have the expected effect. However, changing the ffmpeg log level - // to a HIGHER value, in the expectation that higher level libopenh264 messages will - // now be logged, WILL NOT have the expected effect. This is because the higher - // level messages will be discarded by the libopenh264 logging system before our - // message logging callback function can be invoked. - equiv_libopenh264_log_level = ffmpeg_to_libopenh264_log_level(av_log_get_level()); - (*s->encoder)->SetOption(s->encoder,ENCODER_OPTION_TRACE_LEVEL,&equiv_libopenh264_log_level); + // Pass all libopenh264 messages to our callback, to allow ourselves to filter them. + log_level = WELS_LOG_DETAIL; + (*s->encoder)->SetOption(s->encoder, ENCODER_OPTION_TRACE_LEVEL, &log_level); // Set the logging callback function to one that uses av_log() (see implementation above). callback_function = (WelsTraceCallback) libopenh264_trace_callback; - (*s->encoder)->SetOption(s->encoder,ENCODER_OPTION_TRACE_CALLBACK,(void *)&callback_function); + (*s->encoder)->SetOption(s->encoder, ENCODER_OPTION_TRACE_CALLBACK, (void *)&callback_function); // Set the AVCodecContext as the libopenh264 callback context so that it can be passed to av_log(). - (*s->encoder)->SetOption(s->encoder,ENCODER_OPTION_TRACE_CALLBACK_CONTEXT,(void *)&avctx); + (*s->encoder)->SetOption(s->encoder, ENCODER_OPTION_TRACE_CALLBACK_CONTEXT, (void *)&avctx); (*s->encoder)->GetDefaultParams(s->encoder, ¶m);