Cache RTP packet size, revert 9ee0ed919a

pull/2204/head
winlin 4 years ago
parent 11454b3ced
commit eb9a263433

@ -854,6 +854,7 @@ SrsRtpPacket2::SrsRtpPacket2()
nalu_type = SrsAvcNaluTypeReserved; nalu_type = SrsAvcNaluTypeReserved;
frame_type = SrsFrameTypeReserved; frame_type = SrsFrameTypeReserved;
cached_payload_size = 0;
decode_handler = NULL; decode_handler = NULL;
++_srs_pps_objs_rtps->sugar; ++_srs_pps_objs_rtps->sugar;
@ -869,6 +870,7 @@ void SrsRtpPacket2::reset()
{ {
nalu_type = SrsAvcNaluTypeReserved; nalu_type = SrsAvcNaluTypeReserved;
frame_type = SrsFrameTypeReserved; frame_type = SrsFrameTypeReserved;
cached_payload_size = 0;
decode_handler = NULL; decode_handler = NULL;
// It's important to reset the header. // It's important to reset the header.
@ -931,6 +933,8 @@ cleanup:
bool SrsRtpPacket2::recycle() bool SrsRtpPacket2::recycle()
{ {
// Clear the cache size, it may change when reuse it.
cached_payload_size = 0;
// Reset the handler, for decode only. // Reset the handler, for decode only.
decode_handler = NULL; decode_handler = NULL;
@ -1012,6 +1016,7 @@ SrsRtpPacket2* SrsRtpPacket2::copy()
cp->shared_msg = shared_msg->copy2(); cp->shared_msg = shared_msg->copy2();
cp->frame_type = frame_type; cp->frame_type = frame_type;
cp->cached_payload_size = cached_payload_size;
// For performance issue, do not copy the unused field. // For performance issue, do not copy the unused field.
//cp->decode_handler = decode_handler; //cp->decode_handler = decode_handler;
@ -1021,11 +1026,17 @@ SrsRtpPacket2* SrsRtpPacket2::copy()
void SrsRtpPacket2::set_padding(int size) void SrsRtpPacket2::set_padding(int size)
{ {
header.set_padding(size); header.set_padding(size);
if (cached_payload_size) {
cached_payload_size += size - header.get_padding();
}
} }
void SrsRtpPacket2::add_padding(int size) void SrsRtpPacket2::add_padding(int size)
{ {
header.set_padding(header.get_padding() + size); header.set_padding(header.get_padding() + size);
if (cached_payload_size) {
cached_payload_size += size;
}
} }
void SrsRtpPacket2::set_decode_handler(ISrsRtpPacketDecodeHandler* h) void SrsRtpPacket2::set_decode_handler(ISrsRtpPacketDecodeHandler* h)
@ -1045,8 +1056,11 @@ void SrsRtpPacket2::set_extension_types(SrsRtpExtensionTypes* v)
uint64_t SrsRtpPacket2::nb_bytes() uint64_t SrsRtpPacket2::nb_bytes()
{ {
int nn_payload = (payload_? payload_->nb_bytes():0); if (!cached_payload_size) {
return header.nb_bytes() + nn_payload + header.get_padding(); 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) srs_error_t SrsRtpPacket2::encode(SrsBuffer* buf)

@ -315,7 +315,10 @@ public:
SrsAvcNaluType nalu_type; SrsAvcNaluType nalu_type;
// The frame type, for RTMP bridger or SFU source. // The frame type, for RTMP bridger or SFU source.
SrsFrameType frame_type; SrsFrameType frame_type;
// Fast cache for performance.
private: private:
// The cached payload size for packet.
int cached_payload_size;
// The helper handler for decoder, use RAW payload if NULL. // The helper handler for decoder, use RAW payload if NULL.
ISrsRtpPacketDecodeHandler* decode_handler; ISrsRtpPacketDecodeHandler* decode_handler;
public: public:

Loading…
Cancel
Save