Create data and payload buffers for RTP frame

Data points to the beginning of data that is sent and payload points
to offset where user data can be copied to.
This commit is contained in:
Aaro Altonen 2019-05-23 13:00:58 +03:00
parent 341b2a7aae
commit 4305ec04f0
3 changed files with 25 additions and 25 deletions

View File

@ -35,16 +35,17 @@ kvz_rtp::frame::rtp_frame *kvz_rtp::frame::alloc_frame(size_t payload_len, frame
return nullptr;
}
if ((frame->header = new uint8_t[payload_len + header_len]) == nullptr) {
if ((frame->data = new uint8_t[payload_len + header_len]) == nullptr) {
LOG_ERROR("Failed to allocate paylod for RTP frame");
delete frame;
return nullptr;
}
frame->header_len = header_len;
frame->data_len = payload_len;
frame->data = frame->header + header_len;
frame->type = type;
frame->header_len = header_len;
frame->payload_len = payload_len;
frame->total_len = payload_len + header_len;
frame->payload = frame->data + header_len;
frame->type = type;
return frame;
}
@ -54,8 +55,8 @@ rtp_error_t kvz_rtp::frame::dealloc_frame(kvz_rtp::frame::rtp_frame *frame)
if (!frame)
return RTP_INVALID_VALUE;
if (frame->header)
delete frame->header;
if (frame->data)
delete frame->data;
LOG_DEBUG("Deallocating frame, type %u", frame->type);
@ -69,29 +70,29 @@ uint8_t *kvz_rtp::frame::get_rtp_header(kvz_rtp::frame::rtp_frame *frame)
if (!frame)
return nullptr;
return frame->header;
return frame->data;
}
uint8_t *kvz_rtp::frame::get_opus_header(kvz_rtp::frame::rtp_frame *frame)
{
if (!frame || !frame->header || frame->type != FRAME_TYPE_OPUS)
if (!frame || !frame->data || frame->type != FRAME_TYPE_OPUS)
return nullptr;
return frame->header + HEADER_SIZE_RTP;
return frame->data + HEADER_SIZE_RTP;
}
uint8_t *kvz_rtp::frame::get_hevc_rtp_header(kvz_rtp::frame::rtp_frame *frame)
{
if (!frame || !frame->header || frame->type != FRAME_TYPE_HEVC_FU)
if (!frame || !frame->data || frame->type != FRAME_TYPE_HEVC_FU)
return nullptr;
return frame->header + HEADER_SIZE_RTP;
return frame->data + HEADER_SIZE_RTP;
}
uint8_t *kvz_rtp::frame::get_hevc_fu_header(kvz_rtp::frame::rtp_frame *frame)
{
if (!frame || !frame->header || frame->type != FRAME_TYPE_HEVC_FU)
if (!frame || !frame->data || frame->type != FRAME_TYPE_HEVC_FU)
return nullptr;
return frame->header + HEADER_SIZE_RTP + HEADER_SIZE_HEVC_RTP;
return frame->data + HEADER_SIZE_RTP + HEADER_SIZE_HEVC_RTP;
}

View File

@ -23,16 +23,15 @@ namespace kvz_rtp {
uint32_t timestamp;
uint32_t ssrc;
uint16_t seq;
uint8_t payload;
uint8_t ptype;
uint8_t marker;
/* TODO: rename header -> data and data -> payload */
size_t total_len; /* total length of the frame (payload length + header length) */
size_t header_len; /* length of header (varies based on the type of the frame) */
size_t payload_len; /* length of the payload */
uint8_t *header;
size_t header_len;
uint8_t *data;
size_t data_len;
uint8_t *data; /* pointer to the start of the whole buffer */
uint8_t *payload; /* pointer to actual payload */
rtp_format_t format;
frame_type_t type;

View File

@ -168,7 +168,7 @@ int kvz_rtp::reader::frame_receiver(kvz_rtp::reader *reader)
}
frame->marker = (inbuf[1] & 0x80) ? 1 : 0;
frame->payload = (inbuf[1] & 0x7f);
frame->ptype = (inbuf[1] & 0x7f);
frame->seq = ntohs(*(uint16_t *)&inbuf[2]);
frame->timestamp = ntohl(*(uint32_t *)&inbuf[4]);
frame->ssrc = ntohl(*(uint32_t *)&inbuf[8]);
@ -178,15 +178,15 @@ int kvz_rtp::reader::frame_receiver(kvz_rtp::reader *reader)
continue;
}
frame->header = new uint8_t[ret];
frame->header_len = ret;
frame->data = new uint8_t[ret];
frame->total_len = ret;
if (!frame->data) {
LOG_ERROR("Failed to allocate buffer for RTP frame!");
continue;
}
memcpy(frame->header, inbuf, ret);
memcpy(frame->data, inbuf, ret);
if (reader->recv_hook_installed())
reader->recv_hook(frame);