Try to recover if the frame header parsing fails

This commit is contained in:
Cameron Gutman 2022-09-24 13:43:32 -05:00
parent 54825845e7
commit 3ae777f973

View File

@ -744,11 +744,15 @@ static void processRtpPayload(PNV_VIDEO_PACKET videoPacket, int length,
// Other versions don't have a frame header at all // Other versions don't have a frame header at all
} }
// Assert that the 3 or 4 byte Annex B NALU prefix is next // The Annex B NALU start prefix must be next
LC_ASSERT(currentPos.data[currentPos.offset + 0] == 0); if (!getAnnexBStartSequence(&currentPos, NULL)) {
LC_ASSERT(currentPos.data[currentPos.offset + 1] == 0); // If we aren't starting on a start prefix, something went wrong.
LC_ASSERT(currentPos.data[currentPos.offset + 2] == 0 || currentPos.data[currentPos.offset + 2] == 1); LC_ASSERT(false);
LC_ASSERT(currentPos.data[currentPos.offset + 3] == 1 || currentPos.data[currentPos.offset + 2] == 1);
// For release builds, we will try to recover by searching for one.
// This mimics the way most decoders handle this situation.
skipToNextNal(&currentPos);
}
// If an AUD NAL is prepended to this frame data, remove it. // If an AUD NAL is prepended to this frame data, remove it.
// Other parts of this code are not prepared to deal with a // Other parts of this code are not prepared to deal with a