0. 前言
在Android中编写的FFmpeg程序,没有经过设置的话是无法在adb logcat中看到ffmpeg的日志,对于NDK程序而言其本身就缺乏适当的调试方法(AndroidStudio可以支持调试,但是很麻烦),如果再不能查看日志,那就算是废了。
本文在此提供一种把ffmpeg日志输出到adb logcat的方法。
1. av_log_set_callback
ffmpeg中av_log_set_callback函数提供了注册ffmpeg日志输出回调接口。
av_log_set_callback(log_callback_null);
static void log_callback_null(void *ptr, int level, const char *fmt, va_list vl)
{
static int print_prefix = 1;
static int count;
static char prev[1024];
char line[1024];
static int is_atty;
av_log_format_line(ptr, level, fmt, vl, line, sizeof(line), &print_prefix);
strcpy(prev, line);
//sanitize((uint8_t *)line);
if (level <= AV_LOG_WARNING)
{
XLOGE("%s", line);
}
else
{
XLOGD("%s", line);
}
}
2. 输出android日志
NDK程序通过__android_log_print函数可以把日志从logcat输出。
#ifdef ANDROID
#include <android/log.h>
#ifndef LOG_TAG
#define LOG_TAG "FFMPEG"
#endif
#define XLOGD(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define XLOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#else
#include <stdio.h>
#define XLOGE(format, ...) fprintf(stdout, LOG_TAG ": " format "\n", ##__VA_ARGS__)
#define XLOGI(format, ...) fprintf(stderr, LOG_TAG ": " format "\n", ##__VA_ARGS__)
#endif //ANDROID
作者:xiyanlgu 发表于2017/2/25 14:48:08 原文链接
阅读:54 评论:0 查看评论