尝试JPEGD+resize+JPEGE

尝试把JPEGD、resize、JPEGE串起来,首先需要提炼每个部分都做了什么事情,然后基于“内存复用”这一提示,准备异步解码、异步缩放、异步编码这三个函数所需要的参数,组织完整的程序

首先,按照文档提供的步骤对开源样例进行整理,添加相应的注释,加深对各自流程的理解

第二,将JPEGD的流程提炼为

“申请device侧解码输入内存”

“申请device侧解码输出内存”

“创建解码输出图片描述信息”

“执行异步解码”

“阻塞程序”

第三,分析JPEGD流程图,这里有两个橘黄色的可选步骤,一个是“下发其他异步任务”,另一个是“获取编码后的结果数据”,回想到JPEGD、resize、JPEGE都是异步任务,这里尝试将resize添加在第一个橘黄色可选步骤的位置,即“执行异步解码”之后,“阻塞程序”之前

第四,resize的执行是靠调用acldvppVpcResizeAsync函数完成的,这里整理其需要的参数,将resize部分代码与JPEGD合并。将resize的流程提炼为

“创建缩放配置数据”

“==申请device侧缩放输入内存==”

“申请device侧缩放输出内存”

“创建缩放输入图片描述信息”

“创建缩放输出图片描述信息”

“执行异步缩放”

其中,“==申请device侧缩放输入内存==”部分可以优化,由于之前的JPEGD解码结果已经保存于device侧的内存中,这里可以尝试内存复用

具体的,异步resize需要的参数如下

1. dvppChannelDesc_,该参数为通道描述符,由于resize与jpegd在同一个channel中,所以可以直接使用jpegd中的通道

2. vpcInputDesc_,该参数为缩放输入图片描述符,需要靠“创建缩放输入图片描述信息”部分代码完成

2.1 缩放输入图片描述信息中,需要指定device侧缩放输入内存,原本用的是“==申请device侧缩放输入内存==”部分代码申请下来的内存,现在使用JPEGD编码输出内存,从“解码输出图片描述信息”里找,decodeOutDevBuffer_

2.2 缩放输入图片描述信息中,需要指定输入图片的宽高,调用AlignmentHelper函数进行对齐,需要合并;原本缩放输入图片的宽高是解析参数得到的,现在要以编码输出图片的宽高作为缩放输入图片的宽高,即decodeOutWidthStride和decodeOutHeightStride

3. vpcOutputDesc_,该参数为缩放输出图片描述符,需要靠“创建缩放输出图片描述信息”部分代码完成

3.1缩放输出图片描述信息中,需要指定device侧缩放输出内存,原本用的是“申请device侧缩放输出内存”,现在不变

3.2申请上述内存时需要计算要申请的内存大小,需要知道缩放输出图片的宽高,这一点之前时通过解析参数得到的,现在也需要在解析参数这部分完成,所以要调整这部分代码

4. resizeConfig_,该参数为编码配置数据,需要靠“创建缩放配置数据”部分代码完成

5. stream_,该参数为Stream,用同一个Stream

第五,分析resize流程图,在执行异步缩放之后,在同步等待之前,可以继续插入其他异步任务,在这里继续插入异步编码JPEGE

第六、JPEGE的执行是靠调用acldvppJpegEncodeAsync函数完成的,这里整理其需要的参数,将JPEGE部分代码合并。将JPEGE的流程提炼为

“==在device侧申请编码输入内存==”

“创建编码输入图片描述信息”

“创建图片编码配置数据”

“在device侧申请编码输出内存”

“执行异步编码”

其中,“==在device侧申请编码输入内存==”部分可以优化,由于之前的resize结果已经保存于device侧的内存中,这里也可以尝试内存复用

具体的,异步JPEGE需要的参数如下

1. dvppChannelDesc_,该参数为通道描述符,由于jpege与resize、jpegd在同一个channel中,所以可以直接使用之前的通道

2. encodeInputDesc_,该参数为编码输入图片描述符,需要靠“创建编码输入图片描述信息”部分代码完成

2.1 编码输入图片描述信息中,需要指定device侧编码输入内存指针,原本用的是“==在device侧申请编码输入内存==”部分代码调用get_picdevbuffer4_jpege函数申请下来的内存,现在使用resize缩放输出内存,从“缩放输出图片描述信息”里找,vpcOutBufferDev_

这里可以通过修改set_input4_jpege函数的第一个参数,完成指定输入缓存的修改

2.2 编码输入图片描述信息中,需要输入图片的宽高,原本是解析参数得到的,现在要以缩放输出图片的宽高作为编码输入图片的宽高,即resizeOutWidthStride和resizeOutHeightStride

这里可以通过修改set_input4_jpege函数,完成指定输入缓存的修改

2.3 编码输入图片描述信息中,需要指定device侧编码输入内存大小,原本用的调用compute_encode_inputsize函数计算出来的,现在同样从“缩放输出图片描述信息”里找,vpcOutBufferSize_

这里可以通过修改set_input4_jpege函数的第二个参数,完成指定输入缓存大小的修改

3. encode_out_buffer_dev_,该参数为编码输出内存地址,原本用的是“在device侧申请编码输出内存”,现在不变

3.1 申请上述内存时需要计算要申请的内存大小,需要知道图片编码配置,原本用的是“创建图片编码配置数据”,现在不变

4. encode_outbuffer_size_,该参数为编码输出内存大小

5. jpegeConfig_,该参数为图片编码配置

6. stream_,该参数为Stream,用同一个Stream

第七、将JPEGE后续代码补齐,检查函数调用、声明、释放各部分资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值