Skip to content
Snippets Groups Projects
Commit bf312a82 authored by Alexandre Savard's avatar Alexandre Savard
Browse files

[#2165] Fix undind half duplex audio streams in mainbuffer

parent 8735167e
No related branches found
No related tags found
No related merge requests found
...@@ -473,8 +473,6 @@ void AudioRecord::recData (SFLDataFormat* buffer, int nSamples) ...@@ -473,8 +473,6 @@ void AudioRecord::recData (SFLDataFormat* buffer, int nSamples)
if (recordingEnabled_) { if (recordingEnabled_) {
_debug("Recording enabled");
if (fp == 0) { if (fp == 0) {
_debug ("AudioRecord: Can't record data, a file has not yet been opened!"); _debug ("AudioRecord: Can't record data, a file has not yet been opened!");
return; return;
...@@ -488,7 +486,6 @@ void AudioRecord::recData (SFLDataFormat* buffer, int nSamples) ...@@ -488,7 +486,6 @@ void AudioRecord::recData (SFLDataFormat* buffer, int nSamples)
else { else {
fflush (fp); fflush (fp);
byteCounter_ += (unsigned long) (nSamples*sizeof (SFLDataFormat)); byteCounter_ += (unsigned long) (nSamples*sizeof (SFLDataFormat));
_debug("AudioRecord: wrote %d bytes", byteCounter_);
} }
} }
} }
......
...@@ -31,11 +31,24 @@ ...@@ -31,11 +31,24 @@
#include "audiorecorder.h" #include "audiorecorder.h"
#include "mainbuffer.h" #include "mainbuffer.h"
AudioRecorder::AudioRecorder (AudioRecord *arec, MainBuffer *mb) int AudioRecorder::count = 0;
: Thread(), recorderId("recorder_id")
AudioRecorder::AudioRecorder (AudioRecord *arec, MainBuffer *mb) : Thread()
{ {
setCancel (cancelDeferred); setCancel (cancelDeferred);
++count;
std::string id("processid_");
// convert count into string
std::string s;
std::stringstream out;
out << count;
s = out.str();
recorderId = id.append(s);
arecord = arec; arecord = arec;
mbuffer = mb; mbuffer = mb;
} }
...@@ -55,18 +68,12 @@ void AudioRecorder::run (void) ...@@ -55,18 +68,12 @@ void AudioRecorder::run (void)
int availBytes = mbuffer->availForGet(recorderId); int availBytes = mbuffer->availForGet(recorderId);
_debug("Audiorecord: avail for get (before) %d", availBytes);
if(availBytes > 0) { if(availBytes > 0) {
int got = mbuffer->getData(buffer, availBytes, 100, recorderId); int got = mbuffer->getData(buffer, availBytes, 100, recorderId);
_debug("Audiorecord: audio get from main buffer %d", got);
int availBytesAfter = mbuffer->availForGet(recorderId); int availBytesAfter = mbuffer->availForGet(recorderId);
_debug("Audiorecord: avail for get (after) %d", availBytesAfter);
arecord->recData(buffer, availBytes/sizeof(SFLDataFormat)); arecord->recData(buffer, availBytes/sizeof(SFLDataFormat));
} }
......
...@@ -44,6 +44,8 @@ class AudioRecorder : public ost::Thread { ...@@ -44,6 +44,8 @@ class AudioRecorder : public ost::Thread {
~AudioRecorder(void){ terminate(); } ~AudioRecorder(void){ terminate(); }
static int count;
std::string getRecorderID() { return recorderId; } std::string getRecorderID() { return recorderId; }
virtual void run(); virtual void run();
......
...@@ -255,23 +255,33 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2) ...@@ -255,23 +255,33 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2)
} }
} }
void MainBuffer::unBindHalfDuplexOut(CallID call_id, CallID process_id) void MainBuffer::unBindHalfDuplexOut(CallID process_id, CallID call_id)
{ {
removeCallIDfromSet(process_id, call_id); removeCallIDfromSet(process_id, call_id);
RingBuffer* ringbuffer; RingBuffer* ringbuffer = getRingBuffer(call_id);
ringbuffer = getRingBuffer(process_id);
if(ringbuffer) { if(ringbuffer) {
ringbuffer->removeReadPointer(call_id); ringbuffer->removeReadPointer(process_id);
if(ringbuffer->getNbReadPointer() == 0) { if(ringbuffer->getNbReadPointer() == 0) {
removeCallIDSet(call_id);
removeRingBuffer(call_id);
}
}
else {
_debug("Error: did not found ringbuffer %s", process_id.c_str());
removeCallIDSet(process_id); removeCallIDSet(process_id);
removeRingBuffer(process_id);
} }
CallIDSet* callid_set = getCallIDSet(process_id);
if(callid_set) {
if(callid_set->empty())
removeCallIDSet(process_id);
} }
} }
...@@ -387,9 +397,7 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID ...@@ -387,9 +397,7 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID
return 0; return 0;
} else { } else {
for (int k = 0; k < nbSmplToCopy; k++) { memset(buffer, 0, nbSmplToCopy*sizeof(SFLDataFormat*));
( (SFLDataFormat*) (buffer)) [k] = 0;
}
int size = 0; int size = 0;
......
...@@ -162,10 +162,12 @@ ParticipantSet Conference::getParticipantList() ...@@ -162,10 +162,12 @@ ParticipantSet Conference::getParticipantList()
bool Conference::setRecording() { bool Conference::setRecording() {
bool recordStatus = Recordable::recAudio.setRecording(); bool recordStatus = Recordable::recAudio.isRecording();
if(!recordStatus) Recordable::recAudio.setRecording();
return false;
// start recording
if(!recordStatus){
MainBuffer *mbuffer = Manager::instance().getMainBuffer(); MainBuffer *mbuffer = Manager::instance().getMainBuffer();
...@@ -180,6 +182,26 @@ bool Conference::setRecording() { ...@@ -180,6 +182,26 @@ bool Conference::setRecording() {
mbuffer->bindHalfDuplexOut(process_id); mbuffer->bindHalfDuplexOut(process_id);
}
// stop recording
else {
MainBuffer *mbuffer = Manager::instance().getMainBuffer();
ParticipantSet::iterator iter = _participants.begin();
CallID process_id = Recordable::recorder.getRecorderID();
while(iter != _participants.end()) {
mbuffer->unBindHalfDuplexOut(process_id, *iter);
iter++;
}
mbuffer->unBindHalfDuplexOut(process_id);
}
Recordable::recorder.start(); Recordable::recorder.start();
return recordStatus; return recordStatus;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment