Commit cf231d0a84eec0676712975ff8e3f143291979e9
1 parent
c19334fe
优化弃帧逻辑
Showing
1 changed file
with
14 additions
and
1 deletions
src/decoder/dvpp/DvppDecoder.cpp
... | ... | @@ -712,13 +712,26 @@ void DvppDecoder::doVdppVdecCallBack(acldvppStreamDesc *input, acldvppPicDesc *o |
712 | 712 | |
713 | 713 | bool bCached = false; |
714 | 714 | if(width > 0 && height > 0 && outputSize > 0){ |
715 | + if (!m_bReal) { | |
716 | + while(m_bRunning) { | |
717 | + // 非实时流,即为文件情形,因为不存在花屏问题,为保证不丢帧,这里做个循环等待 | |
718 | + m_decoded_data_queue_mtx.lock(); | |
719 | + if(m_decoded_data_queue.size() > 5){ | |
720 | + m_decoded_data_queue_mtx.unlock(); | |
721 | + std::this_thread::sleep_for(std::chrono::milliseconds(5)); | |
722 | + continue; | |
723 | + } | |
724 | + m_decoded_data_queue_mtx.unlock(); | |
725 | + break; | |
726 | + } | |
727 | + } | |
715 | 728 | |
716 | 729 | // cout << m_dec_name << " 解码时间间隔: " << get_cur_time_ms() - last_ts << endl; |
717 | 730 | // last_ts = get_cur_time_ms(); |
718 | 731 | |
719 | 732 | // 换成解码后数据, 这里这样做的是为了保证解码一直持续进行,避免后续操作阻碍文件读取和解码从而导致花屏 |
720 | 733 | m_decoded_data_queue_mtx.lock(); |
721 | - if(m_decoded_data_queue.size() <= 5) { | |
734 | + if(m_decoded_data_queue.size() <= 25) { | |
722 | 735 | DvppDataMemory* mem = new DvppDataMemory(width, width_stride, height, height_stride, outputSize, m_dec_name, to_string(m_dvpp_deviceId), false, frame_nb, (unsigned char *)outputDataDev); |
723 | 736 | if(mem){ |
724 | 737 | m_decoded_data_queue.push(mem); | ... | ... |