Browse Source

MT#55283 convert codec_timer to int64_t

Change-Id: I9c9153345b915132cfabce98f4a0db6e08b66a68
pull/1938/head
Richard Fuchs 8 months ago
parent
commit
93d6f0a3b4
1 changed files with 25 additions and 25 deletions
  1. +25
    -25
      daemon/codec.c

+ 25
- 25
daemon/codec.c View File

@ -28,7 +28,7 @@
struct codec_timer { struct codec_timer {
struct timerthread_obj tt_obj; struct timerthread_obj tt_obj;
struct timeval next;
int64_t next;
void (*timer_func)(struct codec_timer *); void (*timer_func)(struct codec_timer *);
}; };
struct mqtt_timer { struct mqtt_timer {
@ -1284,12 +1284,12 @@ static void __codec_rtcp_timer_schedule(struct call_media *media) {
rt->ct.tt_obj.tt = &codec_timers_thread; rt->ct.tt_obj.tt = &codec_timers_thread;
rt->call = obj_get(media->call); rt->call = obj_get(media->call);
rt->media = media; rt->media = media;
rt->ct.next = timeval_from_us(rtpe_now);
rt->ct.next = rtpe_now;
rt->ct.timer_func = __rtcp_timer_run; rt->ct.timer_func = __rtcp_timer_run;
} }
rt->ct.next = timeval_add_usec(rt->ct.next, rtpe_config.rtcp_interval * 1000 + (ssl_random() % 1000000));
timerthread_obj_schedule_abs(&rt->ct.tt_obj, rt->ct.next);
rt->ct.next += rtpe_config.rtcp_interval * 1000 + (ssl_random() % 1000000); // XXX scale to micro
timerthread_obj_schedule_abs(&rt->ct.tt_obj, timeval_from_us(rt->ct.next));
} }
// no lock held // no lock held
static void __rtcp_timer_run(struct codec_timer *ct) { static void __rtcp_timer_run(struct codec_timer *ct) {
@ -1978,8 +1978,8 @@ static void __mqtt_timer_run_summary(struct codec_timer *ct) {
mqtt_timer_run_summary(); mqtt_timer_run_summary();
} }
static void __codec_mqtt_timer_schedule(struct mqtt_timer *mqt) { static void __codec_mqtt_timer_schedule(struct mqtt_timer *mqt) {
mqt->ct.next = timeval_add_usec(mqt->ct.next, rtpe_config.mqtt_publish_interval * 1000);
timerthread_obj_schedule_abs(&mqt->ct.tt_obj, mqt->ct.next);
mqt->ct.next += rtpe_config.mqtt_publish_interval * 1000; // XXX scale to micro
timerthread_obj_schedule_abs(&mqt->ct.tt_obj, timeval_from_us(mqt->ct.next));
} }
// master lock held in W // master lock held in W
void mqtt_timer_start(struct mqtt_timer **mqtp, call_t *call, struct call_media *media) { void mqtt_timer_start(struct mqtt_timer **mqtp, call_t *call, struct call_media *media) {
@ -1991,7 +1991,7 @@ void mqtt_timer_start(struct mqtt_timer **mqtp, call_t *call, struct call_media
mqt->call = call ? obj_get(call) : NULL; mqt->call = call ? obj_get(call) : NULL;
mqt->self = mqtp; mqt->self = mqtp;
mqt->media = media; mqt->media = media;
mqt->ct.next = timeval_from_us(rtpe_now);
mqt->ct.next = rtpe_now;
if (media) if (media)
mqt->ct.timer_func = __mqtt_timer_run_media; mqt->ct.timer_func = __mqtt_timer_run_media;
@ -3131,7 +3131,7 @@ static int codec_decoder_event(enum codec_event event, void *ptr, void *data) {
// must be locked // must be locked
static void __delay_buffer_schedule(struct delay_buffer *dbuf) { static void __delay_buffer_schedule(struct delay_buffer *dbuf) {
if (dbuf->ct.next.tv_sec) // already scheduled?
if (dbuf->ct.next) // already scheduled?
return; return;
struct delay_frame *dframe = t_queue_peek_tail(&dbuf->frames); struct delay_frame *dframe = t_queue_peek_tail(&dbuf->frames);
@ -3140,8 +3140,8 @@ static void __delay_buffer_schedule(struct delay_buffer *dbuf) {
int64_t to_run = dframe->mp.tv; int64_t to_run = dframe->mp.tv;
to_run += dbuf->delay * 1000; // XXX scale up only once to_run += dbuf->delay * 1000; // XXX scale up only once
dbuf->ct.next = timeval_from_us(to_run);
timerthread_obj_schedule_abs(&dbuf->ct.tt_obj, dbuf->ct.next);
dbuf->ct.next = to_run;
timerthread_obj_schedule_abs(&dbuf->ct.tt_obj, timeval_from_us(dbuf->ct.next));
} }
static bool __buffer_delay_do_direct(struct delay_buffer *dbuf) { static bool __buffer_delay_do_direct(struct delay_buffer *dbuf) {
@ -3322,12 +3322,12 @@ static bool __buffer_dtx(struct dtx_buffer *dtxb, struct codec_ssrc_handler *dec
ts, dtxb->packets.length); ts, dtxb->packets.length);
// schedule timer if not running yet // schedule timer if not running yet
if (!dtxb->ct.next.tv_sec) {
if (!dtxb->ct.next) {
if (!dtxb->ssrc) if (!dtxb->ssrc)
dtxb->ssrc = mp->ssrc_in->parent->h.ssrc; dtxb->ssrc = mp->ssrc_in->parent->h.ssrc;
dtxb->ct.next = timeval_from_us(mp->tv);
dtxb->ct.next = timeval_add_usec(dtxb->ct.next, rtpe_config.dtx_delay * 1000);
timerthread_obj_schedule_abs(&dtxb->ct.tt_obj, dtxb->ct.next);
dtxb->ct.next = mp->tv;
dtxb->ct.next += rtpe_config.dtx_delay * 1000; // XXX scale to micro
timerthread_obj_schedule_abs(&dtxb->ct.tt_obj, timeval_from_us(dtxb->ct.next));
} }
// packet now consumed if there was one // packet now consumed if there was one
@ -3602,7 +3602,7 @@ static void __delay_send_later(struct codec_timer *ct) {
{ {
// schedule next run // schedule next run
LOCK(&dbuf->lock); LOCK(&dbuf->lock);
dbuf->ct.next.tv_sec = 0;
dbuf->ct.next = 0;
__delay_buffer_schedule(dbuf); __delay_buffer_schedule(dbuf);
} }
@ -3630,7 +3630,7 @@ static bool __dtx_drift_shift(struct dtx_buffer *dtxb, unsigned long ts,
"(%li ms < %i ms), " "(%li ms < %i ms), "
"pushing DTX timer forward my %i ms", "pushing DTX timer forward my %i ms",
tv_diff / 1000, rtpe_config.dtx_delay, rtpe_config.dtx_shift); tv_diff / 1000, rtpe_config.dtx_delay, rtpe_config.dtx_shift);
dtxb->ct.next = timeval_add_usec(dtxb->ct.next, rtpe_config.dtx_shift * 1000);
dtxb->ct.next += rtpe_config.dtx_shift * 1000; // XXX scale to micro
} }
else if (ts_diff < dtxb->tspp) { else if (ts_diff < dtxb->tspp) {
// TS underflow // TS underflow
@ -3643,7 +3643,7 @@ static bool __dtx_drift_shift(struct dtx_buffer *dtxb, unsigned long ts,
"(TS %lu, diff %li), " "(TS %lu, diff %li), "
"pushing DTX timer forward by %i ms and discarding packet", "pushing DTX timer forward by %i ms and discarding packet",
ts, ts_diff, rtpe_config.dtx_shift); ts, ts_diff, rtpe_config.dtx_shift);
dtxb->ct.next = timeval_add_usec(dtxb->ct.next, rtpe_config.dtx_shift * 1000);
dtxb->ct.next += rtpe_config.dtx_shift * 1000;
discard = true; discard = true;
} }
} }
@ -3657,7 +3657,7 @@ static bool __dtx_drift_shift(struct dtx_buffer *dtxb, unsigned long ts,
ilogs(dtx, LOG_DEBUG, "DTX timer queue overflowing (%i packets in queue, " ilogs(dtx, LOG_DEBUG, "DTX timer queue overflowing (%i packets in queue, "
"%lli ms delay), speeding up DTX timer by %i ms", "%lli ms delay), speeding up DTX timer by %i ms",
dtxb->packets.length, ts_diff_us / 1000, rtpe_config.dtx_shift); dtxb->packets.length, ts_diff_us / 1000, rtpe_config.dtx_shift);
dtxb->ct.next = timeval_add_usec(dtxb->ct.next, rtpe_config.dtx_shift * -1000);
dtxb->ct.next -= rtpe_config.dtx_shift * 1000;
} }
} }
@ -3802,7 +3802,7 @@ static void __dtx_send_later(struct codec_timer *ct) {
shutdown = true; shutdown = true;
else if (dtxb->ssrc != ps->ssrc_in[0]->parent->h.ssrc) else if (dtxb->ssrc != ps->ssrc_in[0]->parent->h.ssrc)
shutdown = true; shutdown = true;
else if (dtxb->ct.next.tv_sec == 0)
else if (dtxb->ct.next == 0)
shutdown = true; shutdown = true;
else { else {
shutdown = true; // default if no last used PTs are known shutdown = true; // default if no last used PTs are known
@ -3857,7 +3857,7 @@ static void __dtx_send_later(struct codec_timer *ct) {
else else
ilogs(dtx, LOG_DEBUG, "DTX buffer for %lx has been shut down", ilogs(dtx, LOG_DEBUG, "DTX buffer for %lx has been shut down",
(unsigned long) dtxb->ssrc); (unsigned long) dtxb->ssrc);
dtxb->ct.next.tv_sec = 0;
dtxb->ct.next = 0;
mutex_unlock(&dtxb->lock); mutex_unlock(&dtxb->lock);
goto out; // shut down goto out; // shut down
} }
@ -3955,8 +3955,8 @@ static void __dtx_send_later(struct codec_timer *ct) {
} }
// schedule next run // schedule next run
dtxb->ct.next = timeval_add_usec(dtxb->ct.next, dtxb->ptime * 1000);
timerthread_obj_schedule_abs(&dtxb->ct.tt_obj, dtxb->ct.next);
dtxb->ct.next += dtxb->ptime * 1000; // XXX scale to micro
timerthread_obj_schedule_abs(&dtxb->ct.tt_obj, timeval_from_us(dtxb->ct.next));
mutex_unlock(&dtxb->lock); mutex_unlock(&dtxb->lock);
@ -6244,9 +6244,9 @@ void codec_timer_callback(call_t *c, void (*func)(call_t *, codec_timer_callback
cb->timer_callback_func = func; cb->timer_callback_func = func;
cb->arg = a; cb->arg = a;
cb->ct.timer_func = __codec_timer_callback_fire; cb->ct.timer_func = __codec_timer_callback_fire;
cb->ct.next = timeval_from_us(rtpe_now);
cb->ct.next = timeval_add_usec(cb->ct.next, delay);
timerthread_obj_schedule_abs(&cb->ct.tt_obj, cb->ct.next);
cb->ct.next = rtpe_now;
cb->ct.next += delay;
timerthread_obj_schedule_abs(&cb->ct.tt_obj, timeval_from_us(cb->ct.next));
} }
static void codec_timers_run(void *p) { static void codec_timers_run(void *p) {


Loading…
Cancel
Save