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:
parent
341b2a7aae
commit
4305ec04f0
29
src/frame.cc
29
src/frame.cc
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
13
src/frame.hh
13
src/frame.hh
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue