test_resize.cpp0
3.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include "./interface/DecoderManager.h"
#include <mutex>
#include <thread>
#include <chrono>
#include "./interface/logger.hpp"
#include "./dvpp/VpcUtils.h"
#include <opencv2/opencv.hpp>
using namespace std;
struct decode_cbk_userdata{
string task_id;
void* opaque;
void* opaque1;
};
deque<DeviceMemory*> m_RgbDataList;
mutex m_DataListMtx;
bool m_bfinish{false};
int m_devId = 0;
const char* task_id = "test0";
int skip_frame_ = 5;
int m_batch_size = 20;
int reindex = 0;
void post_decod_cbk(const void * userPtr, DeviceMemory* devFrame){
VpcUtils* pUtils = VpcUtils::getInstance(0);
DeviceMemory* mem = pUtils->resize(dynamic_cast<DvppDataMemory*>(devFrame.get()), 640, 640);
HostData* tmp_img = mem->memCpy2Host();
cv::Mat cur_image(tmp_img->height, tmp_img->width, CV_8UC3, tmp_img->pData);
string path = "./re/" +std::to_string(reindex) + ".jpg";
cv::imwrite(path, cur_image);
cur_image.release();
delete tmp_img;
tmp_img = nullptr;
reindex++;
}
void decode_finished_cbk(const void * userPtr){
decode_cbk_userdata* ptr = (decode_cbk_userdata*)userPtr;
if (ptr!= nullptr){
printf("task finished: %s \n", ptr->task_id.c_str());
delete ptr;
ptr = nullptr;
}
}
bool create_task(string task_id) {
// 创建解码任务
DecoderManager* pDecManager = DecoderManager::getInstance();
MgrDecConfig config;
config.name = task_id;
config.cfg.uri = "/data/share/data/Street.uvf";
config.cfg.post_decoded_cbk = post_decod_cbk;
config.cfg.decode_finished_cbk = decode_finished_cbk;
config.cfg.force_tcp = true; // rtsp用tcp
config.cfg.gpuid = to_string(m_devId);
config.cfg.skip_frame = skip_frame_;
config.dec_type = DECODER_TYPE_DVPP;
AbstractDecoder* dec = pDecManager->createDecoder(config);
if (!dec){
printf("创建解码器失败 \n");
return false;
}
// decode_cbk_userdata* userPtr = new decode_cbk_userdata;
// userPtr->task_id = string(task_id);
// pDecManager->setPostDecArg(config.name, userPtr);
// pDecManager->setFinishedDecArg(config.name, userPtr);
dec->setSnapTimeInterval(1000);
int input_image_width = 0;
int input_image_height = 0;
pDecManager->getResolution(config.name, input_image_width, input_image_height);
pDecManager->startDecodeByName(config.name);
// pDecManager->closeAllDecoder();
return true;
}
int main(){
set_default_logger(LogLevel(0), "test_decode","logs/main.log", 64 * 1024 * 1024, 64 * 1024 * 1024);
LOG_INFO("编译时间:{} {}", __DATE__, __TIME__);
printf("start... \n");
DecoderManager* pDecManager = DecoderManager::getInstance();
char ch = 'a';
int task_id = 1;
create_task(to_string(task_id));
task_id++;
while (ch != 'q') {
ch = getchar();
switch (ch)
{
case '4':
for (size_t i = 0; i < 4; i++)
{
create_task(to_string(task_id));
task_id++;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
break;
case 'a':
create_task(to_string(task_id));
task_id++;
std::this_thread::sleep_for(std::chrono::seconds(1));
break;
case 'c':
pDecManager->closeAllDecoder();
break;
default:
break;
}
}
}