summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia/conf_switch.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjmedia/src/pjmedia/conf_switch.c')
-rw-r--r--pjmedia/src/pjmedia/conf_switch.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/pjmedia/src/pjmedia/conf_switch.c b/pjmedia/src/pjmedia/conf_switch.c
index 1e13e738..269405da 100644
--- a/pjmedia/src/pjmedia/conf_switch.c
+++ b/pjmedia/src/pjmedia/conf_switch.c
@@ -1086,11 +1086,14 @@ static pj_status_t write_frame(struct conf_port *cport_dst,
while (f_start < f_end) {
unsigned nsamples_to_copy, nsamples_req;
- /* Copy frame to listener's TX buffer. */
+ /* Copy frame to listener's TX buffer.
+ * Note that if the destination is port 0, just copy the whole
+ * available samples.
+ */
nsamples_to_copy = f_end - f_start;
nsamples_req = cport_dst->samples_per_frame -
(frm_dst->size>>1);
- if (nsamples_to_copy > nsamples_req)
+ if (cport_dst->slot && nsamples_to_copy > nsamples_req)
nsamples_to_copy = nsamples_req;
/* Adjust TX level. */
@@ -1123,16 +1126,19 @@ static pj_status_t write_frame(struct conf_port *cport_dst,
/* Check if it's time to deliver the TX buffer to listener,
* i.e: samples count in TX buffer equal to listener's
- * samples per frame.
+ * samples per frame. Note that for destination port 0 this
+ * function will just populate all samples in the TX buffer.
*/
- if ((frm_dst->size >> 1) == cport_dst->samples_per_frame)
+ if (cport_dst->slot == 0) {
+ /* Update TX timestamp. */
+ pj_add_timestamp32(&cport_dst->ts_tx, nsamples_to_copy);
+ } else if ((frm_dst->size >> 1) ==
+ cport_dst->samples_per_frame)
{
- if (cport_dst->slot) {
- pjmedia_port_put_frame(cport_dst->port, frm_dst);
+ pjmedia_port_put_frame(cport_dst->port, frm_dst);
- /* Reset TX buffer. */
- frm_dst->size = 0;
- }
+ /* Reset TX buffer. */
+ frm_dst->size = 0;
/* Update TX timestamp. */
pj_add_timestamp32(&cport_dst->ts_tx,