From 68db24cf60d07468f0656303941f89b6ca89a9cf Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Mon, 11 Mar 2024 19:25:25 +0100 Subject: [PATCH] Make RTP not transcode This is part of the application. The application is responsible to decode after processing dejitter. The application is responsible to encode before sending. --- include/osmocom/cc/rtp.h | 8 +++---- src/rtp.c | 48 +++++----------------------------------- 2 files changed, 9 insertions(+), 47 deletions(-) diff --git a/include/osmocom/cc/rtp.h b/include/osmocom/cc/rtp.h index 6becdfc..1c9acdb 100644 --- a/include/osmocom/cc/rtp.h +++ b/include/osmocom/cc/rtp.h @@ -3,8 +3,8 @@ void osmo_cc_set_rtp_ports(osmo_cc_session_config_t *conf, uint16_t from, uint16_t to); int osmo_cc_rtp_open(osmo_cc_session_media_t *media); int osmo_cc_rtp_connect(osmo_cc_session_media_t *media); -void osmo_cc_rtp_send(osmo_cc_session_codec_t *codec, uint8_t *data, int len, uint8_t marker, int inc_sequence, - int inc_timestamp, void *priv); -void osmo_cc_rtp_send_ts(osmo_cc_session_codec_t *codec, uint8_t *data, int len, uint8_t marker, uint16_t tx_sequence, - uint32_t tx_timestamp, void *priv); +void osmo_cc_rtp_send(osmo_cc_session_codec_t *codec, uint8_t *payload, int payload_len, uint8_t marker, int inc_sequence, + int inc_timestamp); +void osmo_cc_rtp_send_ts(osmo_cc_session_codec_t *codec, uint8_t *payload, int payload_len, uint8_t marker, + uint16_t tx_sequence, uint32_t tx_timestamp); void osmo_cc_rtp_close(osmo_cc_session_media_t *media); diff --git a/src/rtp.c b/src/rtp.c index d25da5a..74e3f5f 100644 --- a/src/rtp.c +++ b/src/rtp.c @@ -354,56 +354,30 @@ pton_error: } /* send rtp data with given codec */ -void osmo_cc_rtp_send(osmo_cc_session_codec_t *codec, uint8_t *data, int len, uint8_t marker, int inc_sequence, - int inc_timestamp, void *priv) +void osmo_cc_rtp_send(osmo_cc_session_codec_t *codec, uint8_t *payload, int payload_len, uint8_t marker, int inc_sequence, + int inc_timestamp) { - uint8_t *payload = NULL; - int payload_len = 0; - if (!codec || !codec->media->rtp_ofd.fd) return; - if (codec->encoder) - codec->encoder(data, len, &payload, &payload_len, priv); - else { - payload = data; - payload_len = len; - } - rtp_send(&codec->media->rtp_sa, codec->media->rtp_slen, codec->media->rtp_ofd.fd, payload, payload_len, marker, codec->payload_type_remote, codec->media->tx_sequence, codec->media->tx_timestamp, codec->media->tx_ssrc); codec->media->tx_sequence += inc_sequence; codec->media->tx_timestamp += inc_timestamp; - - if (codec->encoder) - free(payload); } /* dito, but with absolute sequence and timestamp */ -void osmo_cc_rtp_send_ts(osmo_cc_session_codec_t *codec, uint8_t *data, int len, uint8_t marker, uint16_t tx_sequence, - uint32_t tx_timestamp, void *priv) +void osmo_cc_rtp_send_ts(osmo_cc_session_codec_t *codec, uint8_t *payload, int payload_len, uint8_t marker, + uint16_t tx_sequence, uint32_t tx_timestamp) { - uint8_t *payload = NULL; - int payload_len = 0; - if (!codec || !codec->media->rtp_ofd.fd) return; - if (codec->encoder) - codec->encoder(data, len, &payload, &payload_len, priv); - else { - payload = data; - payload_len = len; - } - rtp_send(&codec->media->rtp_sa, codec->media->rtp_slen, codec->media->rtp_ofd.fd, payload, payload_len, marker, codec->payload_type_remote, tx_sequence, tx_timestamp, codec->media->tx_ssrc); codec->media->tx_sequence = tx_sequence; codec->media->tx_timestamp = tx_timestamp; - - if (codec->encoder) - free(payload); } static void check_port_translation(struct sockaddr_storage *sa, struct sockaddr_storage *media_sa, const char *what) @@ -454,8 +428,6 @@ static int rtp_listen_cb(struct osmo_fd *ofd, unsigned int when) uint8_t marker; uint8_t payload_type; osmo_cc_session_codec_t *codec; - uint8_t *data; - int len; struct sockaddr_storage sa; socklen_t slen = sizeof(sa); // must be initialized and will be overwritten @@ -477,19 +449,9 @@ static int rtp_listen_cb(struct osmo_fd *ofd, unsigned int when) return 0; } - if (codec->decoder) - codec->decoder(payload, payload_len, &data, &len, media->session->priv); - else { - data = payload; - len = payload_len; - } - if (codec->media->receive) codec->media->receiver(codec, marker, media->rx_sequence, media->rx_timestamp, media->rx_ssrc, - data, len); - - if (codec->decoder) - free(data); + payload, payload_len); } return 0;