diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 3f2751b6ba8b03eef708411b09ed0d24bd41a874..46bec0f75183fa91be8d14f30e303e2670408f35 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -39,14 +39,12 @@ void MainBuffer::setInternalSamplingRate (int sr) ost::MutexLock guard (_mutex); if (sr != _internalSamplingRate) { - // flushAllBuffers(); + _internalSamplingRate = sr; flushAllBuffers(); } - - // flushAllBuffers(); } CallIDSet* MainBuffer::getCallIDSet (CallID call_id) @@ -63,7 +61,7 @@ CallIDSet* MainBuffer::getCallIDSet (CallID call_id) bool MainBuffer::createCallIDSet (CallID set_id) { - _debug ("---- MainBuffer::createCallIDSet %s\n", set_id.c_str()); + CallIDSet* newCallIDSet = new CallIDSet; @@ -77,21 +75,18 @@ bool MainBuffer::createCallIDSet (CallID set_id) bool MainBuffer::removeCallIDSet (CallID set_id) { - _debug ("---- MainBuffer::removeCallIDSet %s\n", set_id.c_str()); - - CallIDSet* callid_set = getCallIDSet (set_id); if (callid_set != NULL) { if (_callIDMap.erase (set_id) != 0) { - _debug (" callid set %s erased!\n", set_id.c_str()); + // _debug (" callid set %s erased!\n", set_id.c_str()); return true; } else { - _debug (" error while removing callid set %s!\n", set_id.c_str()); + _debug ("removeCallIDSet error while removing callid set %s!\n", set_id.c_str()); return false; } } else { - _debug (" callid set %s does not exist!\n", set_id.c_str()); + _debug ("removeCallIDSet error callid set %s does not exist!\n", set_id.c_str()); return false; } @@ -99,7 +94,6 @@ bool MainBuffer::removeCallIDSet (CallID set_id) void MainBuffer::addCallIDtoSet (CallID set_id, CallID call_id) { - _debug ("---- MainBuffer::addCallIDtoSet %s in %s\n", set_id.c_str(), call_id.c_str()); CallIDSet* callid_set = getCallIDSet (set_id); callid_set->insert (call_id); @@ -108,18 +102,17 @@ void MainBuffer::addCallIDtoSet (CallID set_id, CallID call_id) void MainBuffer::removeCallIDfromSet (CallID set_id, CallID call_id) { - _debug ("---- MainBuffer::removeCallIDfromSet element %s from %s\n", call_id.c_str(), set_id.c_str()); CallIDSet* callid_set = getCallIDSet (set_id); if (callid_set != NULL) { if (callid_set->erase (call_id) != 0) { - _debug (" callid %s erased from set %s!\n", call_id.c_str(), set_id.c_str()); + // _debug (" callid %s erased from set %s!\n", call_id.c_str(), set_id.c_str()); } else { - _debug (" error while removing callid %s from set %s!\n", call_id.c_str(), set_id.c_str()); + _debug ("removeCallIDfromSet error while removing callid %s from set %s!\n", call_id.c_str(), set_id.c_str()); } } else { - _debug (" callid set %s does not exist!\n", set_id.c_str()); + _debug ("removeCallIDfromSet error callid set %s does not exist!\n", set_id.c_str()); } } @@ -140,8 +133,6 @@ RingBuffer* MainBuffer::getRingBuffer (CallID call_id) RingBuffer* MainBuffer::createRingBuffer (CallID call_id) { - _debug ("---- MainBuffer::createRingBuffer callid %s\n", call_id.c_str()); - RingBuffer* newRingBuffer = new RingBuffer (SIZEBUF, call_id); _ringBufferMap.insert (pair<CallID, RingBuffer*> (call_id, newRingBuffer)); @@ -152,21 +143,18 @@ RingBuffer* MainBuffer::createRingBuffer (CallID call_id) bool MainBuffer::removeRingBuffer (CallID call_id) { - - _debug ("---- MainBuffer::removeRingBuffer call_id %s\n", call_id.c_str()); - RingBuffer* ring_buffer = getRingBuffer (call_id); if (ring_buffer != NULL) { if (_ringBufferMap.erase (call_id) != 0) { - _debug (" ringbuffer %s removed!\n", call_id.c_str()); + // _debug ("removeRingBuffer ringbuffer %s removed!\n", call_id.c_str()); return true; } else { - _debug (" error while deleting ringbuffer %s!\n", call_id.c_str()); + _debug ("removeRingBuffer error while deleting ringbuffer %s!\n", call_id.c_str()); return false; } } else { - _debug (" error ringbuffer %s does not exist!\n", call_id.c_str()); + _debug ("removeRingBuffer error ringbuffer %s does not exist!\n", call_id.c_str()); return true; } } @@ -177,8 +165,6 @@ void MainBuffer::bindCallID (CallID call_id1, CallID call_id2) ost::MutexLock guard (_mutex); - _debug ("---- MainBuffer::bindCallID %s and callid %s\n", call_id1.c_str(), call_id2.c_str()); - RingBuffer* ring_buffer; CallIDSet* callid_set; @@ -210,8 +196,6 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2) ost::MutexLock guard (_mutex); - _debug ("---- MainBuffer::unBindCallID %s and callid %s\n", call_id1.c_str(), call_id2.c_str()); - removeCallIDfromSet (call_id1, call_id2); removeCallIDfromSet (call_id2, call_id1); @@ -261,7 +245,6 @@ void MainBuffer::unBindAll (CallID call_id) CallIDSet::iterator iter_set = temp_set.begin(); - _debug ("MainBuffer::unBindAll\n"); while (iter_set != temp_set.end()) { CallID call_id_in_set = *iter_set; @@ -369,12 +352,10 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID int MainBuffer::getDataByID (void *buffer, int toCopy, unsigned short volume, CallID call_id, CallID reader_id) { - // _debug("MainBuffer::getDataByID in buffer %s by %s \n", call_id.c_str(), reader_id.c_str()); - RingBuffer* ring_buffer = getRingBuffer (call_id); if (ring_buffer == NULL) { - // _debug("Output RingBuffer ID: \"%s\" does not exist!\n", call_id.c_str()); + return 0; } @@ -402,7 +383,6 @@ int MainBuffer::availForGet (CallID call_id) if (callid_set->size() == 1) { CallIDSet::iterator iter_id = callid_set->begin(); - // _debug("MainBuffer::availForGet availForGetByID(%s,%s)\n", (*iter_id).c_str(), call_id.c_str()); if ( (call_id != default_id) && (*iter_id == call_id)) { _debug ("This problem should not occur since we have %i element\n", (int) callid_set->size()); @@ -434,7 +414,7 @@ int MainBuffer::availForGetByID (CallID call_id, CallID reader_id) if ( (call_id != default_id) && (reader_id == call_id)) { _debug ("**********************************************************************\n"); - _debug ("Error an RTP session ring buffer is not supposed to have a readpointer on tiself\n"); + _debug ("Error an RTP session ring buffer is not supposed to have a readpointer on itself\n"); } RingBuffer* ringbuffer = getRingBuffer (call_id); @@ -466,11 +446,11 @@ int MainBuffer::discard (int toDiscard, CallID call_id) if (callid_set->size() == 1) { + CallIDSet::iterator iter_id = callid_set->begin(); - // _debug("Discard Data in \"%s\" RingBuffer for \"%s\" ReaderPointer\n",(*iter_id).c_str(),call_id.c_str()); return discardByID (toDiscard, *iter_id, call_id); } else { - // _debug("CallIDSet with ID: \"%s\" is a conference!\n", call_id.c_str()); + CallIDSet::iterator iter_id; for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) { @@ -501,8 +481,6 @@ void MainBuffer::flush (CallID call_id) { ost::MutexLock guard (_mutex); - // _debug("MainBuffer::flush\n"); - CallIDSet* callid_set = getCallIDSet (call_id); if (callid_set == NULL) @@ -516,7 +494,7 @@ void MainBuffer::flush (CallID call_id) CallIDSet::iterator iter_id = callid_set->begin(); flushByID (*iter_id, call_id); } else { - // _debug("CallIDSet with ID: \"%s\" is a conference!\n", call_id.c_str()); + CallIDSet::iterator iter_id; for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) { @@ -548,12 +526,10 @@ void MainBuffer::flushByID (CallID call_id, CallID reader_id) void MainBuffer::flushAllBuffers() { - // _debug("-------------------------- flushAllBuffers()\n"); RingBufferMap::iterator iter_buffer = _ringBufferMap.begin(); while (iter_buffer != _ringBufferMap.end()) { - // _debug("-------------------------- flushing: %s\n",iter_buffer->second->getBufferId().c_str()); iter_buffer->second->flushAll(); @@ -566,27 +542,67 @@ void MainBuffer::stateInfo() { _debug ("MainBuffer state info\n"); - CallIDMap::iterator iter_map = _callIDMap.begin(); + CallIDMap::iterator iter_call = _callIDMap.begin(); + + // print each call and bound call ids + while(iter_call != _callIDMap.end()) { + + std::string dbg_str(" Call: "); + dbg_str.append(std::string(iter_call->first.c_str())); + dbg_str.append(std::string(" is bound to: ")); + + CallIDSet* call_id_set = (CallIDSet*)iter_call->second; - while (iter_map != _callIDMap.end()) { - CallIDSet* id_set = getCallIDSet (iter_map->first); + CallIDSet::iterator iter_call_id = call_id_set->begin(); + + while (iter_call_id != call_id_set->end()) { + + dbg_str.append (std::string (*iter_call_id)); + dbg_str.append (std::string (", ")); + + iter_call_id++; + } + + _debug ("%s\n", dbg_str.c_str()); + + iter_call++; + } + + // Print ringbuffers ids and readpointers + RingBufferMap::iterator iter_buffer = _ringBufferMap.begin(); + + while (iter_buffer != _ringBufferMap.end()) { + + RingBuffer* rbuffer = (RingBuffer*)iter_buffer->second; + ReadPointer* rpointer = NULL; std::string dbg_str (" Buffer: "); - dbg_str.append (string (iter_map->first.c_str())); - dbg_str.append (string (" bound to ")); + dbg_str.append (std::string (iter_buffer->first.c_str())); + dbg_str.append (std::string (" as read pointer: ")); + + if(rbuffer) + rpointer = rbuffer->getReadPointerList(); + + if(rpointer) { - if (id_set != NULL) { - CallIDSet::iterator iter_set = id_set->begin(); + ReadPointer::iterator iter_pointer = rpointer->begin(); + + while(iter_pointer != rpointer->end()) { - while (iter_set != id_set->end()) { - dbg_str.append (string (iter_set->c_str())); + dbg_str.append (string (iter_pointer->first.c_str())); dbg_str.append (string (", ")); - } - } - _debug ("%s\n", dbg_str.c_str()); + iter_pointer++; + } + } - iter_map++; + _debug ("%s\n", dbg_str.c_str()); + + iter_buffer++; } + + + + } diff --git a/sflphone-common/src/audio/ringbuffer.cpp b/sflphone-common/src/audio/ringbuffer.cpp index 0eb146f397cb03b7d377aa39b2122466ff18cb6c..22bfd5316831d9052ff92640bc84dc1a6a463abd 100644 --- a/sflphone-common/src/audio/ringbuffer.cpp +++ b/sflphone-common/src/audio/ringbuffer.cpp @@ -54,7 +54,6 @@ RingBuffer::~RingBuffer() void RingBuffer::flush (CallID call_id) { - _debug ("flush: reinit \"%s\" readpointer in \"%s\" ringbuffer\n", call_id.c_str(), buffer_id.c_str()); storeReadPointer (mEnd, call_id); } @@ -62,14 +61,11 @@ RingBuffer::flush (CallID call_id) void RingBuffer::flushAll () { - // _debug("flushall: reinit all readpointer in \"%s\" ringbuffer\n", buffer_id.c_str()); - - // _debug("------------------------------ flushAll() in \"%s\" ringbuffer\n", buffer_id.c_str()); ReadPointer::iterator iter_pointer = _readpointer.begin(); while (iter_pointer != _readpointer.end()) { - // _debug("------------------------------ reinit readpointer %s\n", iter_pointer->first.c_str()); + iter_pointer->second = mEnd; iter_pointer++; @@ -89,8 +85,6 @@ RingBuffer::putLen() int length = (mEnd + mBufferSize - mStart) % mBufferSize; - // _debug("RingBuffer::putLen length %i\n", length); - // _debug(" *RingBuffer::putLen: buffer_id %s, mStart %i, mEnd %i, length %i, buffersie %i\n", buffer_id.c_str(), mStart, mEnd, length, mBufferSize); return length; } @@ -121,19 +115,9 @@ RingBuffer::getReadPointer (CallID call_id) if (getNbReadPointer() == 0) return 0; - // _debug("RingBuffer::getReadPointer() id %s\n", call_id.c_str()); - ReadPointer::iterator iter = _readpointer.find (call_id); if (iter == _readpointer.end()) { - // _debug(" RingBuffer::getReadPointer Error read pointer size: %i\n", _readpointer.size()); - // _debug(" RingBuffer::getReadPointer Error read pointer \"%s\" is null\n", call_id.c_str()); - ReadPointer::iterator iter2; - - for (iter2 = _readpointer.begin(); iter2 != _readpointer.end(); iter2++) { - // x_debug(" RingBuffer::getReadPointer list avail pointer \"%s\"\n", iter2->first.c_str()); - } - return 0; } else { return iter->second; @@ -169,7 +153,6 @@ RingBuffer::storeReadPointer (int pointer_value, CallID call_id) if (iter != _readpointer.end()) { iter->second = pointer_value; - // _debug("store read pointer call_id %s, size: %i \n",call_id.c_str(), _readpointer.size()); } else { _debug ("storeReadPointer: Cannot find \"%s\" readPointer in \"%s\" ringbuffer\n", call_id.c_str(), buffer_id.c_str()); } @@ -181,10 +164,7 @@ void RingBuffer::createReadPointer (CallID call_id) { - _debug ("---- createReadPointer ringbuffer_id %s, call_id %s\n", buffer_id.c_str(), call_id.c_str()); - _readpointer.insert (pair<CallID, int> (call_id, mEnd)); - _debug ("---- createReadPointer ringbuffer_id %s, size %i\n", buffer_id.c_str(), (int) _readpointer.size()); } @@ -193,10 +173,7 @@ void RingBuffer::removeReadPointer (CallID call_id) { - _debug ("---- removeReadPointer ringbuffer_id %s, call_id %s\n", buffer_id.c_str(), call_id.c_str()); - _readpointer.erase (call_id); - _debug ("---- removeReadPointer ringbuffer_id %s, size %i\n", buffer_id.c_str(), (int) _readpointer.size()); } @@ -227,8 +204,6 @@ int RingBuffer::AvailForPut() { // Always keep 4 bytes safe (?) - // z_debug("RingBuffer::AvailForPut: putLen %i\n", putLen()); - // _debug("RingBuffer::AvailForPut %s --------------------\n", buffer_id.c_str()); return (mBufferSize-4) - putLen(); } @@ -241,9 +216,8 @@ RingBuffer::Put (void* buffer, int toCopy, unsigned short volume) int block; int copied; int pos; - // _debug("RingBuffer::Put buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); + int len = putLen(); - // _debug(" RingBuffer::Put bufferid %s, putlen %i\n", buffer_id.c_str(), len); if (toCopy > (mBufferSize-4) - len) toCopy = (mBufferSize-4) - len; @@ -302,7 +276,6 @@ int RingBuffer::AvailForGet (CallID call_id) { // Used space - // _debug("RingBuffer::AvailForGet buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); return getLen (call_id); } @@ -323,11 +296,8 @@ RingBuffer::Get (void *buffer, int toCopy, unsigned short volume, CallID call_id int copied; - // _debug("RingBuffer::Get buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); int len = getLen (call_id); - // _debug(" RingBuffer::Get bufferid %s, getlen %i\n", buffer_id.c_str(), len); - if (toCopy > len) toCopy = len; @@ -375,7 +345,7 @@ RingBuffer::Get (void *buffer, int toCopy, unsigned short volume, CallID call_id int RingBuffer::Discard (int toDiscard, CallID call_id) { - // _debug("RingBuffer::Discard buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); + int len = getLen (call_id); int mStart = getReadPointer (call_id); diff --git a/sflphone-common/src/audio/ringbuffer.h b/sflphone-common/src/audio/ringbuffer.h index ac559e98c1db50c4571d33f8ea97e5c508e03125..96871f825db937f91a9cb1a3c6e1ed44f9d4a8cf 100644 --- a/sflphone-common/src/audio/ringbuffer.h +++ b/sflphone-common/src/audio/ringbuffer.h @@ -57,9 +57,10 @@ class RingBuffer { void flushAll(); - int getReadPointer(CallID call_id = default_id); + ReadPointer* getReadPointerList() { return &_readpointer; } + int getSmallestReadPointer(); void storeReadPointer(int pointer_value, CallID call_id = default_id); diff --git a/sflphone-common/src/conference.cpp b/sflphone-common/src/conference.cpp index 6266a30323c8d47f695e03eccd57c774634290cd..4149e29caf1b0c7a4e16e1e7e71f3ae89edf4072 100644 --- a/sflphone-common/src/conference.cpp +++ b/sflphone-common/src/conference.cpp @@ -71,7 +71,7 @@ void Conference::setState (ConferenceState state) void Conference::add (CallID participant_id) { - _debug ("---- Conference:: add participant %s\n", participant_id.c_str()); + _debug ("Conference:: add participant %s\n", participant_id.c_str()); _participants.insert (participant_id); @@ -82,7 +82,7 @@ void Conference::add (CallID participant_id) void Conference::remove (CallID participant_id) { - _debug ("---- Conference::remove participant %s\n", participant_id.c_str()); + _debug ("Conference::remove participant %s\n", participant_id.c_str()); _participants.erase (participant_id); @@ -100,7 +100,7 @@ void Conference::bindParticipant (CallID participant_id) if (participant_id != (*iter)) { - _debug ("---- Conference:: bind callid %s with %s in conference add\n", participant_id.c_str(), (*iter).c_str()); + // _debug ("---- Conference:: bind callid %s with %s in conference add\n", participant_id.c_str(), (*iter).c_str()); Manager::instance().getAudioDriver()->getMainBuffer()->bindCallID (participant_id, *iter); } @@ -109,7 +109,7 @@ void Conference::bindParticipant (CallID participant_id) } - _debug ("---- Conference::bind callid %s with default_id in conference add\n", participant_id.c_str()); + // _debug ("---- Conference::bind callid %s with default_id in conference add\n", participant_id.c_str()); Manager::instance().getAudioDriver()->getMainBuffer()->bindCallID (participant_id); diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 464c079ba679ef0cbb61d1a17be5ceecf38a424d..c2ab35751955e09a4ad13ce82c39ad4d056a75ce 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1246,6 +1246,9 @@ ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2) // switchCall(conf->getConfID()); + if(_audiodriver) + _audiodriver->getMainBuffer()->stateInfo(); + } @@ -1346,6 +1349,9 @@ ManagerImpl::removeParticipant (const CallID& call_id) } + if(_audiodriver) + _audiodriver->getMainBuffer()->stateInfo(); + } @@ -1459,7 +1465,7 @@ ManagerImpl::addStream (const CallID& call_id) if (iter != _conferencemap.end()) { Conference* conf = iter->second; - _debug (" addStream: bind call %s to conference %s\n", call_id.c_str(), conf->getConfID().c_str()); + // _debug (" addStream: bind call %s to conference %s\n", call_id.c_str(), conf->getConfID().c_str()); conf->bindParticipant (call_id); @@ -1481,7 +1487,7 @@ ManagerImpl::addStream (const CallID& call_id) } else { - _debug (" addStream: bind call %s to main\n", call_id.c_str()); + // _debug (" addStream: bind call %s to main\n", call_id.c_str()); // bind to main getAudioDriver()->getMainBuffer()->bindCallID (call_id); @@ -1491,6 +1497,9 @@ ManagerImpl::addStream (const CallID& call_id) _audiodriver->flushMain(); } + + if(_audiodriver) + _audiodriver->getMainBuffer()->stateInfo(); } void @@ -1504,6 +1513,8 @@ ManagerImpl::removeStream (const CallID& call_id) removeParticipant (call_id); } + if(_audiodriver) + _audiodriver->getMainBuffer()->stateInfo(); } //THREAD=Main