热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

FFmpeg的Android打印

FFmpeg加入android打印传入logcallbakc打印的都是这个函数的函数名,无法定位问题。研究了libavutillog.c,发现可以在a

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了


  • 参考[http://m.blog.csdn.net/article/details?id&#61;50562024]
  • 重新编译好麻烦啊&#xff0c;我这里是avfilter、avformat、 avcodec、avresample、 postproc、swscale、avutil、avdevice&#xff0c;几乎到了最后才能编译到log.c.
  • static const char *get_level_str(int level)
    {
    switch (level) {
    case AV_LOG_QUIET:return "quiet";
    case AV_LOG_DEBUG:return "debug";
    case AV_LOG_VERBOSE:return "verbose";
    case AV_LOG_INFO:return "info";
    case AV_LOG_WARNING:return "warning";
    case AV_LOG_ERROR:return "error";
    case AV_LOG_FATAL:return "fatal";
    case AV_LOG_PANIC:return "panic";
    default:return "";
    }
    }

    • 采用如下替换打印&#xff1a;

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__)

成功。


推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • Linux 程序设计学习笔记----动手编写makefile文件
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Arduino + ESP32C3 + TFT(1.8‘ ST7735S)基础平台(实验四)直接显示网络图片
    ------------------------------------------------------------------------------------------ ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • keras归一化激活函数dropout
    激活函数:1.softmax函数在多分类中常用的激活函数,是基于逻辑回归的,常用在输出一层,将输出压缩在0~1之间,且保证所有元素和为1,表示输入值属于每个输出值的概率大小2、Si ... [详细]
author-avatar
统计小屋_321
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有