diff --git a/include/uvgrtp/util.hh b/include/uvgrtp/util.hh index 9a7ccec..6ef2ab1 100644 --- a/include/uvgrtp/util.hh +++ b/include/uvgrtp/util.hh @@ -144,7 +144,7 @@ enum RTP_CTX_ENABLE_FLAGS { * with RCE_SRTP_KMNGMNT_ZRTP */ RCE_SRTP_KMNGMNT_USER = 1 << 3, - /** Disable timout of intra frames */ + /** Obsolete */ RCE_NO_H26X_INTRA_DELAY = 1 << 4, /** By default, uvgRTP searches for start code prefixes (0x00000001) diff --git a/src/formats/h26x.cc b/src/formats/h26x.cc index 7cfeb12..0051b3f 100644 --- a/src/formats/h26x.cc +++ b/src/formats/h26x.cc @@ -36,7 +36,6 @@ #endif constexpr int GARBAGE_COLLECTION_INTERVAL_MS = 100; -constexpr int LOST_FRAME_TIMEOUT_MS = 500; static inline unsigned __find_h26x_start(uint32_t value,bool& additional_byte) { @@ -711,18 +710,8 @@ rtp_error_t uvgrtp::formats::h26x::packet_handler(int flags, uvgrtp::frame::rtp_ } } - bool enable_idelay = !(flags & RCE_NO_H26X_INTRA_DELAY); - - if (is_frame_late(frames_.at(fragment_ts), rtp_ctx_->get_pkt_max_delay())) { - if (nal_type != uvgrtp::formats::NAL_TYPE::NT_INTRA || - (nal_type == uvgrtp::formats::NAL_TYPE::NT_INTRA && !enable_idelay)) { - LOG_WARN("Received a packet that is too late! Timestamp: %lu", fragment_ts); - drop_frame(fragment_ts); - } - } - // make sure uvgRTP does not reserve increasing amounts of memory because some frames are not completed - garbage_collect_lost_frames(); + garbage_collect_lost_frames(rtp_ctx_->get_pkt_max_delay()); return RTP_OK; // no frame was completed, but everything went ok for this fragment } @@ -736,7 +725,7 @@ void uvgrtp::formats::h26x::get_nal_header_from_fu_headers(size_t fptr, uint8_t* std::memcpy(&complete_payload[fptr], payload_header, get_payload_header_size()); } -void uvgrtp::formats::h26x::garbage_collect_lost_frames() +void uvgrtp::formats::h26x::garbage_collect_lost_frames(size_t timout) { if (uvgrtp::clock::hrc::diff_now(last_garbage_collection_) >= GARBAGE_COLLECTION_INTERVAL_MS) { uint32_t total_cleaned = 0; @@ -744,7 +733,7 @@ void uvgrtp::formats::h26x::garbage_collect_lost_frames() // first find all frames that have been waiting for too long for (auto& gc_frame : frames_) { - if (uvgrtp::clock::hrc::diff_now(gc_frame.second.sframe_time) > LOST_FRAME_TIMEOUT_MS) { + if (uvgrtp::clock::hrc::diff_now(gc_frame.second.sframe_time) > timout) { LOG_WARN("Found an old frame that has not been completed"); to_remove.push_back(gc_frame.first); } diff --git a/src/formats/h26x.hh b/src/formats/h26x.hh index 9a3e1ec..7b8fcd4 100644 --- a/src/formats/h26x.hh +++ b/src/formats/h26x.hh @@ -165,7 +165,7 @@ namespace uvgrtp { // constructs and sends the RTP packets with format specific stuff rtp_error_t fu_division(uint8_t* data, size_t data_len, size_t payload_size); - void garbage_collect_lost_frames(); + void garbage_collect_lost_frames(size_t timout); rtp_error_t reconstruction(uvgrtp::frame::rtp_frame** out, int flags, uint32_t frame_timestamp, const uint8_t sizeof_fu_headers);