void ms_speex_dec_process(MSSpeexDec *obj) { MSFifo *outf=obj->outf[0]; MSQueue *inq=obj->inq[0]; gint16 *output; gint gran=obj->frame_size*2; gint i; MSMessage *m; g_return_if_fail(inq!=NULL); g_return_if_fail(outf!=NULL); m=ms_queue_get(inq); g_return_if_fail(m!=NULL); speex_bits_reset(&obj->bits); ms_fifo_get_write_ptr(outf,gran,(void**)&output); g_return_if_fail(output!=NULL); if (m->data!=NULL){ speex_bits_read_from(&obj->bits,m->data,m->size); /* decode */ speex_decode_int(obj->speex_state,&obj->bits,(short*)output); }else{ /* we have a missing packet */ speex_decode_int(obj->speex_state,NULL,(short*)output); } ms_message_destroy(m); }
void ms_rtp_send_process(MSRtpSend *r) { MSFifo *fi; MSQueue *qi; MSSync *sync= r->sync; int gran=ms_sync_get_samples_per_tick(sync); guint32 ts; void *s; guint skip; guint32 synctime=sync->time; g_return_if_fail(gran>0); if (r->rtpsession==NULL) return; ms_filter_lock(MS_FILTER(r)); skip=r->delay!=0; if (skip) r->delay--; /* process output fifo and output queue*/ fi=r->f_inputs[0]; if (fi!=NULL) { ts=get_new_timestamp(r,synctime); /* try to read r->packet_size bytes and send them in a rtp packet*/ ms_fifo_get_read_ptr(fi,r->packet_size,&s); if (!skip){ rtp_session_send_with_ts(r->rtpsession,s,r->packet_size,ts); ms_trace("len=%i, ts=%i ",r->packet_size,ts); } } qi=r->q_inputs[0]; if (qi!=NULL) { MSMessage *msg; /* read a MSMessage and send it through the network*/ while ( (msg=ms_queue_get(qi))!=NULL){ ts=get_new_timestamp(r,synctime); if (!skip) { /*g_message("Sending packet with ts=%u",ts);*/ rtp_session_send_with_ts(r->rtpsession,msg->data,msg->size,ts); } ms_message_destroy(msg); } } ms_filter_unlock(MS_FILTER(r)); }
void ms_qdispatcher_process(MSQdispatcher *obj) { gint i; MSQueue *inq=obj->q_inputs[0]; if (inq!=NULL){ MSQueue *outq; MSMessage *m1,*m2; while ( (m1=ms_queue_get(inq))!=NULL){ /* dispatch incoming messages to output queues */ for (i=0;i<MS_QDISPATCHER_MAX_OUTPUTS;i++){ outq=obj->q_outputs[i]; if (outq!=NULL){ m2=ms_message_dup(m1); ms_queue_put(outq,m2); } } ms_message_destroy(m1); } } }