FFmpeg加入android打印
- 传入log callbakc打印的都是这个函数的函数名,无法定位问题。
- 研究了libavutil/log.c,发现可以在av_vlog里加入一行,专门用于打印。
1 log_callback_ffmpeg 传递给ffmpeg打印
- 这种打印的结果是函数名都是log_callback_ffmpeg
static void log_callback_ffmpeg(void *ptr, int level,const char *fmt, va_list vargs)
{int level_setting &#61; av_log_get_level(); if (level &#61;&#61; AV_LOG_DEBUG) {slogd("%s", logStr);} else if (level &#61;&#61; AV_LOG_INFO) {slogi("%s", logStr);} else if (level &#61;&#61; AV_LOG_WARNING) {slogw("%s", logStr);} else if (level <&#61; AV_LOG_ERROR) {sloge("%s", logStr);}
}
2 av_vlog 加入一行打印函数名
- 参考[http://m.blog.csdn.net/article/details?id&#61;9014697]加入下面这行&#xff0c;用于打印函数名、行号等&#xff1a;
SCLOGD("%s() in %s, Line: %d\n", __func__, __FILE__, __LINE__);
- 其中&#xff0c;SCLOGD的声明为&#xff1a;
#define SCLOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "scff", __VA_ARGS__)
- 注意&#xff0c;上面才是正确使用__android_log_print的方法
-结果是&#xff0c;这样也不行&#xff0c;打印的是av_vlog所在文件名、行号和函数名。
3 头文件
#pragma once/** ANDROID */
#if defined(__ANDROID__)
#include
这里加入你的代码
#endif
不需要再libavutil/Makefile中加入LDFALGS &#43;&#61; llog
4 只好直接替换av_log了
int get_droid_level(int level);
#define av_log(avcl, level, fmt, ...) __android_log_print(get_droid_level(level), "ZBFFmpeg", "[%s_%d_%s]"fmt,__FILE__,__LINE__,__FUNCTION__,##__VA_ARGS__)
成功。