使用多线程优化dsc c model

前言

vssa提供了dsc压缩的c model,可用作硬件实现的参考模型,生成的数据可作为gloden的数据,但在使用的过程中发现软件解码8k图像压缩后的dsc文件,解码速度较慢,由其是想基于c model开发UI工具的时候,较长的解码过程会阻塞住主线程,导致UI界面卡顿,一般需要起个线程去做解码的工作,避免阻塞住UI界面,所以就想着优化下C MODEL的解码速度。

优化的原理

dsc 的c model设计上是分多个slice的,各个slice解码过程中相互独立,互不影响。协议中介绍如下:
为加速编码的过程,并且减少经过压缩的失真,DSC技术导入截面(Slice),将每一帧的画面加以切割,切割出的截面同时进行编码。DSC可支持的截面数有1、2、4、8个,甚至更多的截面数。需要注意的是单位为slice/line,line是指画面成形时以raster-scan顺序为一行的像素。除不同截面数外,DSC也可以使用不同长宽的截面。示意图如下:
在这里插入图片描述
所以,我们可以把dsc中dsc dec的for循环顺序处理切片的逻辑改成多线程,每个线程去单独处理一个切片,一般硬件切片小于等于16,相对于cpu核心,数目也比较适合,所以我们的目标就是优化如下这段逻辑。
在这里插入图片描述

环境搭建

本文只介绍如何优化解码。
由于dsc是c语言写的,想将之用c++编译器编译存在一些工作量,部分代码用c++编译器编译会报错,所以就不使用c++标准库的std::thread改写了,引入posix标准写的c语言多线程库pthread,平台用vs,下面介绍如何搭建环境
直接打开C_Model文件夹,点击vs文件
在这里插入图片描述
我们需要找到posix线程库windows版本并导入到vs项目中,步骤如下:
pthread的下载网站:https://www.mirrorservice.org/sites/sourceware.org/pub/pthreads-win32/
找个版本下载下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值