mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Perf: Refine header extensions marshal
This commit is contained in:
parent
eb9a263433
commit
7c517988a6
2 changed files with 16 additions and 25 deletions
|
@ -225,11 +225,6 @@ void SrsRtpExtensionTwcc::assign(const SrsRtpExtensionTwcc& h)
|
||||||
sn_ = h.sn_;
|
sn_ = h.sn_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SrsRtpExtensionTwcc::has_twcc_ext()
|
|
||||||
{
|
|
||||||
return has_twcc_;
|
|
||||||
}
|
|
||||||
|
|
||||||
srs_error_t SrsRtpExtensionTwcc::decode(SrsBuffer* buf)
|
srs_error_t SrsRtpExtensionTwcc::decode(SrsBuffer* buf)
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
@ -481,7 +476,7 @@ srs_error_t SrsRtpExtensions::decode_0xbede(SrsBuffer* buf)
|
||||||
|
|
||||||
uint64_t SrsRtpExtensions::nb_bytes()
|
uint64_t SrsRtpExtensions::nb_bytes()
|
||||||
{
|
{
|
||||||
int size = 4 + (twcc_.has_twcc_ext() ? twcc_.nb_bytes() : 0);
|
int size = 4 + (twcc_.exists() ? twcc_.nb_bytes() : 0);
|
||||||
size += (audio_level_.exists() ? audio_level_.nb_bytes() : 0);
|
size += (audio_level_.exists() ? audio_level_.nb_bytes() : 0);
|
||||||
// add padding
|
// add padding
|
||||||
size += (size % 4 == 0) ? 0 : (4 - size % 4);
|
size += (size % 4 == 0) ? 0 : (4 - size % 4);
|
||||||
|
@ -497,7 +492,7 @@ srs_error_t SrsRtpExtensions::encode(SrsBuffer* buf)
|
||||||
// Write length.
|
// Write length.
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
|
||||||
if (twcc_.has_twcc_ext()) {
|
if (twcc_.exists()) {
|
||||||
len += twcc_.nb_bytes();
|
len += twcc_.nb_bytes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -508,10 +503,14 @@ srs_error_t SrsRtpExtensions::encode(SrsBuffer* buf)
|
||||||
int padding_count = (len % 4 == 0) ? 0 : (4 - len % 4);
|
int padding_count = (len % 4 == 0) ? 0 : (4 - len % 4);
|
||||||
len += padding_count;
|
len += padding_count;
|
||||||
|
|
||||||
|
if (!buf->require(len)) {
|
||||||
|
return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", len);
|
||||||
|
}
|
||||||
|
|
||||||
buf->write_2bytes(len / 4);
|
buf->write_2bytes(len / 4);
|
||||||
|
|
||||||
// Write extensions.
|
// Write extensions.
|
||||||
if (twcc_.has_twcc_ext()) {
|
if (twcc_.exists()) {
|
||||||
if ((err = twcc_.encode(buf)) != srs_success) {
|
if ((err = twcc_.encode(buf)) != srs_success) {
|
||||||
return srs_error_wrap(err, "encode twcc extension");
|
return srs_error_wrap(err, "encode twcc extension");
|
||||||
}
|
}
|
||||||
|
@ -524,19 +523,14 @@ srs_error_t SrsRtpExtensions::encode(SrsBuffer* buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
// add padding
|
// add padding
|
||||||
while(padding_count > 0) {
|
if (padding_count) {
|
||||||
buf->write_1bytes(0);
|
memset(buf->head(), 0, padding_count);
|
||||||
padding_count--;
|
buf->skip(padding_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SrsRtpExtensions::exists()
|
|
||||||
{
|
|
||||||
return has_ext_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SrsRtpExtensions::set_types_(SrsRtpExtensionTypes* types)
|
void SrsRtpExtensions::set_types_(SrsRtpExtensionTypes* types)
|
||||||
{
|
{
|
||||||
types_ = types;
|
types_ = types;
|
||||||
|
@ -544,7 +538,7 @@ void SrsRtpExtensions::set_types_(SrsRtpExtensionTypes* types)
|
||||||
|
|
||||||
srs_error_t SrsRtpExtensions::get_twcc_sequence_number(uint16_t& twcc_sn)
|
srs_error_t SrsRtpExtensions::get_twcc_sequence_number(uint16_t& twcc_sn)
|
||||||
{
|
{
|
||||||
if (twcc_.has_twcc_ext()) {
|
if (twcc_.exists()) {
|
||||||
twcc_sn = twcc_.get_sn();
|
twcc_sn = twcc_.get_sn();
|
||||||
return srs_success;
|
return srs_success;
|
||||||
}
|
}
|
||||||
|
@ -1080,7 +1074,7 @@ srs_error_t SrsRtpPacket2::encode(SrsBuffer* buf)
|
||||||
if (!buf->require(padding)) {
|
if (!buf->require(padding)) {
|
||||||
return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", padding);
|
return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", padding);
|
||||||
}
|
}
|
||||||
memset(buf->data() + buf->pos(), padding, padding);
|
memset(buf->head(), padding, padding);
|
||||||
buf->skip(padding);
|
buf->skip(padding);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -142,7 +142,7 @@ public:
|
||||||
void reset();
|
void reset();
|
||||||
void assign(const SrsRtpExtensionTwcc& h);
|
void assign(const SrsRtpExtensionTwcc& h);
|
||||||
public:
|
public:
|
||||||
bool has_twcc_ext();
|
inline bool exists() { return has_twcc_; } // SrsRtpExtensionTwcc::exists
|
||||||
uint8_t get_id();
|
uint8_t get_id();
|
||||||
void set_id(uint8_t id);
|
void set_id(uint8_t id);
|
||||||
uint16_t get_sn();
|
uint16_t get_sn();
|
||||||
|
@ -168,7 +168,7 @@ public:
|
||||||
void reset();
|
void reset();
|
||||||
void assign(const SrsRtpExtensionOneByte& h);
|
void assign(const SrsRtpExtensionOneByte& h);
|
||||||
public:
|
public:
|
||||||
bool exists() { return has_ext_; }
|
inline bool exists() { return has_ext_; } // SrsRtpExtensionOneByte::exists
|
||||||
int get_id() { return id_; }
|
int get_id() { return id_; }
|
||||||
uint8_t get_value() { return value_; }
|
uint8_t get_value() { return value_; }
|
||||||
void set_id(int id);
|
void set_id(int id);
|
||||||
|
@ -200,7 +200,7 @@ public:
|
||||||
void reset();
|
void reset();
|
||||||
void assign(const SrsRtpExtensions& h);
|
void assign(const SrsRtpExtensions& h);
|
||||||
public:
|
public:
|
||||||
bool exists();
|
inline bool exists() { return has_ext_; } // SrsRtpExtensions::exists
|
||||||
void set_types_(SrsRtpExtensionTypes* types);
|
void set_types_(SrsRtpExtensionTypes* types);
|
||||||
srs_error_t get_twcc_sequence_number(uint16_t& twcc_sn);
|
srs_error_t get_twcc_sequence_number(uint16_t& twcc_sn);
|
||||||
srs_error_t set_twcc_sequence_number(uint8_t id, uint16_t sn);
|
srs_error_t set_twcc_sequence_number(uint8_t id, uint16_t sn);
|
||||||
|
@ -254,10 +254,7 @@ public:
|
||||||
void set_timestamp(uint32_t v);
|
void set_timestamp(uint32_t v);
|
||||||
uint32_t get_timestamp() const;
|
uint32_t get_timestamp() const;
|
||||||
void set_ssrc(uint32_t v);
|
void set_ssrc(uint32_t v);
|
||||||
// SrsRtpHeader::get_ssrc
|
inline uint32_t get_ssrc() const { return ssrc; } // SrsRtpHeader::get_ssrc
|
||||||
inline uint32_t get_ssrc() const {
|
|
||||||
return ssrc;
|
|
||||||
}
|
|
||||||
void set_padding(uint8_t v);
|
void set_padding(uint8_t v);
|
||||||
uint8_t get_padding() const;
|
uint8_t get_padding() const;
|
||||||
void set_extensions(SrsRtpExtensionTypes* extmap);
|
void set_extensions(SrsRtpExtensionTypes* extmap);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue