8x8离散余弦的快速精确实现使用数据流单指令多数据扩展指令集进行转换MMX 说明书

1.https://www.cs.cmu.edu/~barbic/cs-740/ap922.pdf

2.FFmpeg: libavcodec/x86/fdct.c Source File

再学FDCT快速精确实现协议改写浮点FDCT,

ffmpeg的dct使用的就是这个快速精确协议。

3.http://dspace.fcu.edu.tw/bitstream/2377/30265/1/ICM%204-1.pdf

我想如把所有余弦值用手算算出来,再用if查表应该能缩短时间,可惜数量太大,有8*8*8*8=4096个。还有一种稍微简便的方法改为1D DCT,现在用的是2D,可以缩小到2D四分之一时间。但最好的是用ffmpeg的AAN算法,但太难了,那怕是照搬复制都不容易。

286cfd87313945bdb74ae17a30f6eae5.jpg

 网上讲,2D DCT转为1D 后,转换时间减少四分之三。我理解1D是否是分别对8行原始数据DCT后得到8行S8,,再对S8竖向取8列再DCT?编程验证一下。

8行水平DCT 循环为8*8*8,再加上垂直的DCT,共计2*8*8*8=1024 ,理论上是少了 3/4.

经程序验证。2D DCT 转为1D DCT 的步骤如下:

1.8×8 的块每行先1D DCT,

2,用每行1D DCT后的数据再生成中间8×8块 Sz,

3取Sz 每列 1D DCT 后生成的8×8数据就是2D DCT 系数

1D DCT已实现,下一步看能不能用c按照上面的协议实现AAN转换,ffmpeg是用的汇编语言实现的。

1D DCT程序代码见另一篇博文。

 

 

 

 

 

 

最近更新

  1. TCP协议是安全的吗?

    2024-01-18 04:34:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-18 04:34:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-18 04:34:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-18 04:34:01       20 阅读

热门阅读

  1. 菜鸟C语言实例

    2024-01-18 04:34:01       37 阅读
  2. 【Leetcode】269.火星词典(Hard)

    2024-01-18 04:34:01       28 阅读
  3. Unity面试笔记:Unity常见关键词概念

    2024-01-18 04:34:01       29 阅读
  4. go语言GMP模式介绍以及协程案例展示

    2024-01-18 04:34:01       25 阅读
  5. MongoDB聚合:$indexStats

    2024-01-18 04:34:01       33 阅读
  6. C#中类型的转换

    2024-01-18 04:34:01       31 阅读
  7. 数字猜测游戏

    2024-01-18 04:34:01       27 阅读
  8. ubuntu通过virtualbox安装win虚拟机

    2024-01-18 04:34:01       27 阅读
  9. Matlab | SISO系统差分方程求解(附matlab源码)

    2024-01-18 04:34:01       28 阅读