bool CTimeServerThread::lookup(const wxString &id) { CIndexRecord* info = m_index[id]; if (info == NULL) { // wxLogError(wxT("Cannot find the AMBE index for *%s*"), id.c_str()); return false; } unsigned int start = info->getStart(); unsigned int length = info->getLength(); SLOW_DATA slowData = SD_TEXT; for (unsigned int i = 0U; i < length; i++) { unsigned char* dataIn = m_ambe + (start + i) * VOICE_FRAME_LENGTH_BYTES; CAMBEData* dataOut = new CAMBEData; dataOut->setDestination(m_address, G2_DV_PORT); dataOut->setSeq(m_seqNo); unsigned char buffer[DV_FRAME_LENGTH_BYTES]; ::memcpy(buffer + 0U, dataIn, VOICE_FRAME_LENGTH_BYTES); // Insert sync bytes when the sequence number is zero, slow data otherwise if (m_seqNo == 0U) { ::memcpy(buffer + VOICE_FRAME_LENGTH_BYTES, DATA_SYNC_BYTES, DATA_FRAME_LENGTH_BYTES); m_encoder.sync(); switch (slowData) { case SD_HEADER: slowData = SD_TEXT; break; case SD_TEXT: slowData = SD_HEADER; break; } } else { switch (slowData) { case SD_HEADER: m_encoder.getHeaderData(buffer + VOICE_FRAME_LENGTH_BYTES); break; case SD_TEXT: m_encoder.getTextData(buffer + VOICE_FRAME_LENGTH_BYTES); break; } } dataOut->setData(buffer, DV_FRAME_LENGTH_BYTES); m_seqNo++; if (m_seqNo == 21U) m_seqNo = 0U; m_data[m_in] = dataOut; m_in++; } return true; }
bool CDExtraGatewayAudioUnit::lookup(const wxString &id) { CIndexRecord* info = m_index[id]; if (info == NULL) { // wxLogError(wxT("Cannot find the AMBE index for *%s*"), id.c_str()); return false; } unsigned int start = info->getStart(); unsigned int length = info->getLength(); for (unsigned int i = 0U; i < length; i++) { unsigned char* dataIn = m_ambe + (start + i) * VOICE_FRAME_LENGTH_BYTES; CDExtraGatewayAMBEData* dataOut = new CDExtraGatewayAMBEData; dataOut->setSeq(m_seqNo); dataOut->setId(m_id); unsigned char buffer[DV_FRAME_LENGTH_BYTES]; ::memcpy(buffer + 0U, dataIn, VOICE_FRAME_LENGTH_BYTES); // Insert sync bytes when the sequence number is zero, slow data otherwise if (m_seqNo == 0U) { ::memcpy(buffer + VOICE_FRAME_LENGTH_BYTES, DATA_SYNC_BYTES, DATA_FRAME_LENGTH_BYTES); m_encoder.sync(); } else { m_encoder.getTextData(buffer + VOICE_FRAME_LENGTH_BYTES); } dataOut->setData(buffer, DV_FRAME_LENGTH_BYTES); m_seqNo++; if (m_seqNo == 21U) m_seqNo = 0U; m_data[m_in] = dataOut; m_in++; } return true; }