Skip to content
This repository was archived by the owner on Oct 25, 2024. It is now read-only.

Commit 5dd0f01

Browse files
committed
hevc fix after windows client update to M60
Change-Id: If7400adac757c7d2344a7383b4eb07d398deea79 Reviewed-on: https://git-ccr-1.devtools.intel.com/gerrit/64386 Reviewed-by: Qiu, Jianlin <[email protected]> Tested-by: Qiu, Jianlin <[email protected]>
1 parent 28c742c commit 5dd0f01

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

webrtc/modules/rtp_rtcp/source/rtp_format_h265.cc

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,25 @@ bool ParseHevcSingleNalu(RtpDepacketizer::ParsedPayload* parsed_payload,
7474
parsed_payload->type.Video.width = 0;
7575
parsed_payload->type.Video.height = 0;
7676
parsed_payload->type.Video.codec = kRtpVideoH265;
77-
parsed_payload->type.Video.isFirstPacket = true;
77+
//parsed_payload->type.Video.isFirstPacket = true;
7878
RTPVideoHeaderH265* h265_header =
7979
&parsed_payload->type.Video.codecHeader.H265;
8080

81+
if (payload_data_length <= 4)
82+
return false;
83+
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+
}
8192
const uint8_t* nalu_start = payload_data + kHevcNalHeaderSize;
8293
size_t nalu_length = payload_data_length - kHevcNalHeaderSize;
8394
//nal type is at bit 6:1
84-
uint8_t nal_type = (payload_data[0] >>1) & kHevcTypeMask;
95+
uint8_t nal_type = (payload_data[0] >>1) & 0x7F;
8596
if (nal_type == kHevcAp) {
8697
// Skip the PayloadHdr. Also for simplicity, we don't support the DONL/DOND inclusion
8798
// in aggregation packet.
@@ -124,7 +135,8 @@ bool ParseHevcSingleNalu(RtpDepacketizer::ParsedPayload* parsed_payload,
124135
parsed_payload->frame_type = kVideoFrameKey;
125136
break;
126137
default:
127-
parsed_payload->frame_type = kVideoFrameDelta;
138+
parsed_payload->frame_type = kVideoFrameKey;
139+
//parsed_payload->frame_type = kVideoFrameDelta;
128140
break;
129141
}
130142
return true;
@@ -161,12 +173,13 @@ bool ParseHevcFuNalu(RtpDepacketizer::ParsedPayload* parsed_payload,
161173
if (original_nal_type == kIdrNLp || original_nal_type == kIdrWRadl) {
162174
parsed_payload->frame_type = kVideoFrameKey;
163175
} else {
164-
parsed_payload->frame_type = kVideoFrameDelta;
176+
parsed_payload->frame_type = kVideoFrameKey;
177+
//parsed_payload->frame_type = kVideoFrameDelta;
165178
}
166179
parsed_payload->type.Video.width = 0;
167180
parsed_payload->type.Video.height = 0;
168181
parsed_payload->type.Video.codec = kRtpVideoH265;
169-
parsed_payload->type.Video.isFirstPacket = first_fragment;
182+
//parsed_payload->type.Video.isFirstPacket = first_fragment;
170183
RTPVideoHeaderH265* h265_header =
171184
&parsed_payload->type.Video.codecHeader.H265;
172185
h265_header->packetization_type = kH265FU;
@@ -266,7 +279,8 @@ int RtpPacketizerH265::PacketizeAp(size_t fragment_index) {
266279

267280
// Next fragment.
268281
++fragment_index;
269-
if (fragment_index == input_fragments_.size())
282+
//if (fragment_index == input_fragments_.size())
283+
if (true)
270284
break;
271285
fragment = &input_fragments_[fragment_index];
272286

webrtc/modules/rtp_rtcp/source/rtp_receiver_video.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "webrtc/base/checks.h"
1919
#include "webrtc/base/logging.h"
2020
#include "webrtc/base/trace_event.h"
21+
#include "webrtc/modules/include/module_common_types.h"
2122
#include "webrtc/modules/rtp_rtcp/include/rtp_cvo.h"
2223
#include "webrtc/modules/rtp_rtcp/include/rtp_payload_registry.h"
2324
#include "webrtc/modules/rtp_rtcp/source/rtp_format.h"
@@ -99,6 +100,10 @@ int32_t RTPReceiverVideo::ParseRtpPacket(WebRtcRTPHeader* rtp_header,
99100

100101
rtp_header->type.Video.playout_delay =
101102
rtp_header->header.extension.playout_delay;
103+
#ifndef DISABLE_H265
104+
if (rtp_header->type.Video.codec == webrtc::kRtpVideoH265)
105+
rtp_header->type.Video.is_first_packet_in_frame = is_first_packet;
106+
#endif
102107
return data_callback_->OnReceivedPayloadData(parsed_payload.payload,
103108
parsed_payload.payload_length,
104109
rtp_header) == 0

webrtc/modules/video_coding/packet.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ void VCMPacket::CopyCodecSpecifics(const RTPVideoHeader& videoHeader) {
136136
case kRtpVideoH265:
137137
is_first_packet_in_frame = videoHeader.is_first_packet_in_frame;
138138
if (is_first_packet_in_frame)
139-
insertStartCode = true;
139+
insertStartCode = false;
140140
if (is_first_packet_in_frame && markerBit) {
141141
completeNALU = kNaluComplete;
142142
} else if (is_first_packet_in_frame) {

0 commit comments

Comments
 (0)