MT#55283 convert media_packet to int64_t

Change-Id: I4b1da113cf01d34473027987d4ee60215655fdec
pull/1126/merge
Richard Fuchs 1 month ago
parent 8b50a41063
commit f34786dade

@ -2117,7 +2117,7 @@ static int handler_func_passthrough(struct codec_handler *h, struct media_packet
uint32_t ts = 0;
if (mp->rtp) {
ts = ntohl(mp->rtp->timestamp);
codec_calc_jitter(mp->ssrc_in, ts, h->source_pt.clock_rate, mp->tv);
codec_calc_jitter(mp->ssrc_in, ts, h->source_pt.clock_rate, timeval_from_us(mp->tv));
codec_calc_lost(mp->ssrc_in, ntohs(mp->rtp->seq_num));
if (ML_ISSET(mp->media->monologue, BLOCK_SHORT) && h->source_pt.codec_def
@ -2953,7 +2953,7 @@ static int handler_func_passthrough_ssrc(struct codec_handler *h, struct media_p
return 0;
uint32_t ts = ntohl(mp->rtp->timestamp);
codec_calc_jitter(mp->ssrc_in, ts, h->source_pt.clock_rate, mp->tv);
codec_calc_jitter(mp->ssrc_in, ts, h->source_pt.clock_rate, timeval_from_us(mp->tv));
codec_calc_lost(mp->ssrc_in, ntohs(mp->rtp->seq_num));
// save original payload in case DTMF mangles it
@ -3137,9 +3137,9 @@ static void __delay_buffer_schedule(struct delay_buffer *dbuf) {
if (!dframe)
return;
struct timeval to_run = dframe->mp.tv;
to_run = timeval_add_usec(to_run, dbuf->delay * 1000);
dbuf->ct.next = to_run;
int64_t to_run = dframe->mp.tv;
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);
}
@ -3153,7 +3153,7 @@ static bool __buffer_delay_do_direct(struct delay_buffer *dbuf) {
}
static int delay_frame_cmp(const struct delay_frame *a, const struct delay_frame *b, void *ptr) {
return -1 * timeval_cmp(a->mp.tv, b->mp.tv);
return -1 * timeval_cmp(timeval_from_us(a->mp.tv), timeval_from_us(b->mp.tv));
}
INLINE struct codec_ssrc_handler *ssrc_handler_get(struct codec_ssrc_handler *ch) {
@ -3324,7 +3324,7 @@ static bool __buffer_dtx(struct dtx_buffer *dtxb, struct codec_ssrc_handler *dec
if (!dtxb->ct.next.tv_sec) {
if (!dtxb->ssrc)
dtxb->ssrc = mp->ssrc_in->parent->h.ssrc;
dtxb->ct.next = mp->tv;
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);
}
@ -3769,7 +3769,7 @@ static void __dtx_send_later(struct codec_timer *ct) {
ts = dtxb->head_ts = dtxp->packet->ts;
else
ts = dtxb->head_ts;
tv_diff = timeval_diff(timeval_from_us(rtpe_now), mp_copy.tv);
tv_diff = rtpe_now - mp_copy.tv;
}
else {
// no packet ready to decode: DTX
@ -4927,7 +4927,7 @@ static int handler_func_transcode(struct codec_handler *h, struct media_packet *
ntohl(mp->rtp->timestamp), mp->payload.len);
codec_calc_jitter(mp->ssrc_in, ntohl(mp->rtp->timestamp), h->input_handler->source_pt.clock_rate,
mp->tv);
timeval_from_us(mp->tv));
if (h->stats_entry) {
unsigned int idx = timeval_from_us(rtpe_now).tv_sec & 1;

@ -753,7 +753,7 @@ static const char *dtmf_inject_pcm(struct call_media *media, struct call_media *
.ssrc = htonl(ssrc_in->parent->h.ssrc),
};
struct media_packet packet = {
.tv = timeval_from_us(rtpe_now),
.tv = rtpe_now,
.call = call,
.media = media,
.media_out = sink,

@ -554,7 +554,7 @@ retry:;
memcpy(buf, pkt->buf, len);
struct media_packet packet = {
.tv = timeval_from_us(rtpe_now),
.tv = rtpe_now,
.call = mp->call,
.media = mp->media,
.media_out = mp->media,
@ -1025,7 +1025,7 @@ void media_player_add_packet(struct media_player *mp, char *buf, size_t len,
.seq_num = htons(mp->seq),
};
struct media_packet packet = {
.tv = timeval_from_us(rtpe_now),
.tv = rtpe_now,
.call = mp->call,
.media = mp->media,
.media_out = mp->media,

@ -3085,16 +3085,11 @@ out:
static void __stream_fd_readable(struct packet_handler_ctx *phc) {
struct stream_fd *sfd = phc->mp.sfd;
if (phc->mp.tv.tv_sec < 0) {
if (phc->mp.tv < 0) {
// kernel-handled RTCP
phc->kernel_handled = true;
// restore original actual timestamp
if (G_UNLIKELY(phc->mp.tv.tv_usec == 0))
phc->mp.tv.tv_sec = -phc->mp.tv.tv_sec;
else {
phc->mp.tv.tv_sec = -phc->mp.tv.tv_sec - 1;
phc->mp.tv.tv_usec = 1000000 - phc->mp.tv.tv_usec;
}
phc->mp.tv *= -1;
}
int ret;
@ -3205,7 +3200,7 @@ done:
log_info_pop();
}
static void stream_fd_recv(struct obj *obj, char *buf, size_t len, struct sockaddr *sa, struct timeval *tv) {
static void stream_fd_recv(struct obj *obj, char *buf, size_t len, struct sockaddr *sa, int64_t tv) {
struct stream_fd *sfd = (struct stream_fd *) obj;
call_t *ca = sfd->call;
if (!ca)
@ -3225,6 +3220,7 @@ static void stream_fd_recv(struct obj *obj, char *buf, size_t len, struct sockad
struct packet_handler_ctx phc;
ZERO(phc);
phc.mp.sfd = sfd;
phc.mp.tv = tv;
sfd->socket.family->sockaddr2endpoint(&phc.mp.fsin, sa);
phc.s = STR_LEN(buf, len);

@ -718,13 +718,13 @@ next:
abort();
}
CAH(finish, c, &mp->fsin, &mp->sfd->socket.local, timeval_us(mp->tv));
CAH(finish, c, &mp->fsin, &mp->sfd->socket.local, mp->tv);
CAH(destroy);
return log_ctx->discard ? 1 : 0;
error:
CAH(finish, c, &mp->fsin, &mp->sfd->socket.local, timeval_us(mp->tv));
CAH(finish, c, &mp->fsin, &mp->sfd->socket.local, mp->tv);
CAH(destroy);
rtcp_list_free(q);
return -1;
@ -1266,19 +1266,19 @@ static void logging_destroy(struct rtcp_process_ctx *ctx) {
static void mos_sr(struct rtcp_process_ctx *ctx, struct sender_report_packet *sr) {
ssrc_sender_report(ctx->mp->media, &ctx->scratch.sr, ctx->mp->tv);
ssrc_sender_report(ctx->mp->media, &ctx->scratch.sr, timeval_from_us(ctx->mp->tv));
}
static void mos_rr(struct rtcp_process_ctx *ctx, struct report_block *rr) {
ssrc_receiver_report(ctx->mp->media, ctx->mp->sfd, &ctx->scratch.rr, ctx->mp->tv);
ssrc_receiver_report(ctx->mp->media, ctx->mp->sfd, &ctx->scratch.rr, timeval_from_us(ctx->mp->tv));
}
static void mos_xr_rr_time(struct rtcp_process_ctx *ctx, const struct xr_rb_rr_time *rr) {
ssrc_receiver_rr_time(ctx->mp->media, &ctx->scratch.xr_rr, ctx->mp->tv);
ssrc_receiver_rr_time(ctx->mp->media, &ctx->scratch.xr_rr, timeval_from_us(ctx->mp->tv));
}
static void mos_xr_dlrr(struct rtcp_process_ctx *ctx, const struct xr_rb_dlrr *dlrr) {
ssrc_receiver_dlrr(ctx->mp->media, &ctx->scratch.xr_dlrr, ctx->mp->tv);
ssrc_receiver_dlrr(ctx->mp->media, &ctx->scratch.xr_dlrr, timeval_from_us(ctx->mp->tv));
}
static void mos_xr_voip_metrics(struct rtcp_process_ctx *ctx, const struct xr_rb_voip_metrics *rb_voip_mtc) {
ssrc_voip_metrics(ctx->mp->media, &ctx->scratch.xr_vm, ctx->mp->tv);
ssrc_voip_metrics(ctx->mp->media, &ctx->scratch.xr_vm, timeval_from_us(ctx->mp->tv));
}

@ -262,7 +262,7 @@ struct media_packet {
str raw;
endpoint_t fsin; // source address of received packet
struct timeval tv; // timestamp when packet was received
int64_t tv; // timestamp when packet was received
stream_fd *sfd; // fd which received the packet
call_t *call; // sfd->call
struct packet_stream *stream; // sfd->stream

@ -28,8 +28,7 @@ struct poller_item {
struct obj *obj;
poller_func_t readable;
void (*recv)(struct obj *, char *b, size_t len, struct sockaddr *,
struct timeval *);
void (*recv)(struct obj *, char *b, size_t len, struct sockaddr *, int64_t);
poller_func_t writeable;
poller_func_t closed;
};

@ -38,7 +38,7 @@ static bool __ip6_endpoint2sockaddr(void *, const endpoint_t *);
static bool __ip4_addrport2sockaddr(void *, const sockaddr_t *, unsigned int);
static bool __ip6_addrport2sockaddr(void *, const sockaddr_t *, unsigned int);
static ssize_t __ip_recvfrom(socket_t *s, void *buf, size_t len, endpoint_t *ep);
static ssize_t __ip_recvfrom_ts(socket_t *s, void *buf, size_t len, endpoint_t *ep, struct timeval *);
static ssize_t __ip_recvfrom_ts(socket_t *s, void *buf, size_t len, endpoint_t *ep, int64_t *);
static ssize_t __ip4_recvfrom_to(socket_t *s, void *buf, size_t len, endpoint_t *ep, sockaddr_t *to);
static ssize_t __ip6_recvfrom_to(socket_t *s, void *buf, size_t len, endpoint_t *ep, sockaddr_t *to);
static ssize_t __ip_sendmsg(socket_t *s, struct msghdr *mh, const endpoint_t *ep);
@ -325,7 +325,7 @@ static bool __ip_getsockname(socket_t *s) {
s->family->sockaddr2endpoint(&s->local, &sin);
return true;
}
INLINE ssize_t __ip_recvfrom_options(socket_t *s, void *buf, size_t len, endpoint_t *ep, struct timeval *tv,
INLINE ssize_t __ip_recvfrom_options(socket_t *s, void *buf, size_t len, endpoint_t *ep, int64_t *tv,
sockaddr_t *to, bool (*parse)(struct cmsghdr *, sockaddr_t *))
{
ssize_t ret;
@ -358,7 +358,7 @@ INLINE ssize_t __ip_recvfrom_options(socket_t *s, void *buf, size_t len, endpoin
return ret;
}
static ssize_t __ip_recvfrom_ts(socket_t *s, void *buf, size_t len, endpoint_t *ep, struct timeval *tv) {
static ssize_t __ip_recvfrom_ts(socket_t *s, void *buf, size_t len, endpoint_t *ep, int64_t *tv) {
return __ip_recvfrom_options(s, buf, len, ep, tv, NULL, NULL);
}
static ssize_t __ip_recvfrom(socket_t *s, void *buf, size_t len, endpoint_t *ep) {

@ -77,7 +77,7 @@ struct socket_family {
bool (*timestamping)(socket_t *);
bool (*pktinfo)(socket_t *);
ssize_t (*recvfrom)(socket_t *, void *, size_t, endpoint_t *);
ssize_t (*recvfrom_ts)(socket_t *, void *, size_t, endpoint_t *, struct timeval *);
ssize_t (*recvfrom_ts)(socket_t *, void *, size_t, endpoint_t *, int64_t *);
ssize_t (*recvfrom_to)(socket_t *, void *, size_t, endpoint_t *, sockaddr_t *);
ssize_t (*sendmsg)(socket_t *, struct msghdr *, const endpoint_t *);
ssize_t (*sendto)(socket_t *, const void *, size_t, const endpoint_t *);
@ -223,7 +223,7 @@ INLINE ssize_t socket_sendto_from(socket_t *s, const void *b, size_t l, const en
struct cmsghdr *cm; \
for (cm = firsthdr; cm; cm = nexthdr) { \
if (cm->cmsg_level == SOL_SOCKET && cm->cmsg_type == SO_TIMESTAMP && (*tv)) { \
*(*tv) = *((struct timeval *) CMSG_DATA(cm)); \
*(*tv) = timeval_us(*((struct timeval *) CMSG_DATA(cm))); \
(*tv) = NULL; \
} \
if (parse && (*to) && parse_to(cm, (*to))) \
@ -253,7 +253,7 @@ INLINE void nonblock(int fd) {
// coverity[check_return : FALSE]
fcntl(fd, F_SETFL, O_NONBLOCK);
}
INLINE void socket_rcvtimeout(socket_t *s, unsigned int us) {
INLINE void socket_rcvtimeout(socket_t *s, int64_t us) {
struct timeval tv = timeval_from_us(us);
// coverity[check_return : FALSE]
setsockopt(s->fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));

@ -406,7 +406,7 @@ struct uring_poll_recv {
struct poller *poller;
bool closed:1;
};
INLINE void uring_recvmsg_parse_cmsg(struct timeval *tv,
INLINE void uring_recvmsg_parse_cmsg(int64_t *tv,
sockaddr_t *to, bool (*parse)(struct cmsghdr *, sockaddr_t *),
struct io_uring_recvmsg_out *out, struct msghdr *mh)
{
@ -442,10 +442,10 @@ static void uring_poll_recv(struct uring_req *req, int32_t res, uint32_t flags)
void *payload = io_uring_recvmsg_payload(out, &rreq->msg);
struct sockaddr *sa = io_uring_recvmsg_name(out);
struct timeval tv = {0};
int64_t tv = 0;
uring_recvmsg_parse_cmsg(&tv, NULL, NULL, out, &rreq->msg);
rreq->it.recv(rreq->it.obj, payload, out->payloadlen, sa, &tv);
rreq->it.recv(rreq->it.obj, payload, out->payloadlen, sa, tv);
}
if (!(flags & IORING_CQE_F_MORE))

Loading…
Cancel
Save