From d2f677bc4cbb4b3e6ddd0a32e132ee967cde0ec3 Mon Sep 17 00:00:00 2001 From: Simon Hung Date: Sat, 20 Jan 2024 01:06:01 +0800 Subject: [PATCH 1/2] Update PgsParser.java Fix "subtitles rendered with border and no fill color" problem: https://github.com/moneytoo/Player/issues/413 because '0' means it's an index to the palette table, not an RGBA value of 0 --- .../main/java/androidx/media3/extractor/text/pgs/PgsParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/text/pgs/PgsParser.java b/libraries/extractor/src/main/java/androidx/media3/extractor/text/pgs/PgsParser.java index 87b4d4f6c7..a316c617c1 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/text/pgs/PgsParser.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/text/pgs/PgsParser.java @@ -248,7 +248,7 @@ public final class PgsParser implements SubtitleParser { (switchBits & 0x40) == 0 ? (switchBits & 0x3F) : (((switchBits & 0x3F) << 8) | bitmapData.readUnsignedByte()); - int color = (switchBits & 0x80) == 0 ? 0 : colors[bitmapData.readUnsignedByte()]; + int color = (switchBits & 0x80) == 0 ? colors[0] : colors[bitmapData.readUnsignedByte()]; Arrays.fill( argbBitmapData, argbBitmapDataIndex, argbBitmapDataIndex + runLength, color); argbBitmapDataIndex += runLength; From 743e7942b6fa4a8a80547035c84ed18cb0e61234 Mon Sep 17 00:00:00 2001 From: Ian Baker Date: Wed, 15 May 2024 10:45:41 +0100 Subject: [PATCH 2/2] Format with google-java-format and add release note --- RELEASENOTES.md | 3 +++ .../java/androidx/media3/extractor/text/pgs/PgsParser.java | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b5088f821d..b6f7083e3b 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -82,6 +82,9 @@ * Apps with custom `SubtitleDecoder` implementations need to update them to implement `SubtitleParser` instead (and `SubtitleParser.Factory` instead of `SubtitleDecoderFactory`). + * PGS: Fix run-length decoding to resolve `0` as a color index, instead of + a literal color value + ([#1367](https://github.com/androidx/media/pull/1367)). * Metadata: * Fix mapping of MP4 to ID3 sort tags. Previously the 'album sort' (`soal`), 'artist sort' (`soar`) and 'album artist sort' (`soaa`) MP4 diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/text/pgs/PgsParser.java b/libraries/extractor/src/main/java/androidx/media3/extractor/text/pgs/PgsParser.java index a316c617c1..0e7ff2d1a7 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/text/pgs/PgsParser.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/text/pgs/PgsParser.java @@ -248,7 +248,8 @@ public final class PgsParser implements SubtitleParser { (switchBits & 0x40) == 0 ? (switchBits & 0x3F) : (((switchBits & 0x3F) << 8) | bitmapData.readUnsignedByte()); - int color = (switchBits & 0x80) == 0 ? colors[0] : colors[bitmapData.readUnsignedByte()]; + int color = + (switchBits & 0x80) == 0 ? colors[0] : colors[bitmapData.readUnsignedByte()]; Arrays.fill( argbBitmapData, argbBitmapDataIndex, argbBitmapDataIndex + runLength, color); argbBitmapDataIndex += runLength;