//------------------------------------------------------------------------- void RTPReceiverChannelAudio::onReceiverChannelAudioDeliverPackets() { RTPPacketQueue rtpPackets; RTCPPacketQueue rtcpPackets; UseChannelResourcePtr channelResource; { AutoRecursiveLock lock(*this); rtpPackets = mQueuedRTP; rtcpPackets = mQueuedRTCP; mQueuedRTP = RTPPacketQueue(); mQueuedRTCP = RTCPPacketQueue(); channelResource = mChannelResource; } if (!channelResource) return; while (rtpPackets.size() > 0) { auto packet = rtpPackets.front(); channelResource->handlePacket(*packet); rtpPackets.pop(); } while (rtcpPackets.size() > 0) { auto packet = rtcpPackets.front(); channelResource->handlePacket(*packet); rtcpPackets.pop(); } }
//------------------------------------------------------------------------- bool RTPReceiverChannelAudio::handlePacket(RTPPacketPtr packet) { UseChannelResourcePtr channelResource; { AutoRecursiveLock lock(*this); if (isShuttingDown() || isShutdown()) return false; channelResource = mChannelResource; bool shouldQueue = false; if (!channelResource) shouldQueue = true; if (mQueuedRTP.size() > 0) shouldQueue = true; if (shouldQueue) { mQueuedRTP.push(packet); if (1 == mQueuedRTP.size()) IWakeDelegateProxy::create(mThisWeak.lock())->onWake(); return true; } } if (!channelResource) return true; return channelResource->handlePacket(*packet); }
//------------------------------------------------------------------------- bool RTPSenderChannelAudio::handlePacket(RTCPPacketPtr packet) { UseChannelResourcePtr channelResource; { AutoRecursiveLock lock(*this); channelResource = mChannelResource; } if (!channelResource) return false; return channelResource->handlePacket(*packet); }
//------------------------------------------------------------------------- bool RTPReceiverChannelAudio::handlePacket(RTCPPacketPtr packet) { UseChannelResourcePtr channelResource; { AutoRecursiveLock lock(*this); if (mQueuedRTP.size() > 0) { mQueuedRTCP.push(packet); return true; } channelResource = mChannelResource; } if (!channelResource) return false; return channelResource->handlePacket(*packet); }