From 896f63a3c38f92b34c0df0fb6eb9379eb83580e8 Mon Sep 17 00:00:00 2001 From: Rohit Krishnan Date: Fri, 14 Apr 2017 12:11:04 -0400 Subject: [PATCH 1/2] Fixes OOM that can occur from reading first NAL packet before sequence header --- .../exoplayer2/extractor/flv/VideoTagPayloadReader.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java index 3ff7dd608e..a86836d56f 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java @@ -93,7 +93,7 @@ import com.google.android.exoplayer2.video.AvcConfig; avcConfig.initializationData, Format.NO_VALUE, avcConfig.pixelWidthAspectRatio, null); output.format(format); hasOutputFormat = true; - } else if (packetType == AVC_PACKET_TYPE_AVC_NALU) { + } else if (packetType == AVC_PACKET_TYPE_AVC_NALU && hasOutputFormat) { // TODO: Deduplicate with Mp4Extractor. // Zero the top three bytes of the array that we'll use to decode nal unit lengths, in case // they're only 1 or 2 bytes long. @@ -101,6 +101,7 @@ import com.google.android.exoplayer2.video.AvcConfig; nalLengthData[0] = 0; nalLengthData[1] = 0; nalLengthData[2] = 0; + if(nalUnitLengthFieldLength == 0) nalUnitLengthFieldLength = 4; int nalUnitLengthFieldLengthDiff = 4 - nalUnitLengthFieldLength; // NAL units are length delimited, but the decoder requires start code delimited units. // Loop until we've written the sample to the track output, replacing length delimiters with From 3b4d981891ca23b16a9d46666ef1b84256456d4a Mon Sep 17 00:00:00 2001 From: Tyler Roach Date: Tue, 18 Apr 2017 09:32:40 -0400 Subject: [PATCH 2/2] If hasOutputFormat is true, nalUnitLengthFieldLengthDiff will never be 0 --- .../android/exoplayer2/extractor/flv/VideoTagPayloadReader.java | 1 - 1 file changed, 1 deletion(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java index a86836d56f..8a4d314ee0 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java @@ -101,7 +101,6 @@ import com.google.android.exoplayer2.video.AvcConfig; nalLengthData[0] = 0; nalLengthData[1] = 0; nalLengthData[2] = 0; - if(nalUnitLengthFieldLength == 0) nalUnitLengthFieldLength = 4; int nalUnitLengthFieldLengthDiff = 4 - nalUnitLengthFieldLength; // NAL units are length delimited, but the decoder requires start code delimited units. // Loop until we've written the sample to the track output, replacing length delimiters with