Browse Source

MT#56861 fix Coverity warnings

Fix 64-bit int handling.

Fix NULL pointer checks.

Change-Id: I901659f432a5af2c32f2137a6ac5a7fee3e909dc
Warned-by: Coverity
pull/1657/head
Richard Fuchs 3 years ago
parent
commit
77689a0b8c
1 changed files with 30 additions and 26 deletions
  1. +30
    -26
      daemon/codec.c

+ 30
- 26
daemon/codec.c View File

@ -2173,7 +2173,7 @@ static int packet_dtmf(struct codec_ssrc_handler *ch, struct codec_ssrc_handler
struct telephone_event_payload *dtmf = (void *) packet->payload->s;
struct codec_handler *h = input_ch->handler;
// fudge up TS and duration values
uint64_t duration = h->source_pt.clock_rate * h->source_pt.ptime / 1000;
uint64_t duration = (uint64_t) h->source_pt.clock_rate * h->source_pt.ptime / 1000;
uint64_t ts = packet->ts + ntohs(dtmf->duration) - duration;
// remember this as last "encoder" TS
@ -2484,32 +2484,35 @@ static int handler_func_passthrough_ssrc(struct codec_handler *h, struct media_p
// check for DTMF injection
if (h->dtmf_payload_type != -1) {
struct codec_ssrc_handler *ch = get_ssrc(mp->ssrc_in->parent->h.ssrc, h->ssrc_hash);
uint64_t ts = ntohl(mp->rtp->timestamp);
str ev_pl = { .s = buf + sizeof(*mp->rtp) };
int is_dtmf = dtmf_event_payload(&ev_pl, &ts, h->source_pt.clock_rate * h->source_pt.ptime / 1000,
&ch->dtmf_event, &ch->dtmf_events);
if (is_dtmf) {
// fix up RTP header
struct rtp_header *r = (void *) buf;
*r = *mp->rtp;
r->m_pt = h->dtmf_payload_type;
r->timestamp = htonl(ts);
if (is_dtmf == 1)
r->m_pt |= 0x80;
else if (is_dtmf == 3) // end event
duplicates = 2;
mp->rtp = r;
mp->raw.s = buf;
mp->raw.len = ev_pl.len + sizeof(*mp->rtp);
if (ch) {
uint64_t ts = ntohl(mp->rtp->timestamp);
str ev_pl = { .s = buf + sizeof(*mp->rtp) };
int is_dtmf = dtmf_event_payload(&ev_pl, &ts,
(uint64_t) h->source_pt.clock_rate * h->source_pt.ptime / 1000,
&ch->dtmf_event, &ch->dtmf_events);
if (is_dtmf) {
// fix up RTP header
struct rtp_header *r = (void *) buf;
*r = *mp->rtp;
r->m_pt = h->dtmf_payload_type;
r->timestamp = htonl(ts);
if (is_dtmf == 1)
r->m_pt |= 0x80;
else if (is_dtmf == 3) // end event
duplicates = 2;
mp->rtp = r;
mp->raw.s = buf;
mp->raw.len = ev_pl.len + sizeof(*mp->rtp);
add_packet_fn = codec_add_raw_packet_dup;
}
else if (!ch->dtmf_events.length)
mp->media->monologue->dtmf_injection_active = 0;
add_packet_fn = codec_add_raw_packet_dup;
obj_put(&ch->h);
}
else if (!ch->dtmf_events.length)
mp->media->monologue->dtmf_injection_active = 0;
obj_put(&ch->h);
}
// substitute out SSRC etc
@ -2591,7 +2594,8 @@ uint64_t codec_encoder_pts(struct codec_ssrc_handler *ch, struct ssrc_ctx *ssrc_
return 0;
uint64_t cur = atomic64_get(&ssrc_in->last_ts);
// return the TS of the next expected packet
cur += ch->ptime * ch->handler->source_pt.clock_rate / 1000;
if (ch)
cur += (uint64_t) ch->ptime * ch->handler->source_pt.clock_rate / 1000;
return cur;
}
return ch->encoder->fifo_pts;


Loading…
Cancel
Save