1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

define SrsAvcNaluTypeParse

This commit is contained in:
Haibo Chen 2025-02-19 16:33:24 +08:00
parent b3c508534d
commit 83d577a49a
5 changed files with 13 additions and 13 deletions

View file

@ -1256,7 +1256,7 @@ srs_error_t SrsRtcRtpBuilder::package_nalus(SrsSharedPtrMessage* msg, const vect
}
if (first_nalu_type == SrsAvcNaluTypeReserved) {
first_nalu_type = SrsAvcNaluType((uint8_t)(sample->bytes[0] & kNalTypeMask));
first_nalu_type = SrsAvcNaluTypeParse(sample->bytes[0]);
}
raw_raw->push_back(sample->copy());
@ -1336,7 +1336,7 @@ srs_error_t SrsRtcRtpBuilder::package_nalus(SrsSharedPtrMessage* msg, const vect
srs_freep(fua);
return srs_error_wrap(err, "read samples %d bytes, left %d, total %d", packet_size, nb_left, nn_bytes);
}
fua->nalu_type = (SrsAvcNaluType)(header & kNalTypeMask);
fua->nalu_type = SrsAvcNaluTypeParse(header);
fua->start = bool(i == 0);
fua->end = bool(i == num_of_packet - 1);
@ -1409,25 +1409,23 @@ srs_error_t SrsRtcRtpBuilder::package_fu_a(SrsSharedPtrMessage* msg, SrsSample*
pkt->nalu_type = is_hevc ? kFuHevc : kFuA;
if (is_hevc) {
uint8_t nal_type = SrsHevcNaluTypeParse(header);
// H265 FU-A header
SrsRtpFUAPayloadHevc2* fua = new SrsRtpFUAPayloadHevc2();
pkt->set_payload(fua, SrsRtspPacketPayloadTypeFUAHevc);
fua->nalu_type = (SrsHevcNaluType)nal_type;
fua->nalu_type = SrsHevcNaluTypeParse(header);
fua->start = bool(i == 0);
fua->end = bool(i == num_of_packet - 1);
fua->payload = p;
fua->size = packet_size;
} else {
uint8_t nal_type = header & kNalTypeMask;
// H264 FU-A header
SrsRtpFUAPayload2* fua = new SrsRtpFUAPayload2();
pkt->set_payload(fua, SrsRtspPacketPayloadTypeFUA2);
fua->nri = (SrsAvcNaluType)header;
fua->nalu_type = (SrsAvcNaluType)nal_type;
fua->nalu_type = SrsAvcNaluTypeParse(header);
fua->start = bool(i == 0);
fua->end = bool(i == num_of_packet - 1);

View file

@ -707,7 +707,7 @@ srs_error_t SrsVideoFrame::parse_avc_nalu_type(const SrsSample* sample, SrsAvcNa
}
uint8_t header = sample->bytes[0];
avc_nalu_type = (SrsAvcNaluType)(header & kNalTypeMask);
avc_nalu_type = SrsAvcNaluTypeParse(header);
return err;
}
@ -760,7 +760,7 @@ srs_error_t SrsVideoFrame::parse_hevc_nalu_type(const SrsSample *sample, SrsHevc
}
uint8_t header = sample->bytes[0];
hevc_nalu_type = (SrsHevcNaluType)((header >> 1) & 0x3f);
hevc_nalu_type = SrsHevcNaluTypeParse(header);
return err;
}

View file

@ -422,6 +422,8 @@ enum SrsAvcNaluType
// Coded slice extension slice_layer_extension_rbsp( )
SrsAvcNaluTypeCodedSliceExt = 20,
};
// @see https://datatracker.ietf.org/doc/html/rfc6184#section-1.3
#define SrsAvcNaluTypeParse(code) (SrsAvcNaluType)(code & 0x1F)
std::string srs_avc_nalu2str(SrsAvcNaluType nalu_type);
#ifdef SRS_H265

View file

@ -1208,7 +1208,7 @@ SrsSample* SrsRtpSTAPPayload::get_sps()
continue;
}
SrsAvcNaluType nalu_type = (SrsAvcNaluType)(p->bytes[0] & kNalTypeMask);
SrsAvcNaluType nalu_type = SrsAvcNaluTypeParse(p->bytes[0]);
if (nalu_type == SrsAvcNaluTypeSPS) {
return p;
}
@ -1226,7 +1226,7 @@ SrsSample* SrsRtpSTAPPayload::get_pps()
continue;
}
SrsAvcNaluType nalu_type = (SrsAvcNaluType)(p->bytes[0] & kNalTypeMask);
SrsAvcNaluType nalu_type = SrsAvcNaluTypeParse(p->bytes[0]);
if (nalu_type == SrsAvcNaluTypePPS) {
return p;
}
@ -1412,7 +1412,7 @@ srs_error_t SrsRtpFUAPayload::decode(SrsBuffer* buf)
v = buf->read_1bytes();
start = v & kStart;
end = v & kEnd;
nalu_type = SrsAvcNaluType(v & kNalTypeMask);
nalu_type = SrsAvcNaluTypeParse(v);
if (!buf->require(1)) {
return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", 1);
@ -1513,7 +1513,7 @@ srs_error_t SrsRtpFUAPayload2::decode(SrsBuffer* buf)
v = buf->read_1bytes();
start = v & kStart;
end = v & kEnd;
nalu_type = SrsAvcNaluType(v & kNalTypeMask);
nalu_type = SrsAvcNaluTypeParse(v);
if (!buf->require(1)) {
return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", 1);

View file

@ -62,7 +62,7 @@ VOID TEST(KernelRTCTest, RtpSTAPPayloadException)
SrsAvcNaluType nalu_type = SrsAvcNaluTypeReserved;
// Try to parse the NALU type for video decoder.
if (!buf.empty()) {
nalu_type = SrsAvcNaluType((uint8_t)(buf.head()[0] & kNalTypeMask));
nalu_type = SrsAvcNaluTypeParse(buf.head()[0]);
}
EXPECT_TRUE(nalu_type == kStapA);