63e6f7bc
Hu Chunming
完成dvpp。但是nv和gb281...
|
1
2
3
4
5
|
#include "VpcPicConverter.h"
#include "depend_headers.h"
#define ALIGN_UP(val, align) (((val) % (align) == 0) ? (val) : (((val) / (align) + 1) * (align)))
|
d248da62
Hu Chunming
优化代码,修正dvpp的一些bug
|
6
|
VpcPicConverter::VpcPicConverter(){
|
63e6f7bc
Hu Chunming
完成dvpp。但是nv和gb281...
|
7
|
|
d248da62
Hu Chunming
优化代码,修正dvpp的一些bug
|
8
|
}
|
63e6f7bc
Hu Chunming
完成dvpp。但是nv和gb281...
|
9
|
|
d248da62
Hu Chunming
优化代码,修正dvpp的一些bug
|
10
11
12
|
VpcPicConverter::~VpcPicConverter(){
if(nullptr == stream_){
aclrtDestroyStream(stream_);
|
63e6f7bc
Hu Chunming
完成dvpp。但是nv和gb281...
|
13
|
}
|
d248da62
Hu Chunming
优化代码,修正dvpp的一些bug
|
14
|
}
|
63e6f7bc
Hu Chunming
完成dvpp。但是nv和gb281...
|
15
|
|
d248da62
Hu Chunming
优化代码,修正dvpp的一些bug
|
16
17
18
19
20
21
|
int VpcPicConverter::init(aclrtContext context, string dec_name){
m_dec_name = dec_name;
CHECK_AND_RETURN(aclrtSetCurrentContext(context), "aclrtSetCurrentContext failed");
CHECK_AND_RETURN(aclrtCreateStream(&stream_), "aclrtCreateStream failed! ");
|
63e6f7bc
Hu Chunming
完成dvpp。但是nv和gb281...
|
22
|
|
d248da62
Hu Chunming
优化代码,修正dvpp的一些bug
|
23
24
25
26
27
28
29
30
31
32
33
34
35
|
dvppChannelDesc_ = acldvppCreateChannelDesc();
int ret = ACL_ERROR_NONE;
do
{
ret = acldvppCreateChannel(dvppChannelDesc_);
CHECK_AND_BREAK(ret, "acldvppCreateChannel failed !");
ret = acldvppSetChannelDescMode(dvppChannelDesc_, DVPP_CHNMODE_VPC);
CHECK_AND_BREAK(ret, "acldvppSetChannelDescMode failed !");
} while (0);
return ret;
|
63e6f7bc
Hu Chunming
完成dvpp。但是nv和gb281...
|
36
37
38
39
|
}
DvppRgbMemory* VpcPicConverter::convert2bgr(acldvppPicDesc *inputDesc_, int out_width, int out_height, bool key_frame){
|
63e6f7bc
Hu Chunming
完成dvpp。但是nv和gb281...
|
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
int out_buf_width = ALIGN_UP(out_width, 16) * 3;
int out_buf_height = ALIGN_UP(out_height, 2);
int out_buf_size = out_buf_width * out_buf_height;
DvppRgbMemory* rgbMem = new DvppRgbMemory(3, out_buf_width, out_buf_height, out_buf_size, "", to_string(m_devId), key_frame);
void *outBufferDev_ = (void*)rgbMem->getMem();
acldvppPicDesc *outputDesc_= acldvppCreatePicDesc();
acldvppSetPicDescData(outputDesc_, outBufferDev_);
acldvppSetPicDescFormat(outputDesc_, PIXEL_FORMAT_BGR_888);
acldvppSetPicDescWidth(outputDesc_, out_width);
acldvppSetPicDescHeight(outputDesc_, out_height);
acldvppSetPicDescWidthStride(outputDesc_, out_buf_width);
acldvppSetPicDescHeightStride(outputDesc_, out_buf_height);
acldvppSetPicDescSize(outputDesc_, out_buf_size);
|
63e6f7bc
Hu Chunming
完成dvpp。但是nv和gb281...
|
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
aclError ret = ACL_ERROR_NONE;
do{
// 9. 执行异步色域转换,再调用aclrtSynchronizeStream接口阻塞程序运行,直到指定Stream中的所有任务都完成
ret = acldvppVpcConvertColorAsync(dvppChannelDesc_, inputDesc_, outputDesc_, stream_);
if(ret != ACL_ERROR_NONE){
LOG_ERROR("acldvppVpcConvertColorAsync failed - out_width:{} out_height:{} out_buf_width:{} out_buf_height:{} out_buf_size:{}", out_width, out_height, out_buf_width, out_buf_height, out_buf_size);
break;
}
ret = aclrtSynchronizeStream(stream_);
if(ret != ACL_ERROR_NONE){
LOG_ERROR("aclrtSynchronizeStream failed - out_width:{} out_height:{} out_buf_width:{} out_buf_height:{} out_buf_size:{}", out_width, out_height, out_buf_width, out_buf_height, out_buf_size);
break;
}
}while(0);
|
63e6f7bc
Hu Chunming
完成dvpp。但是nv和gb281...
|
71
72
73
74
75
76
77
78
|
acldvppDestroyPicDesc(outputDesc_);
if(ret != ACL_ERROR_NONE){
delete rgbMem;
rgbMem = nullptr;
}
return rgbMem;
|
63e6f7bc
Hu Chunming
完成dvpp。但是nv和gb281...
|
79
|
}
|