예제 #1
0
void RTPUDPTransmitter::readRTCPPendingDatagrams()
{
    while (m_rtcpsock->hasPendingDatagrams())
    {
        RTPTime curtime = RTPTime::CurrentTime();
        QHostAddress remoteAddress;
        quint16 remotePort;
        qint64 pendingDataSize = m_rtcpsock->pendingDatagramSize();
        qint64 bytesRead = m_rtcpsock->readDatagram(m_rtcpBuffer, pendingDataSize, &remoteAddress, &remotePort);
        qDebug("RTPUDPTransmitter::readRTCPPendingDatagrams: %lld bytes read from %s:%d",
                bytesRead,
                qPrintable(remoteAddress.toString()),
                remotePort);

        RTPAddress rtpAddress;
        rtpAddress.setAddress(remoteAddress);
        rtpAddress.setPort(remotePort);

        if (ShouldAcceptData(rtpAddress))
        {
            RTPRawPacket *pack = new RTPRawPacket((uint8_t *) m_rtcpBuffer, bytesRead, rtpAddress, curtime, false);

            m_rawPacketQueueLock.lock();
            m_rawPacketQueue.append(pack);
            m_rawPacketQueueLock.unlock();

            emit NewDataAvailable();
        }
    }
}
예제 #2
0
XnStatus XnDeviceStream::Write(XnStreamData* pStreamData)
{
	XnStatus nRetVal = XN_STATUS_OK;
	
	// make sure data is new
	if (pStreamData->bIsNew)
	{
		nRetVal = WriteImpl(pStreamData);
		XN_IS_STATUS_OK(nRetVal);

		NewDataAvailable(pStreamData->nTimestamp, pStreamData->nFrameID);
	}
	
	return (XN_STATUS_OK);
}
예제 #3
0
XnStatus XnSensorAudioStream::NewData()
{
	// check how many buffers we have
	XnInt32 nAvailbalePackets = m_buffer.nAudioWriteIndex - m_buffer.nAudioReadIndex;
	if (nAvailbalePackets < 0)
		nAvailbalePackets += m_buffer.nAudioBufferNumOfPackets;

	if ((XnUInt32)nAvailbalePackets * m_buffer.nAudioPacketSize >= GetReadChunkSize())
	{
		// update last write index (the last written byte)
		m_pSharedHeader->nWritePacketIndex = m_buffer.nAudioWriteIndex;
		// take first packet timestamp
		NewDataAvailable(m_buffer.pAudioPacketsTimestamps[m_buffer.nAudioReadIndex], 0);
	}

	return XN_STATUS_OK;
}
예제 #4
0
void RTPUDPTransmitter::readRTPPendingDatagrams()
{
    while (m_rtpsock->hasPendingDatagrams())
    {
        RTPTime curtime = RTPTime::CurrentTime();
        QHostAddress remoteAddress;
        quint16 remotePort;
        qint64 pendingDataSize = m_rtpsock->pendingDatagramSize();
        qint64 bytesRead = m_rtpsock->readDatagram(m_rtpBuffer, pendingDataSize, &remoteAddress, &remotePort);
        qDebug("RTPUDPTransmitter::readRTPPendingDatagrams: %lld bytes read from %s:%d",
                bytesRead,
                qPrintable(remoteAddress.toString()),
                remotePort);

        RTPAddress rtpAddress;
        rtpAddress.setAddress(remoteAddress);
        rtpAddress.setPort(remotePort);

        if (ShouldAcceptData(rtpAddress))
        {
            bool isrtp = true;

            if (m_rtpsock == m_rtcpsock) // check payload type when multiplexing
            {
                if ((std::size_t) bytesRead > sizeof(RTCPCommonHeader))
                {
                    RTCPCommonHeader *rtcpheader = (RTCPCommonHeader *) m_rtpBuffer;
                    uint8_t packettype = rtcpheader->packettype;

                    if (packettype >= 200 && packettype <= 204) {
                        isrtp = false;
                    }
                }
            }

            RTPRawPacket *pack = new RTPRawPacket((uint8_t *) m_rtpBuffer, bytesRead, rtpAddress, curtime, isrtp);

            m_rawPacketQueueLock.lock();
            m_rawPacketQueue.append(pack);
            m_rawPacketQueueLock.unlock();

            emit NewDataAvailable();
        }
    }
}
예제 #5
0
XnStatus XnSensorAudioStream::NewData()
{
	XnStatus nRetVal = XN_STATUS_OK;

	XnDevicePrivateData* pDevicePrivateData = m_Helper.GetPrivateData();

	// check how many buffers we have
	XnInt32 nAvailbalePackets = pDevicePrivateData->nAudioWriteIndex - pDevicePrivateData->nAudioReadIndex;
	if (nAvailbalePackets < 0)
		nAvailbalePackets += pDevicePrivateData->nAudioBufferNumOfPackets;

	if ((XnUInt32)nAvailbalePackets * pDevicePrivateData->nAudioPacketSize >= GetReadChunkSize())
	{
		// update last write index (the last written byte)
		m_pSharedHeader->nWritePacketIndex = pDevicePrivateData->nAudioWriteIndex;
		// take first packet timestamp
		NewDataAvailable(pDevicePrivateData->pAudioPacketsTimestamps[pDevicePrivateData->nAudioReadIndex], 0);
	}

	return XN_STATUS_OK;
}