From 77790df5a2781b5350bda5b0ed4850e207556037 Mon Sep 17 00:00:00 2001 From: Ian Baker Date: Fri, 10 Jan 2025 17:17:28 +0000 Subject: [PATCH] Plumb palette through as a method parameter to satisfy nullness checker --- .../extractor/text/vobsub/VobsubParser.java | 19 ++++++++++--------- .../DefaultSubtitleParserFactoryTest.java | 3 +++ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/text/vobsub/VobsubParser.java b/libraries/extractor/src/main/java/androidx/media3/extractor/text/vobsub/VobsubParser.java index ac07214862..b8cadd2a72 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/text/vobsub/VobsubParser.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/text/vobsub/VobsubParser.java @@ -169,16 +169,17 @@ public final class VobsubParser implements SubtitleParser { // Give up if we don't have the color palette or the video size. return; } + int[] palette = this.palette; buffer.skipBytes(buffer.readUnsignedShort() - 2); int end = buffer.readUnsignedShort(); - parseControl(buffer, end); + parseControl(palette, buffer, end); } - private void parseControl(ParsableByteArray buffer, int end) { + private void parseControl(int[] palette, ParsableByteArray buffer, int end) { while (buffer.getPosition() < end && buffer.bytesLeft() > 0) { switch (buffer.readUnsignedByte()) { case CMD_COLORS: - if (!parseControlColors(buffer)) { + if (!parseControlColors(palette, buffer)) { return; } break; @@ -204,7 +205,7 @@ public final class VobsubParser implements SubtitleParser { } } - private boolean parseControlColors(ParsableByteArray buffer) { + private boolean parseControlColors(int[] palette, ParsableByteArray buffer) { if (buffer.bytesLeft() < 2) { return false; } @@ -212,16 +213,16 @@ public final class VobsubParser implements SubtitleParser { int byte0 = buffer.readUnsignedByte(); int byte1 = buffer.readUnsignedByte(); - colors[3] = getColor(byte0 >> 4); - colors[2] = getColor(byte0 & 0xf); - colors[1] = getColor(byte1 >> 4); - colors[0] = getColor(byte1 & 0xf); + colors[3] = getColor(palette, byte0 >> 4); + colors[2] = getColor(palette, byte0 & 0xf); + colors[1] = getColor(palette, byte1 >> 4); + colors[0] = getColor(palette, byte1 & 0xf); hasColors = true; return true; } - private int getColor(int index) { + private static int getColor(int[] palette, int index) { return index >= 0 && index < palette.length ? palette[index] : palette[0]; } diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/text/DefaultSubtitleParserFactoryTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/text/DefaultSubtitleParserFactoryTest.java index 471214afac..b8bef9fc7f 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/text/DefaultSubtitleParserFactoryTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/text/DefaultSubtitleParserFactoryTest.java @@ -50,6 +50,9 @@ public class DefaultSubtitleParserFactoryTest { if (fieldValue.equals(MimeTypes.APPLICATION_DVBSUBS)) { formatBuilder.setInitializationData(ImmutableList.of(new byte[] {1, 2, 3, 4})); } + if (fieldValue.equals(MimeTypes.APPLICATION_VOBSUB)) { + formatBuilder.setInitializationData(ImmutableList.of(new byte[] {1, 2, 3, 4})); + } Format format = formatBuilder.build(); if (factory.supportsFormat(format)) { try {