音视频入门基础:FLV专题(12)——FFmpeg源码中,解析DOUBLE类型的ScriptDataValue的实现

一、引言

从《音视频入门基础:FLV专题(9)------Script Tag简介》中可以知道,根据《video_file_format_spec_v10_1.pdf》第80到81页,SCRIPTDATAVALUE类型由一个8位(1字节)的Type和一个ScriptDataValue组成。其中Type属性用来指定ScriptDataValue的类型,根据Type值的不同,ScriptDataValue的类型也不同。当Type的值为0时,ScriptDataValue为DOUBLE类型:

根据《swf-file-format-spec.pdf》第16页,DOUBLE类型为IEEE-754双精度浮点数。存贮DOUBLE类型数据需要占用8个字节:

FFmpeg源码中通过av_int2double函数解析DOUBLE类型的ScriptDataValue。

二、av_int2double函数的定义

av_int2double函数定义在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavutil/intfloat.h中:

cpp 复制代码
/**
 * Reinterpret a 64-bit integer as a double.
 */
static av_always_inline double av_int2double(uint64_t i)
{
    union av_intfloat64 v;
    v.i = i;
    return v.f;
}

该函数的作用是将64位整数重新解释为double类型。C、C++中使用到的双精度浮点数(double)类型是在IEEE二进制浮点数算术标准(IEEE-754)中定义的。双精度浮点数(Double)用来表示带有小数部分的实数,一般用于计算机编程中定义变量,占用8个字节存储空间。所以av_int2double函数的作用就是从内存中读取8个字节(形参i存贮的64位整数),将其转换为double类型返回。

形参i:输入型参数,需要被重新解释的64位整数。

返回值:转换得到的double类型数据。

联合体av_intfloat64声明在libavutil/intfloat.h中:

cpp 复制代码
union av_intfloat64 {
    uint64_t i;
    double   f;
};

三、av_int2double函数的实际用法

比如想要将下图红框中的64位数据"0x40 0x29 0xCC 0xCC 0xCC 0xCC 0xCC 0xCD"转换为double类型数据:

通过Windows自带的计算器可以算出"0x40 0x29 0xCC 0xCC 0xCC 0xCC 0xCC 0xCD"对应的十进制整数为:4623451672453893325:

执行语句:

cpp 复制代码
   double num_val = av_int2double(4623451672453893325);

num_val即可得到转换得到的double类型数据,即12.9。

相关推荐
李二。3 小时前
鸿蒙原生ArkTS-鸿蒙6.0新特性-动态模糊视频背景登录页
华为·音视频·harmonyos
菊风 Juphoon3 小时前
认证合规刚需落地|菊风智能双录,助力CA机构全流程合规留痕
音视频·双录·认证双录
大蚂蚁2号4 小时前
本地视频转文字,音频转文字免费工具
音视频
换个昵称都难6 小时前
webrtc voice engine 介绍(新版webrtc)
ffmpeg·音视频·webrtc
searchforAI6 小时前
2026年AI笔记工具对比实测:NotebookLM、通义听悟、Ai好记怎么选?
人工智能·笔记·gpt·ai·whisper·音视频·语音识别
音视频牛哥9 小时前
基于 SmartMediaKit 的座舱远程遥控系统技术方案——面向多摄像头、多角度、低延迟传输控制与内网/5G广域网融合场景
音视频·低延迟rtsp播放器·低延迟视频传输·座舱远程遥控·5g远程控制·远程驾驶系统·低延迟rtmp播放
EasyGBS10 小时前
从“后厨黑箱”到“透明厨房”:国标GB28181视频平台EasyGBS平台AI视频分析如何守护舌尖上的安全
人工智能·安全·音视频
昨日之日200610 小时前
LongCat-Video-Avatar-1.5 - 一句话生成口型同步、动作稳定的数字人 说话/唱歌 视频 一键整合包下载
音视频
searchforAI11 小时前
长视频和播客怎么变成结构化读书笔记?一套 AI 时代的知识管理方法
人工智能·笔记·gpt·音视频·语音识别
不想吃饭e12 小时前
uniapp-图片,视频上传组件封装
java·uni-app·音视频