I am writing a small custom MS filter that is trying to split an input to 2 outputs.
MSFilterDesc ms_splitter_desc={
.id=MS_SPLITTER_ID,
.name="MSSplitter",
.text=N_("Split input to 2 channels"),
.category=MS_FILTER_OTHER,
.ninputs=1,
.noutputs=2,
.process=splitter_process,
.methods=splitter_methods
};
and here's my splitter_process():
static void splitter_process(MSFilter *f){
mblk_t *refm;
while((refm=ms_queue_get(f->inputs[0]))!=NULL){
ms_queue_put(f->outputs[0],refm);
ms_queue_put(f->outputs[1],refm);
}
return;
}
But it's likely to freeze the Linphone. My question is quite simple.
- Can I put "refm" into the output queue twice?
- Or do I need to make a copy of "refm" first?
- If so, which function do I need to properly duplicate the packet and sending 2 copies of it to the different output channel?