mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
define SrsAvcNaluTypeParse
This commit is contained in:
parent
b3c508534d
commit
83d577a49a
5 changed files with 13 additions and 13 deletions
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue