Browse Source

MT#55283 use typed GQueue for dtx_packets

Change-Id: Ifbab6fbb03c26f449075b93ce1ec6a444922c5f6
pull/1776/head
Richard Fuchs 2 years ago
parent
commit
dc9e38672a
1 changed files with 11 additions and 7 deletions
  1. +11
    -7
      daemon/codec.c

+ 11
- 7
daemon/codec.c View File

@ -106,6 +106,10 @@ static rtp_pt_list *__codec_store_delete_link(rtp_pt_list *link, struct codec_st
struct codec_ssrc_handler;
struct transcode_packet;
struct dtx_packet;
TYPED_GQUEUE(dtx_packet, struct dtx_packet)
struct dtx_buffer {
struct codec_timer ct;
@ -115,7 +119,7 @@ struct dtx_buffer {
int tspp; // timestamp increment per packet
unsigned int clockrate;
struct call *call;
GQueue packets;
dtx_packet_q packets;
struct media_packet last_mp;
unsigned long head_ts;
uint32_t ssrc;
@ -2875,7 +2879,7 @@ static int __buffer_dtx(struct dtx_buffer *dtxb, struct codec_ssrc_handler *deco
mutex_lock(&dtxb->lock);
dtxb->start = rtpe_now.tv_sec;
g_queue_push_tail(&dtxb->packets, dtxp);
t_queue_push_tail(&dtxb->packets, dtxp);
ilogs(dtx, LOG_DEBUG, "Adding packet (TS %lu) to DTX buffer; now %i packets in DTX queue",
ts, dtxb->packets.length);
@ -3208,7 +3212,7 @@ static bool __dtx_drift_shift(struct dtx_buffer *dtxb, unsigned long ts,
}
else if (dtxb->packets.length >= rtpe_config.dtx_buffer) {
// inspect TS is most recent packet
struct dtx_packet *dtxp_last = g_queue_peek_tail(&dtxb->packets);
struct dtx_packet *dtxp_last = t_queue_peek_tail(&dtxb->packets);
ts_diff = dtxp_last->packet ? dtxp_last->packet->ts - ts : 0;
long long ts_diff_us = (long long) ts_diff * 1000000 / dtxb->clockrate;
if (ts_diff_us >= (long long) rtpe_config.dtx_lag * 1000) {
@ -3244,7 +3248,7 @@ static bool __dtx_drift_drop(struct dtx_buffer *dtxb, unsigned long ts,
}
else if (dtxb->packets.length >= rtpe_config.dtx_buffer) {
// inspect TS is most recent packet
struct dtx_packet *dtxp_last = g_queue_peek_tail(&dtxb->packets);
struct dtx_packet *dtxp_last = t_queue_peek_tail(&dtxb->packets);
ts_diff = dtxp_last->packet ? dtxp_last->packet->ts - ts : 0;
long long ts_diff_us = (long long) ts_diff * 1000000 / dtxb->clockrate;
if (ts_diff_us >= (long long) rtpe_config.dtx_lag * 1000) {
@ -3288,7 +3292,7 @@ static void __dtx_send_later(struct codec_timer *ct) {
while (true) {
// do we have a packet?
dtxp = g_queue_peek_head(&dtxb->packets);
dtxp = t_queue_peek_head(&dtxb->packets);
if (dtxp) {
// inspect head packet and check TS, see if it's ready to be decoded
ts = dtxp->packet ? dtxp->packet->ts : dtxb->head_ts;
@ -3311,7 +3315,7 @@ static void __dtx_send_later(struct codec_timer *ct) {
// go or no go?
if (dtxp)
g_queue_pop_head(&dtxb->packets);
t_queue_pop_head(&dtxb->packets);
}
p_left = dtxb->packets.length;
@ -3539,7 +3543,7 @@ static void __dtx_shutdown(struct dtx_buffer *dtxb) {
if (dtxb->call)
obj_put(dtxb->call);
dtxb->call = NULL;
g_queue_clear_full(&dtxb->packets, (GDestroyNotify) dtx_packet_free);
t_queue_clear_full(&dtxb->packets, dtx_packet_free);
}
static void __delay_buffer_shutdown(struct delay_buffer *dbuf, bool flush) {
if (flush) {


Loading…
Cancel
Save