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算法,但太难了,那怕是照搬复制都不容易。

网上讲,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 系数

相关推荐
HABuo3 分钟前
【linux线程(二)】线程互斥、线程同步、条件变量详细剖析
linux·运维·服务器·c语言·c++·ubuntu·centos
Rabitebla5 分钟前
归并排序(MergeSort)完全指南 —— 从原理到非递归实现
c语言·数据结构·c++·算法·排序算法
寒秋花开曾相惜7 分钟前
(学习笔记)3.9 异质的数据结构(3.9.1 结构)
c语言·网络·数据结构·数据库·笔记·学习
福楠7 分钟前
现代C++ | C++14甜点特性
linux·c语言·开发语言·c++
LuminousCPP19 分钟前
C语言自定义类型全解析
c语言·笔记·枚举·结构体·联合体
Yupureki1 小时前
《Linux系统编程》19.线程同步与互斥
java·linux·服务器·c语言·开发语言·数据结构·c++
Rabitebla2 小时前
快速排序(QuickSort)完全指南 —— 从原理到工业级优化
c语言·数据结构·c++·算法·github
liulilittle3 小时前
OPENPPP2 CTCP 协议栈 + 内置 TC Hairpin NAT 内核态程序
c语言·开发语言·网络·c++·信息与通信·通信
C++ 老炮儿的技术栈3 小时前
c++ this 指针的用途
c语言·开发语言·c++·windows·qt·github
风舞雪凌月3 小时前
【趣谈】移动系统和桌面系统编程语言思考
java·c语言·c++·python·学习·objective-c·swift