作者小头像 Lv.1
9 成长值

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据
个人勋章
TA还没获得勋章~
成长雷达
0
9
0
0
0

个人资料

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据

达成规则

发布时间 2020/02/13 14:16:57 最后回复 Mars_WH 2020/05/18 15:58:43 版块 昇腾硬件
1616 2 0
发布时间 2019/11/25 15:04:44 最后回复 j_f 2019/11/30 21:44:30 版块 Atlas 200 DK
1922 9 0
他的回复:
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=97014&ptid=29695][color=#999999]回复:atlas_lxj 发表于 2019-11-25 20:30[/color][/url][/size] 可否把你那片代码发过来看下,我们这里分析看看[/quote] HIAI_IMPL_ENGINE_PROCESS("JpegDecode", JpegDecode, INPUT_SIZE)组batch以后调用解码。 input_buffer_,output_buffer_[batch_size]输入和输出再Init中已经用dvpp_dmalloc申请好。 ```cpp HIAI_StatusT HzDecode::Init(const hiai::AIConfig& config, const std::vector& model_desc) { PRINTF("HzDecode Init"); HIAI_StatusT ret; if (nullptr == dvpp_handle_) { CreateDvppApi(dvpp_handle_); if (nullptr == dvpp_handle_ ) { return HIAI_ERROR; } } int preWidth = 4096; int preHeight = 2160; if(nullptr == input_buffer_) { int preAllocSize = preWidth*preHeight; ret = HIAIMemory::HIAI_DVPP_DMalloc(preAllocSize,(void* &)input_buffer_); if(ret != HIAI_OK || input_buffer_ == nullptr) { return HIAI_ERROR; } } int yuvPreAllocSize = ALIGN128(preWidth)*ALIGN16(preHeight)*3/2; uint8_t * pTotal = nullptr; ret = HIAIMemory::HIAI_DVPP_DMalloc(yuvPreAllocSize*MAX_NUM_BATCH_,(void* &)pTotal); if(ret != HIAI_OK || pTotal == nullptr) { return HIAI_ERROR; } for (int i = 0; i MAX_NUM_BATCH_; ++i) { output_buffer_[i] = pTotal+i*yuvPreAllocSize; } return HIAI_OK; } ``` ```cpp HIAI_StatusT HzDecode::HandleJpeg(std::shared_ptr& jpeg) { HIAI_StatusT hiai_ret = HIAI_OK; for (int i = 0; i jpeg->b_img.v_img.size(); ++i) { struct JpegdIn jpegd_in_data; struct JpegdOut jpegd_out_data; jpegd_in_data.jpegDataSize = jpeg->b_img.v_img[i].img.size + 8; jpegd_in_data.isYUV420Need = false; jpegd_in_data.isVBeforeU = true; jpegd_in_data.jpegData = input_buffer_; memcpy_s(jpegd_in_data.jpegData, jpegd_in_data.jpegDataSize, reinterpret_cast(jpeg->b_img.v_img[i].img.data.get()), jpeg->b_img.v_img[i].img.size); DvppGetOutParameter((void*)&jpegd_in_data,(void*)&jpegd_out_data,GET_JPEGD_OUT_PARAMETER); jpegd_out_data.yuvData = output_buffer_[i]; dvppapi_ctl_msg dvpp_api_ctl_msg; dvpp_api_ctl_msg.in = (void*)&jpegd_in_data; dvpp_api_ctl_msg.in_size = sizeof(struct jpegd_raw_data_info); dvpp_api_ctl_msg.out = (void*)&jpegd_out_data; dvpp_api_ctl_msg.out_size = sizeof(struct jpegd_yuv_data_info); ts_->save("DVPP_CTL_JPEGD_PROC"); int dvpp_ret = DvppCtl(dvpp_handle_, DVPP_CTL_JPEGD_PROC, &dvpp_api_ctl_msg); if(0 != dvpp_ret)//即使返回错误,也把数据返回给后面使用 { HIAI_ENGINE_LOG(HIAI_IDE_ERROR,"DVPP_DECODE_FIAL: %d,ERROR_CODE: %d",jpeg->b_img.b_info.source_ID[i],dvpp_ret); memset_s(jpegd_out_data.yuvData,jpegd_out_data.yuvDataSize,static_cast(0),jpegd_out_data.yuvDataSize); //return HIAI_ERROR; } ts_->save("DVPP_CTL_JPEGD_PROC"); jpeg->b_img.v_img[i].img.width = jpegd_out_data.imgWidth; jpeg->b_img.v_img[i].img.height = jpegd_out_data.imgHeight; jpeg->b_img.v_img[i].img.width_step = jpegd_out_data.imgWidthAligned; jpeg->b_img.v_img[i].img.height_step = jpegd_out_data.imgHeightAligned; jpeg->b_img.v_img[i].img.format = YVU420SP; jpeg->b_img.v_img[i].img.size = jpegd_out_data.imgWidthAligned*jpegd_out_data.imgHeightAligned*3/2; jpeg->b_img.v_img[i].img.data = std::shared_ptr(jpegd_out_data.yuvData,[](uint8_t*){});//手动释放 } return HIAI_OK; } ```