mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Cache RTP packet size, revert 9ee0ed919a
This commit is contained in:
parent
af0b50f54c
commit
314a6dbec6
2 changed files with 19 additions and 2 deletions
|
@ -854,6 +854,7 @@ SrsRtpPacket2::SrsRtpPacket2()
|
|||
|
||||
nalu_type = SrsAvcNaluTypeReserved;
|
||||
frame_type = SrsFrameTypeReserved;
|
||||
cached_payload_size = 0;
|
||||
decode_handler = NULL;
|
||||
|
||||
++_srs_pps_objs_rtps->sugar;
|
||||
|
@ -869,6 +870,7 @@ void SrsRtpPacket2::reset()
|
|||
{
|
||||
nalu_type = SrsAvcNaluTypeReserved;
|
||||
frame_type = SrsFrameTypeReserved;
|
||||
cached_payload_size = 0;
|
||||
decode_handler = NULL;
|
||||
|
||||
// It's important to reset the header.
|
||||
|
@ -931,6 +933,8 @@ cleanup:
|
|||
|
||||
bool SrsRtpPacket2::recycle()
|
||||
{
|
||||
// Clear the cache size, it may change when reuse it.
|
||||
cached_payload_size = 0;
|
||||
// Reset the handler, for decode only.
|
||||
decode_handler = NULL;
|
||||
|
||||
|
@ -1012,6 +1016,7 @@ SrsRtpPacket2* SrsRtpPacket2::copy()
|
|||
cp->shared_msg = shared_msg->copy2();
|
||||
cp->frame_type = frame_type;
|
||||
|
||||
cp->cached_payload_size = cached_payload_size;
|
||||
// For performance issue, do not copy the unused field.
|
||||
//cp->decode_handler = decode_handler;
|
||||
|
||||
|
@ -1021,11 +1026,17 @@ SrsRtpPacket2* SrsRtpPacket2::copy()
|
|||
void SrsRtpPacket2::set_padding(int size)
|
||||
{
|
||||
header.set_padding(size);
|
||||
if (cached_payload_size) {
|
||||
cached_payload_size += size - header.get_padding();
|
||||
}
|
||||
}
|
||||
|
||||
void SrsRtpPacket2::add_padding(int size)
|
||||
{
|
||||
header.set_padding(header.get_padding() + size);
|
||||
if (cached_payload_size) {
|
||||
cached_payload_size += size;
|
||||
}
|
||||
}
|
||||
|
||||
void SrsRtpPacket2::set_decode_handler(ISrsRtpPacketDecodeHandler* h)
|
||||
|
@ -1045,8 +1056,11 @@ void SrsRtpPacket2::set_extension_types(SrsRtpExtensionTypes* v)
|
|||
|
||||
uint64_t SrsRtpPacket2::nb_bytes()
|
||||
{
|
||||
int nn_payload = (payload_? payload_->nb_bytes():0);
|
||||
return header.nb_bytes() + nn_payload + header.get_padding();
|
||||
if (!cached_payload_size) {
|
||||
int nn_payload = (payload_? payload_->nb_bytes():0);
|
||||
cached_payload_size = header.nb_bytes() + nn_payload + header.get_padding();
|
||||
}
|
||||
return cached_payload_size;
|
||||
}
|
||||
|
||||
srs_error_t SrsRtpPacket2::encode(SrsBuffer* buf)
|
||||
|
|
|
@ -315,7 +315,10 @@ public:
|
|||
SrsAvcNaluType nalu_type;
|
||||
// The frame type, for RTMP bridger or SFU source.
|
||||
SrsFrameType frame_type;
|
||||
// Fast cache for performance.
|
||||
private:
|
||||
// The cached payload size for packet.
|
||||
int cached_payload_size;
|
||||
// The helper handler for decoder, use RAW payload if NULL.
|
||||
ISrsRtpPacketDecodeHandler* decode_handler;
|
||||
public:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue