银川做网站服务,国外企业邮箱推荐,创意营销策划方案,全新升级网站一、引言
从《音视频入门基础#xff1a;FLV专题#xff08;9#xff09;——Script Tag简介》中可以知道#xff0c;根据《video_file_format_spec_v10_1.pdf》第80到81页#xff0c;SCRIPTDATAVALUE类型由一个8位#xff08;1字节#xff09;的Type和一个ScriptDataV…一、引言
从《音视频入门基础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中
/*** 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中
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 执行语句 double num_val av_int2double(4623451672453893325);
num_val即可得到转换得到的double类型数据即12.9。