在研究 QuickTime File Format,里面涉及到一个 3 x 3 的矩阵用于图像的变换,矩阵的每一个元素用 4 字节保存,具体按照 32-bit fixed-point number 类型编码。

ffmpeg 里面对应的代码是用 ((double) (x)) / (1 << 16)实现这里的 fixed pointdouble 之间的转换,代码链接

这里有两个疑问:

  1. 32-bit fixed-point 的编码规则(二进制表示)具体是什么,在哪里可以找到?
  2. 怎么理解文档中的 32-bit fixed-point numbers divided as 16.1632-bit fixed-point numbers divided as 2.30

望指点迷津~

LittleboyHarry
看了文章,还有里面提到的
http://www-inst.eecs.berkeley.edu/\~cs61c/sp06/handout/fixedpt.html

说定点数没有固定的小数点位置,突然反应过来,16.162.30 的意思是小数点的位置!!

16.16:小数点在前十六位和后十六位中间
2.30:小数点在前两位和后三十位中间

所以 / (1 << 16) 的姿势就解释的通了,2.30 对应的代码是 / (1 << 30)

果然文字还是容易歧义...

5 年 后

© 2018-2025 0xFFFF