Browse Source

Merge pull request #1495 from rsanting/fix-av1-vaapi-no-delimiter

Fix AV1 RTP packetizer to handle frames without temporal unit delimiters
Paul-Louis Ageneau 3 weeks ago
parent
commit
99dadbde19
1 changed files with 7 additions and 3 deletions
  1. 7 3
      src/av1rtppacketizer.cpp

+ 7 - 3
src/av1rtppacketizer.cpp

@@ -48,12 +48,16 @@ AV1RtpPacketizer::AV1RtpPacketizer(Packetization packetization,
 std::vector<binary> AV1RtpPacketizer::extractTemporalUnitObus(const binary &data) {
 std::vector<binary> AV1RtpPacketizer::extractTemporalUnitObus(const binary &data) {
 	std::vector<binary> obus;
 	std::vector<binary> obus;
 
 
-	if (data.size() <= 2 || (data.at(0) != obuTemporalUnitDelimiter.at(0)) ||
-	    (data.at(1) != obuTemporalUnitDelimiter.at(1))) {
+	if (data.size() == 0) {
 		return {};
 		return {};
 	}
 	}
 
 
-	size_t index = 2;
+	// VAAPI doesn't seem to include delimiters
+	size_t index = 0;
+	if (data.size() > 2 && (data.at(0) == obuTemporalUnitDelimiter.at(0)) &&
+	    (data.at(1) == obuTemporalUnitDelimiter.at(1))) {
+		index = 2;
+	}
 	while (index < data.size()) {
 	while (index < data.size()) {
 		if ((data.at(index) & obuHasSizeMask) == byte(0)) {
 		if ((data.at(index) & obuHasSizeMask) == byte(0)) {
 			return obus;
 			return obus;