Commit 42424bf28af2f9637af2b6b58b100a3e315c0175
1 parent
bb35905f
代码优化
Showing
1 changed file
with
61 additions
and
44 deletions
src/dvpp/DvppDec.cpp
... | ... | @@ -2,11 +2,13 @@ |
2 | 2 | #include "DvppSourceManager.h" |
3 | 3 | |
4 | 4 | #define CHECK_AND_RETURN(ret, message) \ |
5 | - if(ret != 0) {cout << "device: " << m_dvpp_deviceId << ", chn: " << m_dvpp_channel << ", ret: " << ret << ", [ERROR] " << message; return ret;} | |
5 | + if(ret != 0) {LOG_ERROR("[{}]- {}", m_dec_name, message); return ret;} | |
6 | 6 | #define CHECK_NOT_RETURN(ret, message) \ |
7 | - if(ret != 0) {cout << "device: " << m_dvpp_deviceId << ", chn: " << m_dvpp_channel << ", ret: " << ret << ", [ERROR] " << message;} | |
7 | + if(ret != 0) {LOG_ERROR("[{}]- {}", m_dec_name, message);} | |
8 | 8 | #define CHECK_AND_RETURN_NOVALUE(ret, message) \ |
9 | - if(ret != 0) {cout << "device: " << m_dvpp_deviceId << ", chn: " << m_dvpp_channel << ", ret: " << ret << ", [ERROR] " << message; return;} | |
9 | + if(ret != 0) {LOG_ERROR("[{}]- {}", m_dec_name, message); return;} | |
10 | +#define CHECK_AND_BREAK(ret, message) \ | |
11 | + if(ret != 0) {LOG_ERROR("[{}]- {}", m_dec_name, message); break;} | |
10 | 12 | |
11 | 13 | struct Vdec_CallBack_UserData { |
12 | 14 | uint64_t frameId; |
... | ... | @@ -259,7 +261,7 @@ void DvppDec::releaseResource(){ |
259 | 261 | |
260 | 262 | for(int i = 0; i < m_vec_vdec.size(); i++){ |
261 | 263 | if(m_vec_vdec[i] != nullptr){ |
262 | - acldvppFree((uint8_t*)m_vec_vdec[i]); | |
264 | + acldvppFree(m_vec_vdec[i]); | |
263 | 265 | m_vec_vdec[i] = nullptr; |
264 | 266 | } |
265 | 267 | } |
... | ... | @@ -316,22 +318,22 @@ void DvppDec::decode_thread(){ |
316 | 318 | } |
317 | 319 | |
318 | 320 | // 尽量保证数据全部解码完成 |
319 | - // int sum = 0; | |
320 | - // if(!bBreak){ | |
321 | - // while(!m_pktQueueptr->isEmpty()){ | |
322 | - // int ret = sentFrame(vdecChannelDesc, frame_count); | |
323 | - // if(ret == 2){ | |
324 | - // break; | |
325 | - // } | |
326 | - // sum++; | |
327 | - // if(sum > 10){ | |
328 | - // // 避免卡死 | |
329 | - // break; | |
330 | - // } | |
331 | - // } | |
332 | - // } | |
321 | + int sum = 0; | |
322 | + if(!bBreak){ | |
323 | + while(!m_pktQueueptr->isEmpty()){ | |
324 | + int ret = sentFrame(vdecChannelDesc, frame_count); | |
325 | + if(ret == 2){ | |
326 | + break; | |
327 | + } | |
328 | + std::this_thread::sleep_for(std::chrono::milliseconds(3)); | |
329 | + sum++; | |
330 | + if(sum > 40){ | |
331 | + // 避免卡死 | |
332 | + break; | |
333 | + } | |
334 | + } | |
335 | + } | |
333 | 336 | |
334 | - | |
335 | 337 | sendVdecEos(vdecChannelDesc); |
336 | 338 | |
337 | 339 | CHECK_NOT_RETURN(aclvdecDestroyChannel(vdecChannelDesc), "aclvdecDestroyChannel failed"); |
... | ... | @@ -378,33 +380,48 @@ int DvppDec::sentFrame(aclvdecChannelDesc *vdecChannelDesc, uint64_t frame_count |
378 | 380 | return 2; |
379 | 381 | } |
380 | 382 | |
381 | - /************ 解码*************/ | |
382 | - acldvppStreamDesc *input_stream_desc = acldvppCreateStreamDesc(); | |
383 | + acldvppStreamDesc *input_stream_desc = nullptr; | |
384 | + acldvppPicDesc *output_pic_desc = nullptr; | |
385 | + do{ | |
386 | + input_stream_desc = acldvppCreateStreamDesc(); | |
383 | 387 | if (input_stream_desc == nullptr) { cout << "acldvppCreateStreamDesc error" << endl; } |
384 | - acldvppPicDesc *output_pic_desc = acldvppCreatePicDesc(); | |
388 | + output_pic_desc = acldvppCreatePicDesc(); | |
385 | 389 | if (output_pic_desc == nullptr) { cout<< "acldvppCreatePicDesc error" << endl; } |
386 | - CHECK_NOT_RETURN(acldvppSetStreamDescData(input_stream_desc, vdecInputbuf), "acldvppSetStreamDescData failed"); | |
387 | - CHECK_NOT_RETURN(acldvppSetStreamDescSize(input_stream_desc, pkt->size), "acldvppSetStreamDescSize failed"); | |
388 | - CHECK_NOT_RETURN(acldvppSetPicDescData(output_pic_desc, vdecOutputBuf), "acldvppSetPicDescData failed"); | |
389 | - CHECK_NOT_RETURN(acldvppSetPicDescSize(output_pic_desc, m_vdec_out_size), "acldvppSetPicDescSize failed"); | |
390 | - | |
391 | - Vdec_CallBack_UserData *user_data = NULL; | |
392 | - user_data = new Vdec_CallBack_UserData; | |
393 | - user_data->frameId = frame_count; | |
394 | - // user_data->startTime = startTime; | |
395 | - user_data->sendTime = UtilTools::get_cur_time_ms(); | |
396 | - user_data->self = this; | |
397 | - // user_data->inBufNode = bufNode; | |
398 | - cout << "send frame" << endl; | |
399 | - CHECK_NOT_RETURN(aclvdecSendFrame(vdecChannelDesc, input_stream_desc, output_pic_desc, nullptr, reinterpret_cast<void *>(user_data)), | |
400 | - "aclvdecSendFrame failed"); | |
401 | - | |
402 | - m_vdecQueue.addTail(); | |
403 | - | |
404 | - m_pktQueueptr->addHead(); | |
405 | - av_packet_unref(pkt); | |
406 | - | |
407 | - return 0; | |
390 | + CHECK_AND_BREAK(acldvppSetStreamDescData(input_stream_desc, vdecInputbuf), "acldvppSetStreamDescData failed"); | |
391 | + CHECK_AND_BREAK(acldvppSetStreamDescSize(input_stream_desc, pkt->size), "acldvppSetStreamDescSize failed"); | |
392 | + CHECK_AND_BREAK(acldvppSetPicDescData(output_pic_desc, vdecOutputBuf), "acldvppSetPicDescData failed"); | |
393 | + CHECK_AND_BREAK(acldvppSetPicDescSize(output_pic_desc, m_vdec_out_size), "acldvppSetPicDescSize failed"); | |
394 | + | |
395 | + Vdec_CallBack_UserData *user_data = NULL; | |
396 | + user_data = new Vdec_CallBack_UserData; | |
397 | + user_data->frameId = frame_count; | |
398 | + // user_data->startTime = startTime; | |
399 | + user_data->sendTime = UtilTools::get_cur_time_ms(); | |
400 | + user_data->self = this; | |
401 | + // user_data->inBufNode = bufNode; | |
402 | + cout << "send frame" << endl; | |
403 | + CHECK_NOT_RETURN(aclvdecSendFrame(vdecChannelDesc, input_stream_desc, output_pic_desc, nullptr, reinterpret_cast<void *>(user_data)), | |
404 | + "aclvdecSendFrame failed"); | |
405 | + | |
406 | + m_vdecQueue.addTail(); | |
407 | + | |
408 | + m_pktQueueptr->addHead(); | |
409 | + av_packet_unref(pkt); | |
410 | + | |
411 | + return 0; | |
412 | + }while (0); | |
413 | + | |
414 | + if(input_stream_desc){ | |
415 | + CHECK_NOT_RETURN(acldvppDestroyStreamDesc(input_stream_desc), "acldvppDestroyStreamDesc failed"); | |
416 | + } | |
417 | + if(output_pic_desc){ | |
418 | + CHECK_NOT_RETURN(acldvppDestroyPicDesc(output_pic_desc), "acldvppDestroyPicDesc failed"); | |
419 | + } | |
420 | + | |
421 | + acldvppFree(vdecOutputBuf); | |
422 | + vdecOutputBuf = nullptr; | |
423 | + | |
424 | + return 1; | |
408 | 425 | } |
409 | 426 | |
410 | 427 | ... | ... |