• av_gettime() 与 av_gettime_relative() 是什么含义?


    av_gettime() 与 av_gettime_relative() 是什么含义?

    读函数头的说明,云里雾里一堆,表示看不懂,干脆写程序测试一下:

    1. $cat main.cpp
    2. #include
    3. extern "C"
    4. {
    5. #include
    6. }
    7. int main()
    8. {
    9. int64_t time1=av_gettime();
    10. int64_t time2=av_gettime_relative();
    11. printf("%-24s:%ld\n","av_gettime",time1);
    12. printf("%-24s:%ld\n","av_gettime_relative",time2);
    13. return 0;
    14. }

    结果:
    $ ./main
    av_gettime              :1668047258787826
    av_gettime_relative     :101219318785

    可见gettime 比 relative 大得多.
    我们知道av_gettime 从公元1970年1月1日0时0分0秒开始的微秒值,

    而relative 从近期的某一点开始.
    这近期的点是什么时间?
    看这结果差1万多倍,
     

    跟踪ffmpeg 代码
    int64_t av_gettime(void)  //返回1970年1月1日0时0分0秒开始的微秒值,查资料得.
    {
        struct timeval tv;
        gettimeofday(&tv, NULL); //时区填空即可
        return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
    }
    注意: timeval 结构,微秒级.
    struct timeval
    {
           time_t      tv_sec;     /* seconds */
           suseconds_t tv_usec;    /* microseconds */
    };
    int gettimeofday(struct timeval *tv, struct timezone *tz);
    gives the number of seconds and microseconds since the Epoch
    给出自大纪元以来的秒数和微秒数

    int64_t av_gettime_relative(void) // 返回某一点开始后的微妙数
    {
        struct timespec ts;
        clock_gettime(CLOCK_MONOTONIC, &ts);
        return (int64_t)ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
    }

    注意: timespec 是纳秒级, 与上面的timeval 结构不同
    struct timespec
    {
           time_t   tv_sec;        /* seconds */
           long     tv_nsec;       /* nanoseconds */
    };

    重启一次机器,
    这次看清了也确认了. clock_gettime(CLOCK_MONOTONIC,&ts)是
    开机后开始的微妙数. 如下表示开机到执行测试程序时58秒
    执行结果:
     ./main
     av_gettime              :1668049206167258
     av_gettime_relative     :58553202

    总结:
    int64_t av_gettime(void)  //
    从公元1970年1月1日0时0分0秒开始的微秒值
    int64_t av_gettime_relative(void) // 返回开机后开始的微妙值

  • 相关阅读:
    蓝桥楼赛第30期-Python模块大比拼-第一天赛题 题解
    【Python】Python进阶
    【电源专题】电源芯片散热垫(PowerPAD)布局指南
    Delayed 延时任务
    保姆级教程--容器化部署prometheusd监控系统(yaml文件、docker命令均有详细解释、大白话描述服务作用、适合小白)
    传统Spring AOP编程案例
    【达梦数据库】mysql函数改写达梦
    Qt之元对象metaObject
    大数据-131 - Flink CEP 案例:检测交易活跃用户、超时未交付
    华为机考:HJ3 明明的随机数
  • 原文地址:https://blog.csdn.net/hejinjing_tom_com/article/details/127785262