VCMPacket: Set VCMNaluCompleteness for generic codecs
We previously always set VCMNaluCompleteness to kNaluComplete for kVideoCodecGeneric, which seems wrong. This CL fixes that and also cleans up the code a bit. The logic for VP8, VP9, and H264 should be exactly preserved. This CL also updates the test to use kVideoCodecGeneric instead of kVideoCodecUnknown. kVideoCodecUnknown has no purpose and should be removed. Bug: webrtc:9516 Change-Id: Ib8d2bf6a04d41b91c5774531f3a669edce3c6cb2 Reviewed-on: https://webrtc-review.googlesource.com/88181 Reviewed-by: Philip Eliasson <philipel@webrtc.org> Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Commit-Queue: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23933}
This commit is contained in:

committed by
Commit Bot

parent
02e3436a73
commit
2234121cfb
@ -242,7 +242,8 @@ class TestBasicJitterBuffer : public ::testing::TestWithParam<std::string>,
|
||||
rtpHeader.header.timestamp = timestamp_;
|
||||
rtpHeader.header.markerBit = true;
|
||||
rtpHeader.frameType = kVideoFrameDelta;
|
||||
rtpHeader.video_header().codec = kVideoCodecUnknown;
|
||||
rtpHeader.video_header().codec = kVideoCodecGeneric;
|
||||
rtpHeader.video_header().is_first_packet_in_frame = true;
|
||||
packet_.reset(new VCMPacket(data_, size_, rtpHeader));
|
||||
}
|
||||
|
||||
@ -800,7 +801,7 @@ TEST_F(TestBasicJitterBuffer, TestReorderingWithPadding) {
|
||||
rtpHeader.header.sequenceNumber = seq_num_ + 2;
|
||||
rtpHeader.header.timestamp = timestamp_ + (33 * 90);
|
||||
rtpHeader.header.markerBit = false;
|
||||
rtpHeader.video_header().codec = kVideoCodecUnknown;
|
||||
rtpHeader.video_header().codec = kVideoCodecGeneric;
|
||||
VCMPacket empty_packet(data_, 0, rtpHeader);
|
||||
EXPECT_EQ(kOldPacket,
|
||||
jitter_buffer_->InsertPacket(empty_packet, &retransmitted));
|
||||
@ -2164,7 +2165,7 @@ TEST_F(TestBasicJitterBuffer, H264IncompleteNalu) {
|
||||
timestamp_ += 33 * 90;
|
||||
WebRtcRTPHeader rtpHeader;
|
||||
memset(&rtpHeader, 0, sizeof(rtpHeader));
|
||||
rtpHeader.video_header().codec = kVideoCodecUnknown;
|
||||
rtpHeader.video_header().codec = kVideoCodecGeneric;
|
||||
VCMPacket emptypacket(data_, 0, rtpHeader);
|
||||
emptypacket.seqNum = seq_num_;
|
||||
emptypacket.timestamp = timestamp_;
|
||||
|
@ -49,15 +49,24 @@ VCMPacket::VCMPacket(const uint8_t* ptr,
|
||||
markerBit(rtpHeader.header.markerBit),
|
||||
timesNacked(-1),
|
||||
frameType(rtpHeader.frameType),
|
||||
codec(kVideoCodecUnknown),
|
||||
codec(rtpHeader.video_header().codec),
|
||||
is_first_packet_in_frame(
|
||||
rtpHeader.video_header().is_first_packet_in_frame),
|
||||
completeNALU(kNaluComplete),
|
||||
insertStartCode(false),
|
||||
completeNALU(kNaluIncomplete),
|
||||
insertStartCode(rtpHeader.video_header().codec == kVideoCodecH264 &&
|
||||
rtpHeader.video_header().is_first_packet_in_frame),
|
||||
width(rtpHeader.video_header().width),
|
||||
height(rtpHeader.video_header().height),
|
||||
video_header(rtpHeader.video_header()) {
|
||||
CopyCodecSpecifics(rtpHeader.video_header());
|
||||
if (is_first_packet_in_frame && markerBit) {
|
||||
completeNALU = kNaluComplete;
|
||||
} else if (is_first_packet_in_frame) {
|
||||
completeNALU = kNaluStart;
|
||||
} else if (markerBit) {
|
||||
completeNALU = kNaluEnd;
|
||||
} else {
|
||||
completeNALU = kNaluIncomplete;
|
||||
}
|
||||
|
||||
if (markerBit) {
|
||||
video_header.rotation = rtpHeader.video_header().rotation;
|
||||
@ -70,74 +79,4 @@ VCMPacket::VCMPacket(const uint8_t* ptr,
|
||||
}
|
||||
}
|
||||
|
||||
void VCMPacket::Reset() {
|
||||
payloadType = 0;
|
||||
timestamp = 0;
|
||||
ntp_time_ms_ = 0;
|
||||
seqNum = 0;
|
||||
dataPtr = NULL;
|
||||
sizeBytes = 0;
|
||||
markerBit = false;
|
||||
timesNacked = -1;
|
||||
frameType = kEmptyFrame;
|
||||
codec = kVideoCodecUnknown;
|
||||
is_first_packet_in_frame = false;
|
||||
completeNALU = kNaluUnset;
|
||||
insertStartCode = false;
|
||||
width = 0;
|
||||
height = 0;
|
||||
video_header = {};
|
||||
}
|
||||
|
||||
void VCMPacket::CopyCodecSpecifics(const RTPVideoHeader& videoHeader) {
|
||||
codec = videoHeader.codec;
|
||||
switch (videoHeader.codec) {
|
||||
case kVideoCodecVP8:
|
||||
// Handle all packets within a frame as depending on the previous packet
|
||||
// TODO(holmer): This should be changed to make fragments independent
|
||||
// when the VP8 RTP receiver supports fragments.
|
||||
if (is_first_packet_in_frame && markerBit)
|
||||
completeNALU = kNaluComplete;
|
||||
else if (is_first_packet_in_frame)
|
||||
completeNALU = kNaluStart;
|
||||
else if (markerBit)
|
||||
completeNALU = kNaluEnd;
|
||||
else
|
||||
completeNALU = kNaluIncomplete;
|
||||
|
||||
return;
|
||||
case kVideoCodecVP9:
|
||||
if (is_first_packet_in_frame && markerBit)
|
||||
completeNALU = kNaluComplete;
|
||||
else if (is_first_packet_in_frame)
|
||||
completeNALU = kNaluStart;
|
||||
else if (markerBit)
|
||||
completeNALU = kNaluEnd;
|
||||
else
|
||||
completeNALU = kNaluIncomplete;
|
||||
|
||||
return;
|
||||
case kVideoCodecH264:
|
||||
is_first_packet_in_frame = videoHeader.is_first_packet_in_frame;
|
||||
if (is_first_packet_in_frame)
|
||||
insertStartCode = true;
|
||||
|
||||
if (is_first_packet_in_frame && markerBit) {
|
||||
completeNALU = kNaluComplete;
|
||||
} else if (is_first_packet_in_frame) {
|
||||
completeNALU = kNaluStart;
|
||||
} else if (markerBit) {
|
||||
completeNALU = kNaluEnd;
|
||||
} else {
|
||||
completeNALU = kNaluIncomplete;
|
||||
}
|
||||
return;
|
||||
case kVideoCodecGeneric:
|
||||
return;
|
||||
default:
|
||||
codec = kVideoCodecUnknown;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
@ -23,8 +23,6 @@ class VCMPacket {
|
||||
const size_t size,
|
||||
const WebRtcRTPHeader& rtpHeader);
|
||||
|
||||
void Reset();
|
||||
|
||||
uint8_t payloadType;
|
||||
uint32_t timestamp;
|
||||
// NTP time of the capture time in local timebase in milliseconds.
|
||||
@ -47,9 +45,6 @@ class VCMPacket {
|
||||
RTPVideoHeader video_header;
|
||||
|
||||
int64_t receive_time_ms;
|
||||
|
||||
protected:
|
||||
void CopyCodecSpecifics(const RTPVideoHeader& videoHeader);
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
@ -23,7 +23,6 @@ class TestSessionInfo : public ::testing::Test {
|
||||
memset(packet_buffer_, 0, sizeof(packet_buffer_));
|
||||
memset(frame_buffer_, 0, sizeof(frame_buffer_));
|
||||
session_.Reset();
|
||||
packet_.Reset();
|
||||
packet_.frameType = kVideoFrameDelta;
|
||||
packet_.sizeBytes = packet_buffer_size();
|
||||
packet_.dataPtr = packet_buffer_;
|
||||
|
Reference in New Issue
Block a user