三线程加速无损视频解码

    无损解码速度快,需要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多媒体硬件部分实现加速,不通用,需要检测各种环境,应用不同方案才能“通用”。

 4. 在4核处理器使用6线程处理压缩/解压缩数据时,发现CPU占用率高了,效率却没提升,软解压反而降速,究其原因是因为只有4核,同时只能处理4个线程,另外2个要等前4个处理完成,延误了一倍世间。如果在4核处理器运行,三个线程分配处理图像,一个线程处理其他和主线程,可避免CPU占用率过高,反应迟钝。

posted @ 2020-01-08 23:59  hbg200  阅读(369)  评论(0编辑  收藏  举报