From ff3d7dff12f0e7b1fd06906620f4daf6aa5a02f6 Mon Sep 17 00:00:00 2001 From: Shraddha Basantwani Date: Wed, 6 Jul 2022 12:46:52 +0530 Subject: [PATCH] Fix VP8 Reader Update VP8 header to check if the S bit is set. Variable fragmentedSampleSizeBytes is initialised with -1, and reader is directly adding fragmentSize to this variable. Updated it to check if the size is unset. Bug: 238153477 Test: manual Change-Id: I9d5735422a4a0eeb2967af93809b879b434e3c57 --- .../media3/exoplayer/rtsp/reader/RtpVp8Reader.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/reader/RtpVp8Reader.java b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/reader/RtpVp8Reader.java index 72b739edd2..dda04bf8c6 100644 --- a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/reader/RtpVp8Reader.java +++ b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/reader/RtpVp8Reader.java @@ -113,7 +113,11 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; int fragmentSize = data.bytesLeft(); trackOutput.sampleData(data, fragmentSize); - fragmentedSampleSizeBytes += fragmentSize; + if (fragmentedSampleSizeBytes == C.LENGTH_UNSET) { + fragmentedSampleSizeBytes = fragmentSize; + } else { + fragmentedSampleSizeBytes += fragmentSize; + } if (rtpMarker) { if (firstReceivedTimestamp == C.TIME_UNSET) { @@ -150,7 +154,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; if (!gotFirstPacketOfVp8Frame) { // TODO(b/198620566) Consider using ParsableBitArray. // For start of VP8 partition S=1 and PID=0 as per RFC7741 Section 4.2. - if ((header & 0x10) != 0x1 || (header & 0x07) != 0) { + if ((header & 0x10) != 0x10 || (header & 0x07) != 0) { Log.w(TAG, "RTP packet is not the start of a new VP8 partition, skipping."); return false; }