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

View file

@ -422,6 +422,8 @@ enum SrsAvcNaluType
// Coded slice extension slice_layer_extension_rbsp( ) // Coded slice extension slice_layer_extension_rbsp( )
SrsAvcNaluTypeCodedSliceExt = 20, 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); std::string srs_avc_nalu2str(SrsAvcNaluType nalu_type);
#ifdef SRS_H265 #ifdef SRS_H265

View file

@ -1208,7 +1208,7 @@ SrsSample* SrsRtpSTAPPayload::get_sps()
continue; continue;
} }
SrsAvcNaluType nalu_type = (SrsAvcNaluType)(p->bytes[0] & kNalTypeMask); SrsAvcNaluType nalu_type = SrsAvcNaluTypeParse(p->bytes[0]);
if (nalu_type == SrsAvcNaluTypeSPS) { if (nalu_type == SrsAvcNaluTypeSPS) {
return p; return p;
} }
@ -1226,7 +1226,7 @@ SrsSample* SrsRtpSTAPPayload::get_pps()
continue; continue;
} }
SrsAvcNaluType nalu_type = (SrsAvcNaluType)(p->bytes[0] & kNalTypeMask); SrsAvcNaluType nalu_type = SrsAvcNaluTypeParse(p->bytes[0]);
if (nalu_type == SrsAvcNaluTypePPS) { if (nalu_type == SrsAvcNaluTypePPS) {
return p; return p;
} }
@ -1412,7 +1412,7 @@ srs_error_t SrsRtpFUAPayload::decode(SrsBuffer* buf)
v = buf->read_1bytes(); v = buf->read_1bytes();
start = v & kStart; start = v & kStart;
end = v & kEnd; end = v & kEnd;
nalu_type = SrsAvcNaluType(v & kNalTypeMask); nalu_type = SrsAvcNaluTypeParse(v);
if (!buf->require(1)) { if (!buf->require(1)) {
return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", 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(); v = buf->read_1bytes();
start = v & kStart; start = v & kStart;
end = v & kEnd; end = v & kEnd;
nalu_type = SrsAvcNaluType(v & kNalTypeMask); nalu_type = SrsAvcNaluTypeParse(v);
if (!buf->require(1)) { if (!buf->require(1)) {
return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", 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; SrsAvcNaluType nalu_type = SrsAvcNaluTypeReserved;
// Try to parse the NALU type for video decoder. // Try to parse the NALU type for video decoder.
if (!buf.empty()) { if (!buf.empty()) {
nalu_type = SrsAvcNaluType((uint8_t)(buf.head()[0] & kNalTypeMask)); nalu_type = SrsAvcNaluTypeParse(buf.head()[0]);
} }
EXPECT_TRUE(nalu_type == kStapA); EXPECT_TRUE(nalu_type == kStapA);