int AmRtpStream::nextPacket(AmRtpPacket& p) { if (!receiving && !passive) return RTP_EMPTY; struct timeval now; struct timeval diff; gettimeofday(&now,NULL); receive_mut.lock(); timersub(&now,&last_recv_time,&diff); if(AmConfig::DeadRtpTime && (diff.tv_sec > 0) && ((unsigned int)diff.tv_sec > AmConfig::DeadRtpTime)){ WARN("RTP Timeout detected. Last received packet is too old.\n"); DBG("diff.tv_sec = %i\n",(unsigned int)diff.tv_sec); receive_mut.unlock(); return RTP_TIMEOUT; } if(receive_buf.empty()){ receive_mut.unlock(); return RTP_EMPTY; } AmRtpPacket& pp = receive_buf.begin()->second; p.copy(&pp); receive_buf.erase(receive_buf.begin()); receive_mut.unlock(); return 1; }