无损解码速度快,需要56ms(基于YUV和DCT的需要1.6s),经过优化,比如将for循环改为C语言自带的memcpy替换,提升到50ms,还不足于正常播放,因为1000ms/50ms=20帧峰值。为此需要提速,如果正常播放25帧视频,则需要可播放30帧的能力。
1. 对于图像提速可采用以下方法:
1.1 汇编方法:汇编可起到事半功倍的作用,但对于复杂的程序比如视频编码,转换很困难,需要时间和“汇编功力”。
1.2 图像分割方法:将图像“分割”为n等分区域,分别用线程同时运行,起到并行加速作用。“分割”图像需要一套操作机制,有些麻烦。
1.3 多媒体指令方法:就是以前的蝶形运算,现在是加强版,缺点是破坏程序结构,有些程序不适合(困难度很高)。
1.4 三线程方法(本文首先提出):彩色图像是由RGB构成的,基于传统方式的YUV,都是三个分量,分别由三个线程同时运行,起到加速作用。优点是利用自然的三个分量,操作简单。缺点是只能三个分量(线程),加速有限。经测试,由原来的50ms提速到22ms,提高了28ms,可实现1000ms/22ms=45帧峰值,满足了最高播放25帧要求。基于YUV和DCT的不能满足要求。
2. 线程与CPU“核”:多线程在多核处理器上是并行运行的。如果多个线程访问一个变量会造成冲突,起不到并行加速作用。
3. 其他视频加速:由显卡或CPU多媒体硬件部分实现加速,不通用,需要检测各种环境,应用不同方案才能“通用”。
原文地址:https://www.cnblogs.com/hbg200/p/12169278.html
时间: 2024-10-09 07:55:50