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 系数

相关推荐
Dillon Dong13 小时前
STM32嵌入式:使用 MT29F8G08ABACAWP NAND 的FLASH全面指南
c语言·stm32
zhongvv15 小时前
对单片机C语言指针的一些理解
c语言·数据结构·单片机·指针·汇编语言
朔北之忘 Clancy16 小时前
2025 年 9 月青少年软编等考 C 语言一级真题解析
c语言·开发语言·c++·学习·数学·青少年编程·题解
你怎么知道我是队长16 小时前
C语言---缓冲区
c语言·开发语言
不爱吃糖的程序媛18 小时前
OpenHarmony 通用C/C++三方库 标准化鸿蒙化适配
c语言·c++·harmonyos
朔北之忘 Clancy19 小时前
2020 年 6 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·尺取法
HABuo19 小时前
【Linux进程(五)】进程地址空间深入剖析-->虚拟地址、物理地址、逻辑地址的区分
linux·运维·服务器·c语言·c++·后端·centos
AuroraWanderll19 小时前
类和对象(六)--友元、内部类与再次理解类和对象
c语言·数据结构·c++·算法·stl
无限进步_20 小时前
【C语言&数据结构】另一棵树的子树:递归思维的双重奏
c语言·开发语言·数据结构·c++·算法·github·visual studio
不爱吃糖的程序媛20 小时前
OpenHarmony跨端生态适配全指南|Flutter/RN/三方库/C/C++/仓颉 鸿蒙化最佳实践
c语言·c++·flutter