先写一个获取当前时间戳的方法

long long GetNowMs()
{
struct timeval tv;
gettimeofday(&tv, NULL);
int sec = tv.tv_sec % ; // 为了简化计算,否则最后用于计算的ms会很大
long long t = sec * + tv.tv_usec / ;
return t;
}

然后在每次读取一帧数据之前和解码器解码完成之后添加下列代码

读取一帧数据之前:

if (GetNowMs() - start_time >= ) {
LOGI("now decoder fps is %d", frameCount / );
start_time = GetNowMs();
frameCount = 0;
} int re = av_read_frame(ic, pkt); // 读取一帧数据
......

解码器解码完一帧数据之后,对已解码的帧数进行累加:

for (;;) {
re = avcodec_receive_frame(cc, frame);
if (re != ) {
LOGE("avcodec_receive_frame() failed");
break;
}
if (cc == vc) {
frameCount++;
}
}

通过已解码的帧数除以中间间隔的时长就可以得到每秒解码的帧数。

手头有两部手机,实际测试结果如下:

三星S6电信版

FFmpeg软解(单线程): fps = 25-30帧, 耗费CPU:12%
FFmpeg软解(8线程):fps = 100-120帧,耗费CPU:57-66%
FFmpeg硬解(8线程):fps = 190-200帧, 耗费CPU:8%

谷歌Nexus6p

FFmpeg软解(单线程): fps = 30-45帧(不稳定), 耗费CPU:12%
FFmpeg软解(8线程):fps = 90-100帧,耗费CPU:75-80%
FFmpeg硬解(8线程):fps = 55帧, 耗费CPU:4%

FFmpeg: 一个简单测试手机解码效率的方法的更多相关文章

  1. 用jQuery Mobile搭建一个简单的手机页面

    1.新增html页面. 2.声明html5Document. 3.载入jQuery Mobile Css.jQuery与jQuery Mobile链接库. 4.使用jQuery Mobile定义的ht ...

  2. javascript常用开发笔记:一个简单强大的js日期格式化方法

    前言:一直没找到好用的javascript日期格式化工具,自己写了一个,方便以后复用 1.主要功能 (1)支持任意顺序的日期格式排列:yyyy=年,MM=月,dd=日,HH=时,mm=分,ss=秒,s ...

  3. 一个简单xml数据转换为数组的方法

    本人用easywechat做微信回复图文,从数据库中拿到的数据直接是xml拼好的数据,但是框架只有自带的获取xml格式的语句,所有需要将xml数据中所需要的数据拿出来用来拼接. 搜了好多资料说的都很麻 ...

  4. C++ Daily 《4》----一个简单的 int to string 的方法

    经常会在项目中用到 int to string, 之前一般用C语言的 sprintf, 发现C++ 中的 ostringstream 可以轻松完成这个任务. #include <iostream ...

  5. Linux下一个简单的日志系统的设计及其C代码实现

    1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回 ...

  6. 一个简单小巧的CSV读取类

    最近在基于亚马逊MWS API做一些服务,需要读取亚马逊返回的报表,是一个按照\t分割的文本,所以就封装了一个简单小巧的CsvReader类 使用方法 使用方法非常简单,只需要传递一个stream子类 ...

  7. 用Apache 里面的ab做一个简单的压力测试

    我用的是xampp环境包. D:\xampp\apache\bin 进入这路径, 找到ab.exe  尝试双击打开ab.exe 但不能如愿, 这两个都是一个压力的测试软件, 是apache自带的; 好 ...

  8. AWVS漏洞测试-02节-添加一个简单的新闻系统

    实现一个简单的新闻发布系统 有登录 注册 添加新闻 浏览新闻 评论新闻 新闻列表 这些基本功能 使用asp.net webform 首先是登录页 protected void Button1_Clic ...

  9. 一个简单的Spring测试的例子

    在做测试的时候我们用到Junit Case,当我们的项目中使用了Sring的时候,我们应该怎么使用spring容器去管理我的测试用例呢?现在我们用一个简单的例子来展示这个过程. 1 首先我们新建一个普 ...

随机推荐

  1. 通过ipmitool找回遗忘的iDrac地址

    Background: 在使用Dell服务器的过程中,如果发生一下情况:可以进入系统,但是忘记iDrac卡的地址,在系统的某个Linux下,可以使用ipmitool这个工具来get一下硬件的信息,从而 ...

  2. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  3. java 实验 三 (1)

    (1)金字塔:Pyramid.java在屏幕上显示一个由星型符号“*”组成的金字塔图案,要求用户设置金字塔的高度,程序能根据用户设置的高度打印金字塔,示例如下: * ******** package ...

  4. LeetCode(867)

    title: LeetCode(867) tags: Python Algorithm 题目描述 给定一个矩阵 A, 返回 A 的转置矩阵. 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索 ...

  5. Android应用程序性能优化Tips

    对于我们设计的应用需要做到以下特征:build an app that's smooth, responsive(反应敏捷), and uses as little battery as possib ...

  6. JDK 1.8 新特性

    default 函数式接口 待总结

  7. PowerShell一次执行多条命令

    PowerShell一次执行多条命令语句 使用CMD之后换到PS之后想一次执行多条命令会很不习惯,因为原来的&&语句连接符已经不能用了. 在各种搜索后没有发现网上有说明这个的.无奈只能 ...

  8. BZOJ2670 : Almost

    求出前缀和$s[]$,那么区间$[l,r]$的几乎平均数$=\frac{s[r]-s[l-1]}{r-l}$. 若只有一个询问,那么可以维护$(i,s[i-1])$的凸壳,在凸壳上二分点$(i,s[i ...

  9. php curl数据传输神器

    一.curl的概念: curl (Client Url Library Functions) 定义: curl is a command  line tool for transfering data ...

  10. webview 向右滑动关闭时,怎么禁止此 webview 上下滚动?

    webview 向右滑动关闭时,怎么禁止此 webview 上下滚动?