@@ -46,11 +46,22 @@ static const size_t kHevcLengthFieldSize = 2;
46
46
static const size_t kHevcApHeaderSize = kHevcNalHeaderSize + kHevcLengthFieldSize ;
47
47
48
48
49
- enum HevcNalHdrMasks {kHevcFbit = 0x80 , kHevcTypeMask = 0x7E , kHevcLayerIDHMask = 0x1 ,
50
- kHevcLayerIDLMask = 0xF8 , kHevcTIDMask = 0x7 , kHevcTypeMaskN = 0x81 , kHevcTypeMaskInFuHeader =0x3F };
49
+ enum HevcNalHdrMasks {
50
+ kHevcFbit = 0x80 ,
51
+ kHevcTypeMask = 0x7E ,
52
+ kHevcLayerIDHMask = 0x1 ,
53
+ kHevcLayerIDLMask = 0xF8 ,
54
+ kHevcTIDMask = 0x7 ,
55
+ kHevcTypeMaskN = 0x81 ,
56
+ kHevcTypeMaskInFuHeader =0x3F
57
+ };
51
58
52
59
// Bit masks for FU headers.
53
- enum HevcFuDefs { kHevcSBit = 0x80 , kHevcEBit = 0x40 , kHevcFuTypeBit = 0x3F };
60
+ enum HevcFuDefs {
61
+ kHevcSBit = 0x80 ,
62
+ kHevcEBit = 0x40 ,
63
+ kHevcFuTypeBit = 0x3F
64
+ };
54
65
55
66
bool VerifyApNaluLengths (const uint8_t * nalu_ptr, size_t length_remaining) {
56
67
while (length_remaining > 0 ) {
@@ -74,23 +85,14 @@ bool ParseHevcSingleNalu(RtpDepacketizer::ParsedPayload* parsed_payload,
74
85
parsed_payload->type .Video .width = 0 ;
75
86
parsed_payload->type .Video .height = 0 ;
76
87
parsed_payload->type .Video .codec = kRtpVideoH265 ;
77
- // parsed_payload->type.Video.isFirstPacket = true;
78
88
RTPVideoHeaderH265* h265_header =
79
89
&parsed_payload->type .Video .codecHeader .H265 ;
80
90
81
91
if (payload_data_length <= 4 )
82
92
return false ;
83
93
84
- if ((payload_data[0 ] == 0 && payload_data[1 ] == 0 && payload_data[2 ] == 1 ) ||
85
- (payload_data[0 ] == 0 && payload_data[1 ] == 0 && payload_data[2 ] == 0 && payload_data[3 ] == 1 )) {
86
- uint8_t single_nal_type = (payload_data[2 ] == 1 ) ? ((payload_data[3 ] >> 1 ) & 0x7F ) : ((payload_data[4 ] >> 1 ) & 0x7F );
87
- h265_header->packetization_type = kH265SingleNalu ;
88
- h265_header->nalu_type = single_nal_type;
89
- parsed_payload->frame_type = kVideoFrameKey ;
90
- return true ;
91
- }
92
- const uint8_t * nalu_start = payload_data + kHevcNalHeaderSize ;
93
- size_t nalu_length = payload_data_length - kHevcNalHeaderSize ;
94
+ const uint8_t * nalu_start = payload_data /* kHevcNalHeaderSize*/ ;
95
+ size_t nalu_length = payload_data_length /* - kHevcNalHeaderSize*/ ;
94
96
// nal type is at bit 6:1
95
97
uint8_t nal_type = (payload_data[0 ] >>1 ) & 0x7F ;
96
98
if (nal_type == kHevcAp ) {
@@ -111,6 +113,7 @@ bool ParseHevcSingleNalu(RtpDepacketizer::ParsedPayload* parsed_payload,
111
113
nalu_length -= kHevcApHeaderSize ;
112
114
h265_header->packetization_type = kH265AP ;
113
115
} else {
116
+ parsed_payload->type .Video .is_first_packet_in_frame = true ;
114
117
h265_header->packetization_type = kH265SingleNalu ;
115
118
}
116
119
h265_header->nalu_type = nal_type;
@@ -179,7 +182,7 @@ bool ParseHevcFuNalu(RtpDepacketizer::ParsedPayload* parsed_payload,
179
182
parsed_payload->type .Video .width = 0 ;
180
183
parsed_payload->type .Video .height = 0 ;
181
184
parsed_payload->type .Video .codec = kRtpVideoH265 ;
182
- // parsed_payload->type.Video.isFirstPacket = first_fragment;
185
+ parsed_payload->type .Video .is_first_packet_in_frame = first_fragment;
183
186
RTPVideoHeaderH265* h265_header =
184
187
&parsed_payload->type .Video .codecHeader .H265 ;
185
188
h265_header->packetization_type = kH265FU ;
0 commit comments