From cf6f7cbe9d3a06e49e189da8ddef326a3dd32fcf Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Wed, 17 Jan 2024 14:53:49 +0100 Subject: [PATCH] transmit vid.: comp last pkt sz in get_packet_sizes Correctly set last packet size from get_packet_sizes() so that it doesn't need to be adjusted later. --- src/transmit.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/transmit.cpp b/src/transmit.cpp index e83c50961..49196ee05 100644 --- a/src/transmit.cpp +++ b/src/transmit.cpp @@ -548,6 +548,11 @@ static vector get_packet_sizes(struct video_frame *frame, int substream, in pos += len; ret.push_back(len); } while (pos < frame->tiles[substream].data_len); + + if (pos > frame->tiles[substream].data_len) { + ret[ret.size() - 1] -= + (int) (pos - frame->tiles[substream].data_len); + } return ret; } @@ -637,9 +642,7 @@ tx_send_base(struct tx *tx, struct video_frame *frame, struct rtp *rtp_session, struct tile *tile = &frame->tiles[substream]; - int data_len; // see definition in rtp_callback.h - uint32_t rtp_hdr[100]; int rtp_hdr_len; int pt = fec_pt_from_fec_type(TX_MEDIA_VIDEO, frame->fec_params.type, tx->encryption); /* A value specified in our packet format */ @@ -717,14 +720,12 @@ tx_send_base(struct tx *tx, struct video_frame *frame, struct rtp *rtp_session, rtp_hdr_packet[1] = htonl(offset); char *data = tile->data + pos; - data_len = packet_sizes.at(packet_idx); - if (pos + data_len >= (unsigned int) tile->data_len) { - if (send_m) { - m = 1; - } - data_len = tile->data_len - pos; - } + int data_len = packet_sizes.at(packet_idx); pos += data_len; + + if (pos == tile->data_len && send_m != 0) { + m = 1; + } if(data_len) { /* check needed for FEC_MULT */ char encrypted_data[data_len + MAX_CRYPTO_EXCEED];