[Opalvoip-svn] SF.net SVN: opalvoip:[34643] opal/trunk
Brought to you by:
csoutheren,
rjongbloed
From: <rjo...@us...> - 2016-02-24 15:31:12
|
Revision: 34643 http://sourceforge.net/p/opalvoip/code/34643 Author: rjongbloed Date: 2016-02-24 15:31:10 +0000 (Wed, 24 Feb 2016) Log Message: ----------- Fixed skinny extra channel simulation, part 2. Modified Paths: -------------- opal/trunk/include/ep/skinnyep.h opal/trunk/src/ep/skinnyep.cxx Modified: opal/trunk/include/ep/skinnyep.h =================================================================== --- opal/trunk/include/ep/skinnyep.h 2016-02-24 15:02:09 UTC (rev 34642) +++ opal/trunk/include/ep/skinnyep.h 2016-02-24 15:31:10 UTC (rev 34643) @@ -786,7 +786,7 @@ mutable unsigned m_sessionId; }; void OpenMediaChannel(const MediaInfo & info); - void OpenSimulatedMediaChannel(unsigned sessionId, const OpalMediaFormat & mediaFormat); + void OpenSimulatedMediaChannel(const MediaInfo & info, const OpalMediaFormat & mediaFormat); void DelayCloseMediaStream(OpalMediaStreamPtr mediaStream); OpalSkinnyEndPoint & m_endpoint; Modified: opal/trunk/src/ep/skinnyep.cxx =================================================================== --- opal/trunk/src/ep/skinnyep.cxx 2016-02-24 15:02:09 UTC (rev 34642) +++ opal/trunk/src/ep/skinnyep.cxx 2016-02-24 15:31:10 UTC (rev 34643) @@ -1229,20 +1229,17 @@ return; } - if (!info.m_receiver) - mediaSession->SetRemoteAddress(info.m_mediaAddress); - bool canSimulate = !info.m_receiver && !m_endpoint.GetSimulatedAudioFile().IsEmpty() && mediaType == OpalMediaType::Audio(); if (canSimulate && info.m_sessionId > 1 && m_endpoint.IsSecondaryAudioAlwaysSimulated()) { - OpenSimulatedMediaChannel(info.m_sessionId, mediaFormat); + OpenSimulatedMediaChannel(info, mediaFormat); return; } if (!ownerCall.OpenSourceMediaStreams(*con, mediaType, info.m_sessionId, mediaFormat)) { PTRACE(2, "Could not open " << (info.m_receiver ? 'r' : 't') << "x " << mediaType << " stream, session=" << info.m_sessionId); if (canSimulate) - OpenSimulatedMediaChannel(info.m_sessionId, mediaFormat); + OpenSimulatedMediaChannel(info, mediaFormat); return; } @@ -1258,32 +1255,40 @@ ack.m_port = ap.GetPort(); m_phoneDevice.SendSkinnyMsg(ack); } + else + mediaSession->SetRemoteAddress(info.m_mediaAddress); StartMediaStreams(); } -void OpalSkinnyConnection::OpenSimulatedMediaChannel(unsigned sessionId, const OpalMediaFormat & mediaFormat) +void OpalSkinnyConnection::OpenSimulatedMediaChannel(const MediaInfo & info, const OpalMediaFormat & mediaFormat) { - m_simulatedTransmitters.insert(sessionId); + m_simulatedTransmitters.insert(info.m_sessionId); - OpalMediaSession * mediaSession = GetMediaSession(sessionId); + OpalMediaSession * mediaSession = GetMediaSession(info.m_sessionId); if (mediaSession == NULL) { - PTRACE(2, "No session " << sessionId << " for " << mediaFormat << " to simulate"); + PTRACE(2, "No session " << info.m_sessionId << " for " << mediaFormat << " to simulate"); return; } - // If dummy session, replace with real RTP session - if (dynamic_cast<OpalRTPSession *>(mediaSession) == NULL) - ReplaceMediaSession(sessionId, new OpalRTPSession(OpalMediaSession::Init(*this, sessionId, mediaFormat.GetMediaType(), false))); + if (dynamic_cast<OpalRTPSession *>(mediaSession) == NULL) { + mediaSession = new OpalRTPSession(OpalMediaSession::Init(*this, info.m_sessionId, mediaFormat.GetMediaType(), false)); + if (!mediaSession->Open(m_phoneDevice.m_transport.GetInterface(), info.m_mediaAddress)) { + PTRACE(2, "Could not open RTP session " << info.m_sessionId << " for " << mediaFormat << " using " << info.m_mediaAddress); + delete mediaSession; + return; + } + mediaSession->SetRemoteAddress(info.m_mediaAddress); + m_sessions.SetAt(info.m_sessionId, mediaSession); + } - // Open the RTP stream - OpalMediaStreamPtr sinkStream = OpenMediaStream(mediaFormat, sessionId, false); + OpalMediaStreamPtr sinkStream = OpenMediaStream(mediaFormat, info.m_sessionId, false); if (sinkStream == NULL) return; +#if OPAL_PTLIB_WAVFILE std::auto_ptr<OpalMediaStream> sourceStream; -#if OPAL_PTLIB_WAVFILE { std::auto_ptr<OpalWAVFile> wavFile(new OpalWAVFile(m_endpoint.GetSimulatedAudioFile(), PFile::ReadOnly, @@ -1291,40 +1296,40 @@ PWAVFile::fmt_PCM, false)); if (!wavFile->IsOpen()) { - PTRACE(3, "Could not simulate transmit " << mediaFormat << " stream, session=" << sessionId + PTRACE(3, "Could not simulate transmit " << mediaFormat << " stream, session=" << info.m_sessionId << ", file=" << m_endpoint.GetSimulatedAudioFile() << ": " << wavFile->GetErrorText()); return; } if (wavFile->GetFormatString() == mediaFormat) - sourceStream.reset(new OpalFileMediaStream(*this, mediaFormat, sessionId, true, wavFile.release())); + sourceStream.reset(new OpalFileMediaStream(*this, mediaFormat, info.m_sessionId, true, wavFile.release())); else { if (!wavFile->SetAutoconvert()) { - PTRACE(3, "Could not simulate transmit " << mediaFormat << " stream, session=" << sessionId + PTRACE(3, "Could not simulate transmit " << mediaFormat << " stream, session=" << info.m_sessionId << ", file=" << m_endpoint.GetSimulatedAudioFile() << ": unsupported codec"); return; } - sourceStream.reset(new OpalFileMediaStream(*this, OpalPCM16, sessionId, true, wavFile.release())); + sourceStream.reset(new OpalFileMediaStream(*this, OpalPCM16, info.m_sessionId, true, wavFile.release())); } } #else - sourceStream.reset(new OpalNullMediaStream(*this, OpalPCM16, sessionId, true, true, true)); + sourceStream.reset(new OpalNullMediaStream(*this, OpalPCM16, info.m_sessionId, true, true)); #endif if (!sourceStream->Open()) { - PTRACE(2, "Could not open stream for simulated transmit " << mediaFormat << " stream, session=" << sessionId); + PTRACE(2, "Could not open stream for simulated transmit " << mediaFormat << " stream, session=" << info.m_sessionId); return; } OpalMediaPatchPtr patch = m_endpoint.GetManager().CreateMediaPatch(*sourceStream, true); if (patch == NULL || !patch->AddSink(sinkStream)) { - PTRACE(2, "Could not create patch for simulated transmit " << mediaFormat << " stream, session=" << sessionId); + PTRACE(2, "Could not create patch for simulated transmit " << mediaFormat << " stream, session=" << info.m_sessionId); return; } mediaStreams.Append(sourceStream.release()); - PTRACE(3, "Simulating transmit " << mediaFormat << " stream, session=" << sessionId << ", file=" << m_endpoint.GetSimulatedAudioFile()); + PTRACE(3, "Simulating transmit " << mediaFormat << " stream, session=" << info.m_sessionId << ", file=" << m_endpoint.GetSimulatedAudioFile()); StartMediaStreams(); } @@ -1387,8 +1392,12 @@ return; unsigned sessionId = stream.GetSessionID(); - if (m_simulatedTransmitters.find(sessionId) == m_simulatedTransmitters.end()) - OpenSimulatedMediaChannel(sessionId, stream.GetMediaFormat()); + if (m_simulatedTransmitters.find(sessionId) == m_simulatedTransmitters.end()) { + for (std::set<MediaInfo>::iterator it = m_passThruMedia.begin(); it != m_passThruMedia.end(); ++it) { + if (!it->m_receiver && it->m_sessionId == sessionId) + OpenSimulatedMediaChannel(*it, stream.GetMediaFormat()); + } + } else { PTRACE(4, "Session " << sessionId << " had already tried simulation, not trying again."); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |